6#include "Containers/Set.h"
36template<
typename KeyType,
typename ValueType>
47 void Add(
const KeyType& Key,
const ValueType&
Value)
51 Entry& Pair = Table[
Index];
58 ValueType*
Find(
const KeyType& Key)
62 Entry& Pair = Table[
Index];
77 for (
int32 i = 0; i < Table.
Num(); i++)
79 Table[i].Valid =
false;
84 uint32 GetIndex(
const KeyType& Key)
164 return A.Key ==
B.Key;
228 virtual bool RollOver()
final override;
246 virtual bool RollOver()
final override;
250 return CurrentBlock ? CurrentBlock->
Size : 0;
255 bool AllocateBlock();
276 virtual bool RollOver()
final override;
282 struct FSyncPointEntry
327 return (
pHeap == LastSetViewHeap) || (
pHeap == LastSetSamplerHeap);
368 return CurrentSamplerHeap != &LocalSamplerHeap;
373 return *LocalSamplerSet.
Get();
381#if PLATFORM_SUPPORTS_BINDLESS_RENDERING
389#if PLATFORM_SUPPORTS_BINDLESS_RENDERING
432 bool bUsingExplicitCacheHeaps =
false;
433 bool bExplicitViewHeapIsBindless =
false;
434 bool bLocalSamplerHeapOpen =
false;
435 bool bUsingViewHeap =
true;
437 uint32 NumLocalViewDescriptors = 0;
439#if PLATFORM_SUPPORTS_BINDLESS_RENDERING
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FD3D12ConservativeMap< FD3D12SamplerArrayDesc, D3D12_GPU_DESCRIPTOR_HANDLE > FD3D12SamplerMap
Definition D3D12DescriptorCache.h:126
uint32 GetTypeHash(const D3D12_SAMPLER_DESC &Desc)
Definition D3D12State.cpp:213
ED3D12SetDescriptorHeapsFlags
Definition D3D12DescriptorCache.h:304
TSet< FD3D12UniqueSamplerTable, FD3D12UniqueSamplerTableKeyFuncs > FD3D12SamplerSet
Definition D3D12DescriptorCache.h:174
uint32 SamplerSlotMask
Definition D3D12RHICommon.h:44
uint16 CBVSlotMask
Definition D3D12RHICommon.h:29
uint32 SRVSlotMask
Definition D3D12RHICommon.h:40
uint16 UAVSlotMask
Definition D3D12RHICommon.h:47
#define MAX_SAMPLERS
Definition D3D12RHI.h:18
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
void Init()
Definition LockFreeList.h:4
EShaderFrequency
Definition RHIDefinitions.h:202
ERHIDescriptorHeapType
Definition RHIDefinitions.h:1338
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
uint32 Size
Definition VulkanMemory.cpp:4034
Definition D3D12CommandContext.h:513
Definition D3D12DescriptorCache.h:38
void Reset()
Definition D3D12DescriptorCache.h:75
void Add(const KeyType &Key, const ValueType &Value)
Definition D3D12DescriptorCache.h:47
FD3D12ConservativeMap(uint32 Size)
Definition D3D12DescriptorCache.h:40
ValueType * Find(const KeyType &Key)
Definition D3D12DescriptorCache.h:58
Definition D3D12View.h:435
Definition D3D12DescriptorCache.h:312
bool SwitchToContextLocalViewHeap()
Definition D3D12DescriptorCache.cpp:768
void OpenCommandList()
Definition D3D12DescriptorCache.cpp:157
const FD3D12DefaultViews & DefaultViews
Definition D3D12DescriptorCache.h:413
FD3D12CommandContext & Context
Definition D3D12DescriptorCache.h:412
void SetConstantBufferViews(EShaderFrequency ShaderStage, const FD3D12RootSignature *RootSignature, FD3D12ConstantBufferCache &Cache, CBVSlotMask SlotsNeededMask, uint32 Count, uint32 &HeapSlot)
Definition D3D12DescriptorCache.cpp:539
constexpr bool IsFullyBindless() const
Definition D3D12DescriptorCache.h:386
FD3D12OnlineHeap * GetCurrentViewHeap() const
Definition D3D12DescriptorCache.h:319
bool IsHeapSet(ID3D12DescriptorHeap *const pHeap) const
Definition D3D12DescriptorCache.h:325
FD3D12DescriptorCache()=delete
void SetVertexBuffers(FD3D12VertexBufferCache &Cache)
Definition D3D12DescriptorCache.cpp:207
constexpr bool CouldUseBindless() const
Definition D3D12DescriptorCache.h:385
ID3D12DescriptorHeap * GetLastSetViewHeap() const
Definition D3D12DescriptorCache.h:322
D3D12_GPU_DESCRIPTOR_HANDLE BuildUAVTable(EShaderFrequency ShaderStage, const FD3D12RootSignature *RootSignature, FD3D12UnorderedAccessViewCache &Cache, const UAVSlotMask &SlotsNeededMask, uint32 Count, uint32 &HeapSlot)
Definition D3D12DescriptorCache.cpp:226
void SetRootConstantBuffers(EShaderFrequency ShaderStage, const FD3D12RootSignature *RootSignature, FD3D12ConstantBufferCache &Cache, CBVSlotMask SlotsNeededMask, FD3D12StateCache *StateCache)
Definition D3D12DescriptorCache.cpp:667
FD3D12SamplerSet & GetLocalSamplerSet()
Definition D3D12DescriptorCache.h:371
bool SetDescriptorHeaps(ED3D12SetDescriptorHeapsFlags Flags)
Definition D3D12DescriptorCache.cpp:71
bool UsingGlobalSamplerHeap() const
Definition D3D12DescriptorCache.h:366
void SwitchToGlobalSamplerHeap()
Definition D3D12DescriptorCache.cpp:815
D3D12_GPU_DESCRIPTOR_HANDLE BuildSamplerTable(EShaderFrequency ShaderStage, const FD3D12RootSignature *RootSignature, FD3D12SamplerStateCache &Cache, const SamplerSlotMask &SlotsNeededMask, uint32 Count, uint32 &HeapSlot)
Definition D3D12DescriptorCache.cpp:333
bool SwitchToContextLocalSamplerHeap()
Definition D3D12DescriptorCache.cpp:800
void SetSamplerTable(EShaderFrequency ShaderStage, const FD3D12RootSignature *RootSignature, FD3D12SamplerStateCache &Cache, uint32 SlotsNeeded, const D3D12_GPU_DESCRIPTOR_HANDLE &BindDescriptor)
Definition D3D12DescriptorCache.cpp:415
void SetUAVTable(EShaderFrequency ShaderStage, const FD3D12RootSignature *RootSignature, FD3D12UnorderedAccessViewCache &Cache, uint32 SlotsNeeded, const D3D12_GPU_DESCRIPTOR_HANDLE &BindDescriptor)
Definition D3D12DescriptorCache.cpp:269
void SetRenderTargets(FD3D12RenderTargetView **RenderTargetViewArray, uint32 Count, FD3D12DepthStencilView *DepthStencilTarget)
Definition D3D12DescriptorCache.cpp:296
~FD3D12DescriptorCache()
Definition D3D12DescriptorCache.cpp:38
bool HeapRolledOver(ERHIDescriptorHeapType InHeapType)
Definition D3D12DescriptorCache.cpp:13
void PrepareBindlessViews(EShaderFrequency ShaderStage, TConstArrayView< FD3D12ShaderResourceView * > SRVs, TConstArrayView< FD3D12UnorderedAccessView * > UAVs)
Definition D3D12DescriptorCache.cpp:512
void HeapLoopedAround(ERHIDescriptorHeapType InHeapType)
Definition D3D12DescriptorCache.cpp:19
void CloseCommandList()
Definition D3D12DescriptorCache.cpp:185
FD3D12OnlineHeap * GetCurrentSamplerHeap() const
Definition D3D12DescriptorCache.h:320
void SetSRVTable(EShaderFrequency ShaderStage, const FD3D12RootSignature *RootSignature, FD3D12ShaderResourceViewCache &Cache, uint32 SlotsNeeded, const D3D12_GPU_DESCRIPTOR_HANDLE &BindDescriptor)
Definition D3D12DescriptorCache.cpp:488
void UnsetExplicitDescriptorCache()
Definition D3D12DescriptorCache.cpp:874
void SetExplicitDescriptorCache(FD3D12ExplicitDescriptorCache &ExplicitDescriptorCache)
Definition D3D12DescriptorCache.cpp:825
D3D12_GPU_DESCRIPTOR_HANDLE BuildSRVTable(EShaderFrequency ShaderStage, const FD3D12RootSignature *RootSignature, FD3D12ShaderResourceViewCache &Cache, const SRVSlotMask &SlotsNeededMask, uint32 Count, uint32 &HeapSlot)
Definition D3D12DescriptorCache.cpp:439
Definition D3D12RHICommon.h:78
Definition D3D12Device.h:176
Definition D3D12RHIPrivate.h:160
Definition D3D12ExplicitDescriptorCache.h:109
Definition D3D12DescriptorCache.h:221
virtual bool RollOver() final override
Definition D3D12DescriptorCache.cpp:1046
void ConsolidateUniqueSamplerTables(TArrayView< FD3D12UniqueSamplerTable > UniqueTables)
Definition D3D12DescriptorCache.cpp:1060
TSharedPtr< FD3D12SamplerSet > GetUniqueDescriptorTables()
Definition D3D12DescriptorCache.cpp:1054
Definition D3D12DescriptorCache.h:268
virtual void OpenCommandList() final override
Definition D3D12DescriptorCache.cpp:1292
virtual void HeapLoopedAround() final override
Definition D3D12DescriptorCache.cpp:1276
virtual void CloseCommandList() final override
Definition D3D12DescriptorCache.cpp:1297
virtual bool RollOver() final override
Definition D3D12DescriptorCache.cpp:1222
Definition D3D12DescriptorCache.h:178
ID3D12DescriptorHeap * GetHeap()
Definition D3D12DescriptorCache.h:183
uint32 GetNextSlotIndex() const
Definition D3D12DescriptorCache.h:196
virtual ~FD3D12OnlineHeap()
FORCEINLINE D3D12_CPU_DESCRIPTOR_HANDLE GetCPUSlotHandle(uint32 Slot) const
Definition D3D12DescriptorCache.h:185
void SetNextSlot(uint32 NextSlot)
Definition D3D12DescriptorCache.cpp:1009
uint32 FirstUsedSlot
Definition D3D12DescriptorCache.h:213
const bool bCanLoopAround
Definition D3D12DescriptorCache.h:216
virtual bool RollOver()=0
uint32 ReserveSlots(uint32 NumSlotsRequested)
Definition D3D12DescriptorCache.cpp:957
virtual void OpenCommandList()
Definition D3D12DescriptorCache.h:201
virtual void CloseCommandList()
Definition D3D12DescriptorCache.h:202
virtual void HeapLoopedAround()
Definition D3D12DescriptorCache.h:200
uint32 NextSlotIndex
Definition D3D12DescriptorCache.h:210
FORCEINLINE D3D12_GPU_DESCRIPTOR_HANDLE GetGPUSlotHandle(uint32 Slot) const
Definition D3D12DescriptorCache.h:186
TRefCountPtr< FD3D12DescriptorHeap > Heap
Definition D3D12DescriptorCache.h:207
bool CanReserveSlots(uint32 NumSlots)
Definition D3D12DescriptorCache.cpp:910
virtual uint32 GetTotalSize()
Definition D3D12DescriptorCache.h:203
Definition D3D12View.h:423
Definition D3D12RootSignature.h:73
Definition D3D12View.h:351
Definition D3D12RHICommon.h:128
Definition D3D12StateCachePrivate.h:300
Definition D3D12DescriptorCache.h:241
virtual void OpenCommandList() final override
Definition D3D12DescriptorCache.cpp:1121
virtual bool RollOver() final override
Definition D3D12DescriptorCache.cpp:1111
virtual uint32 GetTotalSize() final override
Definition D3D12DescriptorCache.h:248
Definition D3D12Submission.h:76
Definition D3D12View.h:388
Definition ArrayView.h:139
UE_FORCEINLINE_HINT SizeType AddUninitialized()
Definition Array.h:1664
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition SharedPointer.h:692
UE_FORCEINLINE_HINT ObjectType * Get() const
Definition SharedPointer.h:1065
Definition VulkanCommon.h:29
U16 Index
Definition radfft.cpp:71
Definition SetUtilities.h:23
Definition D3D12StateCachePrivate.h:172
Definition D3D12View.h:54
Definition D3D12Descriptors.h:95
ID3D12DescriptorHeap * GetHeap() const
Definition D3D12Descriptors.h:107
uint32 GetNumDescriptors() const
Definition D3D12Descriptors.h:117
D3D12_CPU_DESCRIPTOR_HANDLE GetCPUSlotHandle(uint32 Slot) const
Definition D3D12Descriptors.h:124
D3D12_GPU_DESCRIPTOR_HANDLE GetGPUSlotHandle(uint32 Slot) const
Definition D3D12Descriptors.h:125
Definition D3D12StateCachePrivate.h:101
Definition D3D12Descriptors.h:188
uint32 Size
Definition D3D12Descriptors.h:197
Definition D3D12DescriptorCache.h:102
uint16 SamplerID[MAX_SAMPLERS]
Definition D3D12DescriptorCache.h:104
uint32 Count
Definition D3D12DescriptorCache.h:103
bool operator==(const FD3D12SamplerArrayDesc &rhs) const
Definition D3D12DescriptorCache.h:106
Definition D3D12StateCachePrivate.h:257
Definition D3D12StateCachePrivate.h:197
Definition D3D12DescriptorCache.h:147
static FORCEINLINE uint32 GetKeyHash(KeyInitType Key)
Definition D3D12DescriptorCache.h:168
static FORCEINLINE KeyInitType GetSetKey(ElementInitType Element)
Definition D3D12DescriptorCache.h:154
TCallTraits< FD3D12UniqueSamplerTable >::ParamType KeyInitType
Definition D3D12DescriptorCache.h:148
TCallTraits< FD3D12UniqueSamplerTable >::ParamType ElementInitType
Definition D3D12DescriptorCache.h:149
static FORCEINLINE bool Matches(KeyInitType A, KeyInitType B)
Definition D3D12DescriptorCache.h:162
Definition D3D12DescriptorCache.h:129
FD3D12UniqueSamplerTable()=default
D3D12_CPU_DESCRIPTOR_HANDLE CPUTable[MAX_SAMPLERS]
Definition D3D12DescriptorCache.h:138
FD3D12UniqueSamplerTable(FD3D12SamplerArrayDesc KeyIn, D3D12_CPU_DESCRIPTOR_HANDLE *Table)
Definition D3D12DescriptorCache.h:131
D3D12_GPU_DESCRIPTOR_HANDLE GPUHandle
Definition D3D12DescriptorCache.h:141
FD3D12SamplerArrayDesc Key
Definition D3D12DescriptorCache.h:137
Definition D3D12StateCachePrivate.h:232
Definition D3D12StateCachePrivate.h:78
static UE_FORCEINLINE_HINT int32 Memcmp(const void *Buf1, const void *Buf2, SIZE_T Count)
Definition UnrealMemory.h:114
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
TCallTraitsParamTypeHelper< T, PassByValue >::ParamType ParamType
Definition UnrealTypeTraits.h:275