12#if (UE_BUILD_SHIPPING || UE_BUILD_TEST)
13#define VULKAN_VALIDATE_DESCRIPTORS_WRITTEN 0
15#define VULKAN_VALIDATE_DESCRIPTORS_WRITTEN 1
96 return !(*
this == In);
107 template<
bool bIsCompute>
255 return LayoutHandles;
260 return LayoutHandleIds;
265 return DescriptorSetAllocateInfo;
289 return DescriptorPool;
294 return MaxDescriptorSets > NumAllocatedDescriptorSets +
InLayout.GetLayouts().Num();
302 return NumAllocatedDescriptorSets == 0;
309 return NumAllocatedDescriptorSets;
316 uint32 NumAllocatedDescriptorSets;
317 uint32 PeakAllocatedDescriptorSets;
358 FPoolList* PoolListHead =
nullptr;
359 FPoolList* PoolListCurrent =
nullptr;
391 return LastFrameUsed;
416 check(PoolSet !=
nullptr);
425 check(PoolSet ==
nullptr);
551 bool bChanged =
false;
622 Cursor = Cursor->pNext;
626 TEXT(
"Expected to find a VkWriteDescriptorSetAccelerationStructureKHR that's needed to bind an acceleration structure descriptor. ")
627 TEXT(
"Possibly something went wrong in SetupDescriptorWrites()."));
629 checkf(
FoundWrite->accelerationStructureCount == 1,
TEXT(
"Acceleration structure write operation is expected to contain exactly one descriptor"));
647 template <VkDescriptorType DescriptorType>
655 TEXT(
"DescriptorType mismatch at index %d: called WriteBuffer<%s> and was expecting %s."),
661 TEXT(
"DescriptorType mismatch at index %d: called WriteBuffer<%s> and was expecting %s."),
667 bool bChanged =
false;
707 template <VkDescriptorType DescriptorType>
715 TEXT(
"DescriptorType mismatch at index %d: called WriteTextureView<%d> and was expecting %d."),
729 TEXT(
"DescriptorType mismatch at index %d: called WriteTextureView<%s> and was expecting %s."),
735 bool bChanged =
false;
763 template <VkDescriptorType DescriptorType>
768 TEXT(
"DescriptorType mismatch at index %d: called WriteBufferView<%s> and was expecting %s."),
779 bool bChanged =
false;
826#if VULKAN_VALIDATE_DESCRIPTORS_WRITTEN
851 return MaxDescriptorSets;
859 const uint32 MaxDescriptorSets;
876 void UpdateAllocRatio();
877 void AddCachedPool();
891 inline uint32 GetMaxDescriptorSets()
const
893 return Pool.GetMaxDescriptorSets();
898 float CalcAllocRatio()
const;
907 static const float MinAllocRatio;
908 static const float MaxAllocRatio;
925 float PoolAllocRatio;
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
uint32 GFrameNumberRenderThread
Definition CoreGlobals.cpp:427
#define RETURN_QUICK_DECLARE_CYCLE_STAT(StatId, GroupId)
Definition Stats.h:655
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
return true
Definition ExternalRpcRegistry.cpp:601
#define VK_TYPE_TO_STRING(Type, Value)
Definition VulkanConfiguration.h:244
uint32 Offset
Definition VulkanMemory.cpp:4033
bool UseVulkanDescriptorCache()
Definition VulkanRHIPrivate.h:643
bool CopyAndReturnNotEqual(T &A, T B)
Definition VulkanUtil.h:38
Definition AsyncWork.h:585
Definition AsyncWork.h:663
Definition UnrealTemplate.h:321
Definition VulkanCommandBuffer.h:204
Definition VulkanCommandBuffer.h:43
Definition VulkanContext.h:241
Definition VulkanPipelineState.h:24
Definition VulkanPipelineState.h:182
Definition VulkanDescriptorSets.h:22
Definition VulkanDescriptorSets.h:23
Definition VulkanDescriptorSets.h:363
FVulkanDescriptorPoolSetContainer(FVulkanDevice *InDevice)
Definition VulkanDescriptorSets.h:365
uint32 GetLastFrameUsed() const
Definition VulkanDescriptorSets.h:389
FVulkanTypedDescriptorPoolSet * AcquireTypedPoolSet(const FVulkanDescriptorSetsLayout &Layout)
Definition VulkanPendingState.cpp:228
void Reset()
Definition VulkanPendingState.cpp:243
void SetUsed(bool bInUsed)
Definition VulkanDescriptorSets.h:378
~FVulkanDescriptorPoolSetContainer()
Definition VulkanPendingState.cpp:217
bool IsUnused() const
Definition VulkanDescriptorSets.h:384
Definition VulkanDescriptorSets.h:282
uint32 GetNumAllocatedDescriptorSets() const
Definition VulkanDescriptorSets.h:307
bool CanAllocate(const FVulkanDescriptorSetsLayout &InLayout) const
Definition VulkanDescriptorSets.h:292
void Reset()
Definition VulkanPendingState.cpp:112
bool AllocateDescriptorSets(const VkDescriptorSetAllocateInfo &InDescriptorSetAllocateInfo, VkDescriptorSet *OutSets)
Definition VulkanPendingState.cpp:122
void TrackRemoveUsage(const FVulkanDescriptorSetsLayout &InLayout)
Definition VulkanPendingState.cpp:98
void TrackAddUsage(const FVulkanDescriptorSetsLayout &InLayout)
Definition VulkanPendingState.cpp:82
VkDescriptorPool GetHandle() const
Definition VulkanDescriptorSets.h:287
~FVulkanDescriptorPool()
Definition VulkanPendingState.cpp:70
bool IsEmpty() const
Definition VulkanDescriptorSets.h:300
Definition VulkanDescriptorSets.h:404
~FVulkanDescriptorPoolsManager()
Definition VulkanPendingState.cpp:252
void GC()
Definition VulkanPendingState.cpp:287
void ReleasePoolSet(FVulkanDescriptorPoolSetContainer &PoolSet)
Definition VulkanPendingState.cpp:281
FVulkanDescriptorPoolSetContainer & AcquirePoolSetContainer()
Definition VulkanPendingState.cpp:262
void Init(FVulkanDevice *InDevice)
Definition VulkanDescriptorSets.h:438
Definition VulkanDescriptorSets.h:866
~FVulkanDescriptorSetCache()
Definition VulkanPendingState.cpp:946
void GetDescriptorSets(const FVulkanDSetsKey &DSetsKey, const FVulkanDescriptorSetsLayout &SetsLayout, TArray< FVulkanDescriptorSetWriter > &DSWriters, VkDescriptorSet *OutSets)
Definition VulkanPendingState.cpp:984
void GC()
Definition VulkanPendingState.cpp:1007
Definition VulkanDescriptorSets.h:501
bool WriteStorageTexelBuffer(uint32 DescriptorIndex, const FVulkanView::FTypedBufferView &View)
Definition VulkanDescriptorSets.h:587
VkWriteDescriptorSet * WriteDescriptors
Definition VulkanDescriptorSets.h:798
bool WriteStorageBuffer(uint32 DescriptorIndex, const FVulkanView::FStructuredBufferView &View)
Definition VulkanDescriptorSets.h:592
TArray< uint32, TInlineAllocator< 2 > > BaseWrittenMask
Definition VulkanDescriptorSets.h:828
const uint32 GetNumWrites() const
Definition VulkanDescriptorSets.h:529
bool WriteSampler(uint32 DescriptorIndex, const FVulkanSamplerState &Sampler)
Definition VulkanDescriptorSets.h:544
const FVulkanDSetKey & GetKey() const
Definition VulkanDescriptorSets.h:513
void InitWrittenMasks(uint32 NumDescriptorWrites)
Definition VulkanDescriptorSets.cpp:517
FVulkanHashableDescriptorInfo * HashableDescriptorInfos
Definition VulkanDescriptorSets.h:808
bool WriteDynamicUniformBuffer(uint32 DescriptorIndex, VkBuffer BufferHandle, uint32 HandleId, VkDeviceSize Offset, VkDeviceSize Range, uint32 DynamicOffset)
Definition VulkanDescriptorSets.h:539
bool WriteInputAttachment(uint32 DescriptorIndex, const FVulkanView::FTextureView &TextureView, VkImageLayout Layout)
Definition VulkanDescriptorSets.h:577
bool WriteTextureView(uint32 DescriptorIndex, const FVulkanView::FTextureView &TextureView, VkImageLayout Layout)
Definition VulkanDescriptorSets.h:708
bool WriteBuffer(uint32 DescriptorIndex, VkBuffer BufferHandle, uint32 HandleId, VkDeviceSize Offset, VkDeviceSize Range, uint32 DynamicOffset=0)
Definition VulkanDescriptorSets.h:648
bool bHasVolatileResources
Definition VulkanDescriptorSets.h:811
TArray< uint32, TInlineAllocator< 2 > > WrittenMask
Definition VulkanDescriptorSets.h:827
uint32 * DynamicOffsets
Definition VulkanDescriptorSets.h:804
void Reset()
Definition VulkanDescriptorSets.cpp:492
void SetWrittenBase(uint32 DescriptorIndex)
Definition VulkanDescriptorSets.cpp:508
void SetWritten(uint32 DescriptorIndex)
Definition VulkanDescriptorSets.cpp:500
FVulkanDescriptorSetWriter()
Definition VulkanDescriptorSets.h:503
void SetDescriptorSet(VkDescriptorSet DescriptorSet)
Definition VulkanDescriptorSets.h:638
bool bIsKeyDirty
Definition VulkanDescriptorSets.h:810
bool WriteImage(uint32 DescriptorIndex, const FVulkanView::FTextureView &TextureView, VkImageLayout Layout)
Definition VulkanDescriptorSets.h:572
bool WriteBufferView(uint32 DescriptorIndex, const FVulkanView::FTypedBufferView &View)
Definition VulkanDescriptorSets.h:764
FVulkanDSetKey Key
Definition VulkanDescriptorSets.h:809
bool WriteStorageImage(uint32 DescriptorIndex, const FVulkanView::FTextureView &TextureView, VkImageLayout Layout)
Definition VulkanDescriptorSets.h:582
bool WriteUniformBuffer(uint32 DescriptorIndex, VkBuffer BufferHandle, uint32 HandleId, VkDeviceSize Offset, VkDeviceSize Range)
Definition VulkanDescriptorSets.h:534
uint8 * BindingToDynamicOffsetMap
Definition VulkanDescriptorSets.h:801
uint32 NumWrites
Definition VulkanDescriptorSets.h:806
uint32 SetupDescriptorWrites(const TArray< VkDescriptorType > &Types, FVulkanHashableDescriptorInfo *InHashableDescriptorInfos, VkWriteDescriptorSet *InWriteDescriptors, VkDescriptorImageInfo *InImageInfo, VkDescriptorBufferInfo *InBufferInfo, uint8 *InBindingToDynamicOffsetMap, VkWriteDescriptorSetAccelerationStructureKHR *InAccelerationStructuresWriteDescriptors, VkAccelerationStructureKHR *InAccelerationStructures, const FVulkanSamplerState &DefaultSampler, const FVulkanView::FTextureView &DefaultImageView)
Definition VulkanDescriptorSets.cpp:348
const VkWriteDescriptorSet * GetWriteDescriptors() const
Definition VulkanDescriptorSets.h:524
bool WriteUniformTexelBuffer(uint32 DescriptorIndex, const FVulkanView::FTypedBufferView &View)
Definition VulkanDescriptorSets.h:597
void CheckAllWritten()
Definition VulkanDescriptorSets.cpp:421
bool WriteAccelerationStructure(uint32 DescriptorIndex, VkAccelerationStructureKHR InAccelerationStructure)
Definition VulkanDescriptorSets.h:603
Definition VulkanDescriptorSets.h:33
uint32 TypesUsageID
Definition VulkanDescriptorSets.h:222
TStaticArray< FStageInfo, ShaderStage::MaxNumStages > StageInfos
Definition VulkanDescriptorSets.h:214
TArray< FSetLayout > SetLayouts
Definition VulkanDescriptorSets.h:218
void FinalizeBindings(const FVulkanDevice &Device, const FUniformBufferGatherInfo &UBGatherInfo, const TArrayView< FRHISamplerState * > &ImmutableSamplers, bool bUsesBindless)
Definition VulkanDescriptorSets.cpp:20
uint32 GetTypesUsageID() const
Definition VulkanDescriptorSets.h:169
bool HasInputAttachments() const
Definition VulkanDescriptorSets.h:174
const TArray< FSetLayout > & GetLayouts() const
Definition VulkanDescriptorSets.h:100
TMap< VkDescriptorType, uint32 > LayoutTypes
Definition VulkanDescriptorSets.h:217
FVulkanDescriptorSetsLayoutInfo()
Definition VulkanDescriptorSets.h:35
uint32 Hash
Definition VulkanDescriptorSets.h:220
uint32 GetTypesUsed(VkDescriptorType Type) const
Definition VulkanDescriptorSets.h:46
VkPipelineBindPoint BindPoint
Definition VulkanDescriptorSets.h:224
bool operator==(const FVulkanDescriptorSetsLayoutInfo &In) const
Definition VulkanDescriptorSets.h:117
void AddDescriptor(int32 DescriptorSetIndex, const VkDescriptorSetLayoutBinding &Descriptor)
Definition VulkanDescriptorSets.cpp:113
void CompileTypesUsageID()
Definition VulkanDescriptorSets.cpp:197
friend uint32 GetTypeHash(const FVulkanDescriptorSetsLayoutInfo &In)
Definition VulkanDescriptorSets.h:112
const TMap< VkDescriptorType, uint32 > & GetLayoutTypes() const
Definition VulkanDescriptorSets.h:164
void GenerateHash(const TArrayView< FRHISamplerState * > &ImmutableSamplers, VkPipelineBindPoint InBindPoint)
Definition VulkanDescriptorSets.cpp:163
void CopyFrom(const FVulkanDescriptorSetsLayoutInfo &Info)
Definition VulkanDescriptorSets.h:155
void ProcessBindingsForStage(VkShaderStageFlagBits StageFlags, ShaderStage::EStage DescSetStage, const FVulkanShaderHeader &CodeHeader, FUniformBufferGatherInfo &OutUBGatherInfo) const
Definition VulkanDescriptorSets.cpp:14
Definition VulkanDescriptorSets.h:245
const VkDescriptorSetAllocateInfo & GetAllocateInfo() const
Definition VulkanDescriptorSets.h:263
const TArray< uint32 > & GetHandleIds() const
Definition VulkanDescriptorSets.h:258
const TArray< VkDescriptorSetLayout > & GetHandles() const
Definition VulkanDescriptorSets.h:253
uint32 GetHash() const
Definition VulkanDescriptorSets.h:268
~FVulkanDescriptorSetsLayout()
Definition VulkanDescriptorSets.cpp:234
Definition VulkanDevice.h:279
Definition VulkanDescriptorSets.h:839
~FVulkanGenericDescriptorPool()
Definition VulkanPendingState.cpp:908
void Reset()
Definition VulkanPendingState.cpp:919
uint32 GetMaxDescriptorSets() const
Definition VulkanDescriptorSets.h:849
bool AllocateDescriptorSet(VkDescriptorSetLayout Layout, VkDescriptorSet &OutSet)
Definition VulkanPendingState.cpp:925
FVulkanDevice * GetDevice() const
Definition VulkanDescriptorSets.h:844
Definition VulkanPipelineState.h:239
Definition VulkanLayout.h:10
Definition VulkanPipeline.h:492
Definition VulkanState.h:17
Definition VulkanDescriptorSets.h:328
void Reset()
Definition VulkanPendingState.cpp:207
bool AllocateDescriptorSets(const FVulkanDescriptorSetsLayout &Layout, VkDescriptorSet *OutSets)
Definition VulkanPendingState.cpp:184
~FVulkanTypedDescriptorPoolSet()
Definition VulkanPendingState.cpp:130
FVulkanTypedDescriptorPoolSet(FVulkanDevice *InDevice, const FVulkanDescriptorSetsLayout &InLayout)
Definition VulkanDescriptorSets.h:338
Definition ArrayView.h:139
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
UE_NODEBUG UE_FORCEINLINE_HINT SIZE_T NumBytes() const
Definition Array.h:1150
Definition VulkanUtil.h:144
void GenerateFromData(const void *InData, uint32 InSize)
Definition VulkanUtil.h:166
Definition UnrealString.h.inl:34
Definition StaticArray.h:26
Definition UniquePtr.h:107
EStage
Definition VulkanCommon.h:35
@ MaxNumStages
Definition VulkanCommon.h:55
U16 Index
Definition radfft.cpp:71
static UE_FORCEINLINE_HINT uint32 MemCrc32(const void *Data, int32 Length, uint32 CRC=0)
Definition Crc.h:31
static UE_FORCEINLINE_HINT int32 Memcmp(const void *Buf1, const void *Buf2, SIZE_T Count)
Definition UnrealMemory.h:114
Definition VulkanDescriptorSets.h:236
uint32 HandleId
Definition VulkanDescriptorSets.h:238
VkDescriptorSetLayout Handle
Definition VulkanDescriptorSets.h:237
Definition VulkanDescriptorSets.h:486
TArray< VkAccelerationStructureKHR > AccelerationStructures
Definition VulkanDescriptorSets.h:491
TArray< VkWriteDescriptorSetAccelerationStructureKHR > AccelerationStructureWrites
Definition VulkanDescriptorSets.h:492
TArray< VkWriteDescriptorSet > DescriptorWrites
Definition VulkanDescriptorSets.h:490
TArray< VkDescriptorImageInfo > DescriptorImageInfo
Definition VulkanDescriptorSets.h:488
TArray< FVulkanHashableDescriptorInfo > HashableDescriptorInfo
Definition VulkanDescriptorSets.h:487
TArray< uint8 > BindingToDynamicOffsetMap
Definition VulkanDescriptorSets.h:494
TArray< VkDescriptorBufferInfo > DescriptorBufferInfo
Definition VulkanDescriptorSets.h:489
Definition VulkanDescriptorSets.h:59
friend uint32 GetTypeHash(const FSetLayout &In)
Definition VulkanDescriptorSets.h:68
uint32 Hash
Definition VulkanDescriptorSets.h:61
bool operator==(const FSetLayout &In) const
Definition VulkanDescriptorSets.h:73
void GenerateHash()
Definition VulkanDescriptorSets.h:63
bool operator!=(const FSetLayout &In) const
Definition VulkanDescriptorSets.h:94
TArray< VkDescriptorSetLayoutBinding > LayoutBindings
Definition VulkanDescriptorSets.h:60
Definition VulkanDescriptorSets.h:180
uint16 NumAccelerationStructures
Definition VulkanDescriptorSets.h:186
bool IsEmpty() const
Definition VulkanDescriptorSets.h:188
uint16 NumImageInfos
Definition VulkanDescriptorSets.h:184
uint32 PackedGlobalsSize
Definition VulkanDescriptorSets.h:182
uint32 NumBoundUniformBuffers
Definition VulkanDescriptorSets.h:183
bool operator==(const FStageInfo &In) const
Definition VulkanDescriptorSets.h:198
TArray< VkDescriptorType > Types
Definition VulkanDescriptorSets.h:181
uint16 NumBufferInfos
Definition VulkanDescriptorSets.h:185
Definition VulkanResources.h:448
uint32 Size
Definition VulkanResources.h:452
uint32 HandleId
Definition VulkanResources.h:450
VkBuffer Buffer
Definition VulkanResources.h:449
uint32 Offset
Definition VulkanResources.h:451
Definition VulkanResources.h:461
VkImageView View
Definition VulkanResources.h:462
uint32 ViewId
Definition VulkanResources.h:464
Definition VulkanResources.h:441
uint32 ViewId
Definition VulkanResources.h:443
bool bVolatile
Definition VulkanResources.h:444
VkBufferView View
Definition VulkanResources.h:442
Definition LightweightStats.h:416
Definition VulkanDescriptorSets.h:456
uint32 Max0
Definition VulkanDescriptorSets.h:459
uint32 Id
Definition VulkanDescriptorSets.h:465
uint32 ImageViewId
Definition VulkanDescriptorSets.h:472
uint32 Zero1
Definition VulkanDescriptorSets.h:478
uint32 ImageLayout
Definition VulkanDescriptorSets.h:473
uint32 LayoutId
Definition VulkanDescriptorSets.h:461
uint32 Range
Definition VulkanDescriptorSets.h:467
uint32 Max1
Definition VulkanDescriptorSets.h:460
struct FVulkanHashableDescriptorInfo::@2435 BufferView
uint32 Zero2
Definition VulkanDescriptorSets.h:479
uint32 SamplerId
Definition VulkanDescriptorSets.h:471
struct FVulkanHashableDescriptorInfo::@2434 Image
struct FVulkanHashableDescriptorInfo::@2432 Layout
uint32 Offset
Definition VulkanDescriptorSets.h:466
struct FVulkanHashableDescriptorInfo::@2433 Buffer