UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VulkanPipeline.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved..
2
3/*=============================================================================
4 VulkanPipeline.h: Private Vulkan RHI definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "VulkanResources.h"
12#include "ShaderPipelineCache.h"
13
14
15#define VULKAN_PSO_CACHE_DEBUG 0
16#define VULKAN_USE_SHADERKEYS 1
17class FVulkanDevice;
19
20
22using FVulkanGraphicsPipelineStateLRUNode = FVulkanGraphicsPipelineStateLRU::TDoubleLinkedListNode;
23
24
25class FVulkanPSOKey : public TDataKey<FVulkanPSOKey, true> {};
26
27template <typename TVulkanShader>
28static inline uint64 GetShaderKey(FRHIGraphicsShader* ShaderType)
29{
30 TVulkanShader* VulkanShader = static_cast<TVulkanShader*>(ShaderType);
33}
34
36{
37 switch (Stage)
38 {
40 return GetShaderKey<FVulkanVertexShader>(BSI.VertexShaderRHI);
42 return GetShaderKey<FVulkanPixelShader>(BSI.PixelShaderRHI);
44 return GetShaderKey<FVulkanGeometryShader>(BSI.GetGeometryShader());
46 return GetShaderKey<FVulkanMeshShader>(BSI.GetMeshShader());
48 return GetShaderKey<FVulkanTaskShader>(BSI.GetAmplificationShader());
49 default:
50 check(0);
51 }
52
53 return 0;
54}
55
56
59
60
61
63{
66
69
70 friend inline uint32 GetTypeHash(const FVulkanShaderHashes& Hashes)
71 {
72 return Hashes.Hash;
73 }
74
75 inline void Finalize()
76 {
77 Hash = FCrc::MemCrc32(Stages, sizeof(Stages));
78 }
79
80 friend inline bool operator == (const FVulkanShaderHashes& A, const FVulkanShaderHashes& B)
81 {
83 {
84 if (A.Stages[Index] != B.Stages[Index])
85 {
86 return false;
87 }
88 }
89
90 return true;
91 }
92};
93
95{
96 //TODO: increase hash to 12 bytes to reduce collisions
99
102 {
103 }
104};
105
122
123
124
125
127{
129
160
162
201
221
223 {
243
246
269 };
271
272#if VULKAN_USE_SHADERKEYS
275#else
276 FVulkanShaderHashes ShaderHashes;
277#endif
278
280 {
282 {
285
288 bool operator == (const FAttachmentRef& In) const
289 {
290 return Attachment == In.Attachment && Layout == In.Layout;
291 }
292 };
293
295 {
297
301 {
302 return Layout == In.Layout;
303 }
304 };
305
311
313 {
323
324 bool operator==(const FAttachmentDesc& In) const
325 {
326 return Format == In.Format &&
327 Flags == In.Flags &&
328 Samples == In.Samples &&
329 LoadOp == In.LoadOp &&
330 StoreOp == In.StoreOp &&
335 }
336
337 void ReadFrom(const VkAttachmentDescription &InState);
338 void WriteInto(VkAttachmentDescription& OutState) const;
339 };
340
355
358
368
371
391 };
393
395
397
400
401 bool operator==(const FGfxPipelineDesc& In) const
402 {
404 {
405 return false;
406 }
407
409 {
410 return false;
411 }
412
413 if (Topology != In.Topology)
414 {
415 return false;
416 }
417
419 {
420 return false;
421 }
422
424 {
425 return false;
426 }
427
428 if (!(Rasterizer == In.Rasterizer))
429 {
430 return false;
431 }
432
433 if (!(DepthStencil == In.DepthStencil))
434 {
435 return false;
436 }
437
438 if (!(SubpassIndex == In.SubpassIndex))
439 {
440 return false;
441 }
442
444 {
445 return false;
446 }
447#if 0 == VULKAN_USE_SHADERKEYS
448 if (!(ShaderHashes == In.ShaderHashes))
449 {
450 return false;
451 }
452#else
453 if (0 != FMemory::Memcmp(ShaderKeys, In.ShaderKeys, sizeof(ShaderKeys)))
454 {
455 return false;
456 }
457#endif
458
459 if (!(RenderTargets == In.RenderTargets))
460 {
461 return false;
462 }
463
465 {
466 return false;
467 }
468
470 {
471 return false;
472 }
473
474 if (ShadingRate != In.ShadingRate)
475 {
476 return false;
477 }
478
479 if (Combiner != In.Combiner)
480 {
481 return false;
482 }
483
484 return true;
485 }
486};
487
488
489
490
492{
493public:
494
495 // Array of potential cache locations; first entries have highest priority. Only one cache file is loaded. If unsuccessful, tries next entry in the array.
497 void Save(const FString& CacheFilename);
498
501
502 void RebuildCache();
503
506
508
509private:
510 class FPipelineCache;
511
513 void OnShaderPipelineCacheOpened(FString const& Name, EShaderPlatform Platform, uint32 Count, const FGuid& VersionGuid, FShaderPipelineCache::FShaderCachePrecompileContext& ShaderCachePrecompileContext);
514 void OnShaderPipelineCachePrecompilationComplete(uint32 Count, double Seconds, const FShaderPipelineCache::FShaderCachePrecompileContext& ShaderCachePrecompileContext);
515
517 bool Load(const TArray<FString>& CacheFilenames, FPipelineCache& Cache);
518 void SavePSOCache(const FString& CacheFilename, FPipelineCache& Cache);
519 void DestroyCache();
520
523 void NotifyDeletedGraphicsPSO(FRHIGraphicsPipelineState* PSO);
526
527 void CreateVertexInputLibraries();
528 VkPipeline VertexInputPipelineLibraryVS = VK_NULL_HANDLE;
529 VkPipeline VertexInputPipelineLibraryMS = VK_NULL_HANDLE;
530
531 void CreateEmptyFragmentStageLibrary();
532 VkPipeline EmptyFragmentStageLibrary = VK_NULL_HANDLE;
533
534 VkPipeline FindOrCreateFragmentOutputStateLibrary(const FVulkanGraphicsPipelineState& GraphicsPipelineState);
535 TMap<uint32, VkPipeline> FragmentOutputStatePipelineLibraries;
536 FCriticalSection FragmentOutputStateCS;
537
539
540 FVulkanLayout* FindOrAddLayout(const FVulkanDescriptorSetsLayoutInfo& DescriptorSetLayoutInfo, bool bGfxLayout, bool bUsesBindless);
541 FVulkanComputePipeline* CreateComputePipelineFromShader(FVulkanComputeShader* Shader);
542
544 void TickLRU();
545 bool LRUEvictImmediately();
546 void LRUTrim(uint32 nSpaceNeeded);
547 void LRUAdd(FVulkanGraphicsPipelineState* PSO);
548 void LRUTouch(FVulkanGraphicsPipelineState* PSO);
549 bool LRUEvictOne(bool bOnlyOld = false);
550 void LRURemoveAll();
551 void LRUDump();
552 void LRUDebugEvictAll(); //evict all that are safe to evict without stalling..
553 void LRURemove(FVulkanGraphicsPipelineState* PSO);
554 void LRUCheckNotInside(FVulkanGraphicsPipelineState* PSO);
555
556
557 FVulkanDevice* Device;
558 bool bEvictImmediately;
559 FString CompiledPSOCacheTopFolderPath;
560 FString CompiledPSOCacheFolderName;
561 FDelegateHandle OnShaderPipelineCacheOpenedDelegate;
562 FDelegateHandle OnShaderPipelineCachePrecompilationCompleteDelegate;
563
564
565 FRWLock ComputePipelineLock;
566 TMap<uint64, FVulkanComputePipeline*> ComputePipelineEntries;
567
568 template<typename TType>
569 class FScopedRWAccessor
570 {
571 bool bWriteAccess;
572 TType& ProtectedObj;
573 FRWLock& RWLock;
574 public:
575 FScopedRWAccessor(bool bWriteAccessIn, TType& ProtectedObjIn, FRWLock& RWLockIn) : bWriteAccess(bWriteAccessIn), ProtectedObj(ProtectedObjIn), RWLock(RWLockIn) { bWriteAccess ? RWLock.WriteLock() : RWLock.ReadLock(); }
576 ~FScopedRWAccessor() { bWriteAccess ? RWLock.WriteUnlock() : RWLock.ReadUnlock(); }
577 TType& Get() { return ProtectedObj; }
578 };
579
580 using FScopedPipelineCache = FScopedRWAccessor<VkPipelineCache>;
581
582 enum class EPipelineCacheAccess : uint8
583 {
584 Shared, // 'read' access, or for use when the API does its own synchronization.
585 Exclusive // 'write' access, excludes all other usage for the duration.
586 };
587 class FPipelineCache
588 {
589 VkPipelineCache PipelineCache = VK_NULL_HANDLE;
590 FRWLock PipelineCacheLock;
591 public:
592 FScopedPipelineCache Get(EPipelineCacheAccess PipelineAccessType) { return FScopedPipelineCache(PipelineAccessType == EPipelineCacheAccess::Exclusive, PipelineCache, PipelineCacheLock); }
593 };
594 FPipelineCache GlobalPSOCache; // contains all PSO caches opened during the program run as well as PSO objects created on the fly
595
596 FPipelineCache CurrentPrecompilingPSOCache;
597 // if true, we will link to the PSOFC, loading later, when we have that guid and only if the guid matches, saving only if there is no match, and only saving after the PSOFC is done.
598 bool bPrecompilingCacheLoadedFromFile;
599 FGuid CurrentPrecompilingPSOCacheGuid;
600
601 TSet<FGuid> CompiledPSOCaches;
602
603 FCriticalSection LayoutMapCS;
605 FVulkanDescriptorSetLayoutMap DSetLayoutMap;
606
607
608 FCriticalSection GraphicsPSOLockedCS;
610
611
612 FCriticalSection LRUCS;
614 uint32 LRUUsedPipelineSize = 0;
615 uint32 LRUUsedPipelineCount = 0;
616 uint32 LRUUsedPipelineMax = 0;
617 TMap<uint64, FVulkanPipelineSize> LRU2SizeList; // key: Shader hash (FShaderHash), value: pipeline size
618 bool bUseLRU = true;
619 friend class FVulkanDynamicRHI;
622
623 struct FVulkanLRUCacheFile
624 {
625 enum
626 {
627 LRU_CACHE_VERSION = 2,
628 };
630 {
633 } Header;
634
635 TArray<FVulkanPipelineSize> PipelineSizes;
636
637 void Save(FArchive& Ar);
638 bool Load(FArchive& Ar);
639 };
640};
641
643{
644 void Set(uint32_t Frame) const
645 {
646 LastUsedFrame.store(Frame, std::memory_order::relaxed);
647 }
648
649 uint32 Get() const
650 {
651 return LastUsedFrame.load(std::memory_order::relaxed);
652 }
653
654 // Note that the frame counter may be updated from any number of threads, and is not entirely synchronized
655 mutable std::atomic<uint32> LastUsedFrame{0};
656};
657
658// Common pipeline class
660{
661public:
663 virtual ~FVulkanPipeline();
664
665 inline VkPipeline GetHandle() const
666 {
667 return Pipeline;
668 }
669
670 inline const FVulkanLayout& GetLayout() const
671 {
672 return *Layout;
673 }
674#if VULKAN_ENABLE_LRU_CACHE
675 inline void DeleteVkPipeline(bool ImmediateDestroy)
676 {
678 {
680 {
681 VulkanRHI::vkDestroyPipeline(Device->GetHandle(), Pipeline, VULKAN_CPU_ALLOCATOR);
682 }
683 else
684 {
685 Device->GetDeferredDeletionQueue().EnqueueResource(VulkanRHI::FDeferredDeletionQueue2::EType::Pipeline, Pipeline);
686 }
688 }
689 }
690#endif
691
693
694protected:
697 FVulkanLayout* Layout; /*owned by FVulkanPipelineStateCacheManager, do not delete yourself !*/
698
702};
703
705{
706public:
708 virtual ~FVulkanComputePipeline();
709
711 {
712 return ResourceCast(GetComputeShader())->GetCodeHeader();
713 }
714
716 {
717 return *Layout;
718 }
719
720 void Bind(VkCommandBuffer CmdBuffer)
721 {
722 VulkanRHI::vkCmdBindPipeline(CmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, Pipeline);
723 }
724
725 bool UsesBindless() const
726 {
727 return bUsesBindless;
728 }
729
730protected:
731 const bool bUsesBindless;
732};
733
735{
736public:
739
741 {
742 return VertexInputState;
743 }
744
745 inline const FVulkanLayout& GetLayout() const
746 {
747 return *Layout;
748 }
749
750 inline void Bind(VkCommandBuffer CmdBuffer)
751 {
752 VulkanRHI::vkCmdBindPipeline(CmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, VulkanPipeline);
753 }
754
760
766
768 {
769 return VulkanPipeline;
770 }
771
773 {
774 switch (Frequency)
775 {
777 case SF_Pixel: return static_cast<FVulkanPixelShader*>(VulkanShaders[ShaderStage::Pixel]);
778#if PLATFORM_SUPPORTS_MESH_SHADERS
781#endif
782#if VULKAN_SUPPORTS_GEOMETRY_SHADERS
784#endif
785 default: return nullptr;
786 }
787 }
788
789 void DeleteVkPipeline(bool bImmediate);
792 void PurgeShaderModules(FVulkanShader*const* Shaders);
793
794 bool UsesBindless() const
795 {
796 return bUsesBindless;
797 }
798
799
802 bool bUsesBindless = false;
803
806
807
815
816
820 uint64 PrecacheKey;// hash of elements relevant to the PSO cache
822
824
825#if VULKAN_PSO_CACHE_DEBUG
826 FPixelShaderRHIRef PixelShaderRHI;
827 FVertexShaderRHIRef VertexShaderRHI;
828 FVertexDeclarationRHIRef VertexDeclarationRHI;
829
830#if PLATFORM_SUPPORTS_GEOMETRY_SHADERS
832#endif
833
835#endif
836
837};
838
839template<>
844
845template<>
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
FComputePipelineStateRHIRef RHICreateComputePipelineState(FRHIComputeShader *ComputeShader)
Definition DynamicRHI.h:1197
FGraphicsPipelineStateRHIRef RHICreateGraphicsPipelineState(const FGraphicsPipelineStateInitializer &Initializer)
Definition DynamicRHI.h:1184
EShaderFrequency
Definition RHIDefinitions.h:202
@ SF_Amplification
Definition RHIDefinitions.h:205
@ SF_Vertex
Definition RHIDefinitions.h:203
@ SF_Mesh
Definition RHIDefinitions.h:204
@ SF_Geometry
Definition RHIDefinitions.h:207
@ SF_Pixel
Definition RHIDefinitions.h:206
EVRSRateCombiner
Definition RHIDefinitions.h:873
@ VRSRB_Passthrough
Definition RHIDefinitions.h:874
EVRSShadingRate
Definition RHIDefinitions.h:860
@ VRSSR_1x1
Definition RHIDefinitions.h:861
EShaderPlatform
Definition RHIShaderPlatform.h:11
#define VULKAN_CPU_ALLOCATOR
Definition VulkanConfiguration.h:232
uint64 GetShaderKeyForGfxStage(const FBoundShaderStateInput &BSI, ShaderStage::EStage Stage)
Definition VulkanPipeline.h:35
void GetVulkanGfxShaders(const FBoundShaderStateInput &BSI, FVulkanShader *OutShaders[ShaderStage::NumGraphicsStages])
Definition VulkanPipeline.cpp:2889
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition IDelegateInstance.h:14
Definition RHIResources.h:4572
EPSOPrecacheCompileType
Definition RHIResources.h:4798
Definition RHIResources.h:1078
FRHIComputeShader * GetComputeShader() const
Definition RHIResources.h:1092
Definition RHIResources.h:1018
Definition RHIResources.h:1058
Definition RHIResources.h:947
Definition SecureHash.h:226
Definition ShaderPipelineCache.h:162
Definition VulkanContext.h:241
Definition VulkanPipelineState.h:182
Definition VulkanPipeline.h:705
void Bind(VkCommandBuffer CmdBuffer)
Definition VulkanPipeline.h:720
const FVulkanShaderHeader & GetShaderCodeHeader() const
Definition VulkanPipeline.h:710
virtual ~FVulkanComputePipeline()
Definition VulkanPipeline.cpp:247
const bool bUsesBindless
Definition VulkanPipeline.h:731
const FVulkanLayout & GetLayout() const
Definition VulkanPipeline.h:715
bool UsesBindless() const
Definition VulkanPipeline.h:725
Definition VulkanDescriptorSets.h:33
Definition VulkanDevice.h:279
VkDevice GetHandle() const
Definition VulkanDevice.h:425
VulkanRHI::FDeferredDeletionQueue2 & GetDeferredDeletionQueue()
Definition VulkanDevice.h:452
Definition VulkanDynamicRHI.h:69
Definition VulkanPipeline.h:735
FVulkanLayout * Layout
Definition VulkanPipeline.h:810
uint64 PrecacheKey
Definition VulkanPipeline.h:820
uint64 ShaderKeys[ShaderStage::NumGraphicsStages]
Definition VulkanPipeline.h:804
FVulkanDevice * Device
Definition VulkanPipeline.h:811
FRHIGraphicsShader * GetShader(EShaderFrequency Frequency) const override
Definition VulkanPipeline.h:772
VulkanResourceFrameCounter FrameCounter
Definition VulkanPipeline.h:823
TEnumAsByte< EPrimitiveType > PrimitiveType
Definition VulkanPipeline.h:805
const FVulkanRenderPass * RenderPass
Definition VulkanPipeline.h:814
bool bHasInputAttachments
Definition VulkanPipeline.h:800
bool bUsesBindless
Definition VulkanPipeline.h:802
void GetOrCreateShaderModules(TRefCountPtr< FVulkanShaderModule >(&ShaderModulesOUT)[ShaderStage::NumGraphicsStages], FVulkanShader *const *Shaders)
Definition VulkanPipeline.cpp:271
VkPipeline GetVulkanPipeline() const
Definition VulkanPipeline.h:767
void DeleteVkPipeline(bool bImmediate)
Definition VulkanPipeline.cpp:3100
FVulkanShader::FSpirvCode GetPatchedSpirvCode(FVulkanShader *Shader)
Definition VulkanPipeline.cpp:284
FVulkanGraphicsPipelineStateLRUNode * LRUNode
Definition VulkanPipeline.h:817
uint32 LRUFrame
Definition VulkanPipeline.h:818
const FVulkanVertexInputStateInfo & GetVertexInputState() const
Definition VulkanPipeline.h:740
const FVulkanShader * GetVulkanShader(EShaderFrequency Frequency) const
Definition VulkanPipeline.h:761
FVulkanVertexInputStateInfo VertexInputState
Definition VulkanPipeline.h:809
~FVulkanGraphicsPipelineState()
Definition VulkanPipeline.cpp:253
FVulkanShader * VulkanShaders[ShaderStage::NumGraphicsStages]
Definition VulkanPipeline.h:813
const FVulkanLayout & GetLayout() const
Definition VulkanPipeline.h:745
void PurgeShaderModules(FVulkanShader *const *Shaders)
Definition VulkanPipeline.cpp:290
VkPipeline VulkanPipeline
Definition VulkanPipeline.h:808
const uint64 GetShaderKey(EShaderFrequency Frequency) const
Definition VulkanPipeline.h:755
uint32 PipelineCacheSize
Definition VulkanPipeline.h:819
void Bind(VkCommandBuffer CmdBuffer)
Definition VulkanPipeline.h:750
bool bIsRegistered
Definition VulkanPipeline.h:801
const FGfxPipelineDesc Desc
Definition VulkanPipeline.h:812
bool UsesBindless() const
Definition VulkanPipeline.h:794
FVulkanPSOKey VulkanKey
Definition VulkanPipeline.h:821
Definition VulkanLayout.h:10
Definition VulkanPipeline.h:25
Definition VulkanPipeline.h:492
VkResult CreateRayTracingPipeline(const VkRayTracingPipelineCreateInfoKHR &CreateInfo, bool bIsPartial, VkPipeline &OutPipeline)
Definition VulkanPipeline.cpp:2116
~FVulkanPipelineStateCacheManager()
Definition VulkanPipeline.cpp:318
void NotifyDeletedComputePipeline(FVulkanComputePipeline *Pipeline)
Definition VulkanPipeline.cpp:2810
void InitAndLoad(const TArray< FString > &CacheFilenames)
Definition VulkanPipeline.cpp:477
void RebuildCache()
Definition VulkanPipeline.cpp:2167
FVulkanComputePipeline * GetOrCreateComputePipeline(FVulkanComputeShader *ComputeShader)
Definition VulkanPipeline.cpp:2706
Definition VulkanPipeline.h:660
FVulkanDevice * Device
Definition VulkanPipeline.h:695
virtual ~FVulkanPipeline()
Definition VulkanPipeline.cpp:226
const FVulkanLayout & GetLayout() const
Definition VulkanPipeline.h:670
FVulkanLayout * Layout
Definition VulkanPipeline.h:697
VkPipeline GetHandle() const
Definition VulkanPipeline.h:665
VulkanResourceFrameCounter FrameCounter
Definition VulkanPipeline.h:692
VkPipeline Pipeline
Definition VulkanPipeline.h:696
Definition VulkanRenderpass.h:453
Definition VulkanRenderTargetLayout.h:8
Definition VulkanResources.h:173
Definition VulkanResources.h:108
uint64 GetShaderKey() const
Definition VulkanResources.h:165
Definition VulkanResources.h:1034
Definition Array.h:670
Definition VulkanUtil.h:144
Definition EnumAsByte.h:22
Definition UnrealString.h.inl:34
Definition VulkanResources.h:257
Definition CriticalSection.h:14
UE_REWRITE void WriteLock()
Definition CriticalSection.h:21
UE_REWRITE void ReadUnlock()
Definition CriticalSection.h:41
UE_REWRITE void WriteUnlock()
Definition CriticalSection.h:26
UE_REWRITE void ReadLock()
Definition CriticalSection.h:36
EStage
Definition VulkanCommon.h:35
@ Geometry
Definition VulkanCommon.h:38
@ NumGraphicsStages
Definition VulkanCommon.h:42
@ Mesh
Definition VulkanCommon.h:39
@ Pixel
Definition VulkanCommon.h:37
@ Vertex
Definition VulkanCommon.h:36
@ MaxNumStages
Definition VulkanCommon.h:55
@ Task
Definition VulkanCommon.h:40
EStage GetStageForFrequency(EShaderFrequency Stage)
Definition VulkanCommon.h:62
U16 Index
Definition radfft.cpp:71
Definition RHIResources.h:4362
static UE_FORCEINLINE_HINT uint32 MemCrc32(const void *Data, int32 Length, uint32 CRC=0)
Definition Crc.h:31
Definition VulkanPipeline.h:107
uint8 StageFlags
Definition VulkanPipeline.h:110
void ReadFrom(const VkDescriptorSetLayoutBinding &InState)
Definition VulkanPipeline.cpp:758
uint8 DescriptorType
Definition VulkanPipeline.h:109
void WriteInto(VkDescriptorSetLayoutBinding &OutState) const
Definition VulkanPipeline.cpp:767
uint32 Binding
Definition VulkanPipeline.h:108
bool operator==(const FDescriptorSetLayoutBinding &In) const
Definition VulkanPipeline.h:115
Definition VulkanPipeline.h:134
void ReadFrom(const VkPipelineColorBlendAttachmentState &InState)
Definition VulkanPipeline.cpp:733
bool bBlend
Definition VulkanPipeline.h:135
uint8 DstColorBlendFactor
Definition VulkanPipeline.h:138
uint8 DstAlphaBlendFactor
Definition VulkanPipeline.h:141
uint8 SrcAlphaBlendFactor
Definition VulkanPipeline.h:140
uint8 SrcColorBlendFactor
Definition VulkanPipeline.h:137
bool operator==(const FBlendAttachment &In) const
Definition VulkanPipeline.h:147
uint8 ColorBlendOp
Definition VulkanPipeline.h:136
uint8 ColorWriteMask
Definition VulkanPipeline.h:142
uint8 AlphaBlendOp
Definition VulkanPipeline.h:139
void WriteInto(VkPipelineColorBlendAttachmentState &OutState) const
Definition VulkanPipeline.cpp:745
Definition VulkanPipeline.h:223
uint8 BackDepthFailOp
Definition VulkanPipeline.h:238
uint32 BackWriteMask
Definition VulkanPipeline.h:241
uint8 FrontFailOp
Definition VulkanPipeline.h:229
uint8 FrontDepthFailOp
Definition VulkanPipeline.h:231
bool bDepthBoundsTestEnable
Definition VulkanPipeline.h:228
uint32 FrontReference
Definition VulkanPipeline.h:235
bool bDepthWriteEnable
Definition VulkanPipeline.h:226
uint8 BackCompareOp
Definition VulkanPipeline.h:239
uint8 FrontPassOp
Definition VulkanPipeline.h:230
uint8 DepthCompareOp
Definition VulkanPipeline.h:224
uint32 BackReference
Definition VulkanPipeline.h:242
uint32 FrontCompareMask
Definition VulkanPipeline.h:233
bool bDepthTestEnable
Definition VulkanPipeline.h:225
void ReadFrom(const VkPipelineDepthStencilStateCreateInfo &InState)
Definition VulkanPipeline.cpp:880
bool operator==(const FDepthStencil &In) const
Definition VulkanPipeline.h:247
uint8 BackFailOp
Definition VulkanPipeline.h:236
void WriteInto(VkPipelineDepthStencilStateCreateInfo &OutState) const
Definition VulkanPipeline.cpp:903
uint32 BackCompareMask
Definition VulkanPipeline.h:240
uint8 BackPassOp
Definition VulkanPipeline.h:237
uint8 FrontCompareOp
Definition VulkanPipeline.h:232
bool bStencilTestEnable
Definition VulkanPipeline.h:227
uint32 FrontWriteMask
Definition VulkanPipeline.h:234
Definition VulkanPipeline.h:203
void WriteInto(VkPipelineRasterizationStateCreateInfo &OutState) const
Definition VulkanPipeline.cpp:858
uint8 PolygonMode
Definition VulkanPipeline.h:204
float DepthBiasSlopeScale
Definition VulkanPipeline.h:206
uint8 CullMode
Definition VulkanPipeline.h:205
float DepthBiasConstantFactor
Definition VulkanPipeline.h:207
void ReadFrom(const VkPipelineRasterizationStateCreateInfo &InState)
Definition VulkanPipeline.cpp:850
bool operator==(const FRasterizer &In) const
Definition VulkanPipeline.h:212
void WriteInto(VkAttachmentDescription &OutState) const
Definition VulkanPipeline.cpp:1001
uint64 FinalLayout
Definition VulkanPipeline.h:322
uint8 Flags
Definition VulkanPipeline.h:315
uint8 StoreOp
Definition VulkanPipeline.h:318
uint64 InitialLayout
Definition VulkanPipeline.h:321
void ReadFrom(const VkAttachmentDescription &InState)
Definition VulkanPipeline.cpp:988
uint8 StencilLoadOp
Definition VulkanPipeline.h:319
uint8 Samples
Definition VulkanPipeline.h:316
bool operator==(const FAttachmentDesc &In) const
Definition VulkanPipeline.h:324
uint8 LoadOp
Definition VulkanPipeline.h:317
uint32 Format
Definition VulkanPipeline.h:314
uint8 StencilStoreOp
Definition VulkanPipeline.h:320
void WriteInto(VkAttachmentReference &OutState) const
Definition VulkanPipeline.cpp:957
void ReadFrom(const VkAttachmentReference &InState)
Definition VulkanPipeline.cpp:951
bool operator==(const FAttachmentRef &In) const
Definition VulkanPipeline.h:288
uint32 Attachment
Definition VulkanPipeline.h:283
uint64 Layout
Definition VulkanPipeline.h:284
void ReadFrom(const VkAttachmentDescriptionStencilLayout &InState)
Definition VulkanPipeline.cpp:1030
uint64 FinalLayout
Definition VulkanPipeline.h:344
void WriteInto(VkAttachmentDescriptionStencilLayout &OutState) const
Definition VulkanPipeline.cpp:1036
bool operator==(const FStencilAttachmentDesc &In) const
Definition VulkanPipeline.h:346
uint64 InitialLayout
Definition VulkanPipeline.h:343
void ReadFrom(const VkAttachmentReferenceStencilLayout &InState)
Definition VulkanPipeline.cpp:971
bool operator==(const FStencilAttachmentRef &In) const
Definition VulkanPipeline.h:300
void WriteInto(VkAttachmentReferenceStencilLayout &OutState) const
Definition VulkanPipeline.cpp:976
uint64 Layout
Definition VulkanPipeline.h:296
Definition VulkanPipeline.h:280
FAttachmentRef Depth
Definition VulkanPipeline.h:308
uint8 bHasResolveAttachments
Definition VulkanPipeline.h:362
void ReadFrom(const FVulkanRenderTargetLayout &InState)
Definition VulkanPipeline.cpp:1051
bool operator==(const FRenderTargets &In) const
Definition VulkanPipeline.h:372
uint8 bHasDepthStencilResolve
Definition VulkanPipeline.h:363
void WriteInto(FVulkanRenderTargetLayout &OutState) const
Definition VulkanPipeline.cpp:1090
TArray< FAttachmentDesc > Descriptions
Definition VulkanPipeline.h:356
uint8 bHasFragmentDensityAttachment
Definition VulkanPipeline.h:364
FVector Extent3D
Definition VulkanPipeline.h:367
uint8 NumColorAttachments
Definition VulkanPipeline.h:360
uint32 RenderPassCompatibleHash
Definition VulkanPipeline.h:366
uint8 NumUsedClearValues
Definition VulkanPipeline.h:365
TArray< FAttachmentRef > ColorAttachments
Definition VulkanPipeline.h:306
FStencilAttachmentRef Stencil
Definition VulkanPipeline.h:309
TArray< FAttachmentRef > ResolveAttachments
Definition VulkanPipeline.h:307
FAttachmentRef FragmentDensity
Definition VulkanPipeline.h:310
uint8 NumAttachments
Definition VulkanPipeline.h:359
uint8 bHasDepthStencil
Definition VulkanPipeline.h:361
FStencilAttachmentDesc StencilDescription
Definition VulkanPipeline.h:357
Definition VulkanPipeline.h:182
void ReadFrom(const VkVertexInputAttributeDescription &InState)
Definition VulkanPipeline.cpp:816
uint32 Binding
Definition VulkanPipeline.h:184
bool operator==(const FVertexAttribute &In) const
Definition VulkanPipeline.h:192
uint32 Offset
Definition VulkanPipeline.h:186
void WriteInto(VkVertexInputAttributeDescription &OutState) const
Definition VulkanPipeline.cpp:824
uint32 Format
Definition VulkanPipeline.h:185
uint32 Location
Definition VulkanPipeline.h:183
Definition VulkanPipeline.h:164
void ReadFrom(const VkVertexInputBindingDescription &InState)
Definition VulkanPipeline.cpp:785
uint16 Binding
Definition VulkanPipeline.h:166
void WriteInto(VkVertexInputBindingDescription &OutState) const
Definition VulkanPipeline.cpp:792
uint16 InputRate
Definition VulkanPipeline.h:167
bool operator==(const FVertexBinding &In) const
Definition VulkanPipeline.h:173
uint32 Stride
Definition VulkanPipeline.h:165
Definition VulkanPipeline.h:127
TArray< TArray< FDescriptorSetLayoutBinding > > DescriptorSetLayoutBindings
Definition VulkanPipeline.h:161
bool operator==(const FGfxPipelineDesc &In) const
Definition VulkanPipeline.h:401
TArray< FVertexAttribute > VertexAttributes
Definition VulkanPipeline.h:200
FRasterizer Rasterizer
Definition VulkanPipeline.h:220
uint32 VertexInputKey
Definition VulkanPipeline.h:130
TArray< FVertexBinding > VertexBindings
Definition VulkanPipeline.h:180
uint32 Topology
Definition VulkanPipeline.h:132
EVRSShadingRate ShadingRate
Definition VulkanPipeline.h:398
FVulkanPSOKey CreateKey2() const
Definition VulkanPipeline.cpp:1208
uint8 UseAlphaToCoverage
Definition VulkanPipeline.h:396
uint8 SubpassIndex
Definition VulkanPipeline.h:394
uint64 ShaderKeyShared
Definition VulkanPipeline.h:274
TArray< FBlendAttachment > ColorAttachmentStates
Definition VulkanPipeline.h:159
FRenderTargets RenderTargets
Definition VulkanPipeline.h:392
uint64 ShaderKeys[ShaderStage::NumGraphicsStages]
Definition VulkanPipeline.h:273
EVRSRateCombiner Combiner
Definition VulkanPipeline.h:399
uint16 RasterizationSamples
Definition VulkanPipeline.h:131
FDepthStencil DepthStencil
Definition VulkanPipeline.h:270
Definition Guid.h:109
static UE_FORCEINLINE_HINT int32 Memcmp(const void *Buf1, const void *Buf2, SIZE_T Count)
Definition UnrealMemory.h:114
Definition VulkanPipeline.h:95
FVulkanPipelineSize()
Definition VulkanPipeline.h:100
uint64 ShaderHash
Definition VulkanPipeline.h:97
uint32 PipelineSize
Definition VulkanPipeline.h:98
Definition VulkanPipeline.h:63
uint32 Hash
Definition VulkanPipeline.h:64
friend bool operator==(const FVulkanShaderHashes &A, const FVulkanShaderHashes &B)
Definition VulkanPipeline.h:80
FSHAHash Stages[ShaderStage::MaxNumStages]
Definition VulkanPipeline.h:65
void Finalize()
Definition VulkanPipeline.h:75
friend uint32 GetTypeHash(const FVulkanShaderHashes &Hashes)
Definition VulkanPipeline.h:70
FVulkanShaderHashes()
Definition VulkanPipeline.cpp:2190
Definition VulkanShaderResources.h:20
FVulkanGraphicsPipelineState TConcreteType
Definition VulkanPipeline.h:848
class FVulkanComputePipeline TConcreteType
Definition VulkanPipeline.h:842
Definition VulkanResources.h:1168
Definition VulkanPipeline.h:643
void Set(uint32_t Frame) const
Definition VulkanPipeline.h:644
std::atomic< uint32 > LastUsedFrame
Definition VulkanPipeline.h:655
uint32 Get() const
Definition VulkanPipeline.h:649