25#ifndef D3D12RHI_USE_HIGH_LEVEL_PSO_CACHE
26#define D3D12RHI_USE_HIGH_LEVEL_PSO_CACHE 0
28#ifndef D3D12_USE_DERIVED_PSO
29 #define D3D12_USE_DERIVED_PSO 0
31#if D3D12_USE_DERIVED_PSO
32 #ifndef D3D12_USE_DERIVED_PSO_SHADER_EXPORTS
33 #define D3D12_USE_DERIVED_PSO_SHADER_EXPORTS 0
37#if D3D12RHI_USE_HIGH_LEVEL_PSO_CACHE
68#if !D3D12_USE_DERIVED_PSO || D3D12_USE_DERIVED_PSO_SHADER_EXPORTS
71#if !D3D12_USE_DERIVED_PSO
87#if PLATFORM_SUPPORTS_MESH_SHADERS
108 return Desc.
MS.BytecodeLength > 0;
111#if D3D12RHI_NEEDS_VENDOR_EXTENSIONS
134#if D3D12_USE_DERIVED_PSO
153#if D3D12RHI_NEEDS_VENDOR_EXTENSIONS
160#if D3D12_USE_DERIVED_PSO
166#define PSO_IF_NOT_EQUAL_RETURN_FALSE( value ) if(lhs.value != rhs.value){ return false; }
167#define PSO_IF_MEMCMP_FAILS_RETURN_FALSE( value ) if(FMemory::Memcmp(&lhs.value, &rhs.value, sizeof(rhs.value)) != 0){ return false; }
168#define PSO_IF_STRING_COMPARE_FAILS_RETURN_FALSE( value ) \
169 const char* const lhString = lhs.value; \
170 const char* const rhString = rhs.value; \
171 if (lhString != rhString) \
173 if (strcmp(lhString, rhString) != 0) \
197#if !D3D12_USE_DERIVED_PSO || D3D12_USE_DERIVED_PSO_SHADER_EXPORTS
200#if !D3D12_USE_DERIVED_PSO
210 for (
uint32 i = 0; i <
lhs.Desc.RTFormatArray.NumRenderTargets; i++)
224 if (
lhs.Desc.InputLayout.pInputElementDescs !=
rhs.Desc.InputLayout.pInputElementDescs &&
225 lhs.Desc.InputLayout.NumElements)
227 for (
uint32 i = 0; i <
lhs.Desc.InputLayout.NumElements; i++)
308#if D3D12_USE_DERIVED_PSO
328 return InternalGetPipelineState();
414 default:
return nullptr;
433#if D3D12RHI_USE_HIGH_LEVEL_PSO_CACHE
468 template <
typename TDesc,
typename TValue>
485 return Key.CombinedHash;
489 template <
typename TDesc,
typename TValue = FD3D12PipelineState*>
491#if D3D12RHI_USE_HIGH_LEVEL_PSO_CACHE
499#if D3D12RHI_USE_HIGH_LEVEL_PSO_CACHE
514#if D3D12RHI_USE_HIGH_LEVEL_PSO_CACHE
529#if !D3D12RHI_USE_HIGH_LEVEL_PSO_CACHE
537#if D3D12RHI_USE_HIGH_LEVEL_PSO_CACHE
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define DECLARE_DWORD_COUNTER_STAT(CounterName, StatId, GroupId)
Definition Stats.h:672
#define DECLARE_DWORD_ACCUMULATOR_STAT(CounterName, StatId, GroupId)
Definition Stats.h:674
#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
#define PSO_IF_STRING_COMPARE_FAILS_RETURN_FALSE(value)
Definition D3D12PipelineState.h:168
#define PSO_IF_NOT_EQUAL_RETURN_FALSE(value)
Definition D3D12PipelineState.h:166
#define PSO_IF_MEMCMP_FAILS_RETURN_FALSE(value)
Definition D3D12PipelineState.h:167
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
@ SF_NumStandardFrequencies
Definition RHIDefinitions.h:222
Definition AsyncWork.h:585
Definition RHIResources.h:4820
Definition D3D12RHICommon.h:54
Definition D3D12Adapter.h:136
Definition D3D12Shader.h:138
Definition D3D12Shader.h:160
Definition D3D12Shader.h:144
Definition D3D12Shader.h:132
Definition D3D12RHICommon.h:153
Definition D3D12PipelineState.h:459
TPipelineCache< FD3D12ComputePipelineStateDesc > ComputePipelineStateCache
Definition D3D12PipelineState.h:496
FD3D12PipelineState * FindInLowLevelCache(const FD3D12LowLevelGraphicsPipelineStateDesc &Desc)
Definition D3D12Pipelinestate.cpp:588
FRWLock ComputePipelineStateCacheMutex
Definition D3D12PipelineState.h:504
FD3D12GraphicsPipelineState * FindInLoadedCache(const FGraphicsPipelineStateInitializer &Initializer, const FD3D12RootSignature *RootSignature, FD3D12LowLevelGraphicsPipelineStateDesc &OutLowLevelDesc)
Definition D3D12Pipelinestate.cpp:839
FD3D12GraphicsPipelineState * CreateAndAdd(const FGraphicsPipelineStateInitializer &Initializer, const FD3D12RootSignature *RootSignature, const FD3D12LowLevelGraphicsPipelineStateDesc &LowLevelDesc)
Definition D3D12Pipelinestate.cpp:875
TPipelineCache< FD3D12LowLevelGraphicsPipelineStateDesc > LowLevelGraphicsPipelineStateCache
Definition D3D12PipelineState.h:495
virtual void OnPSOCreated(FD3D12PipelineState *PipelineState, const FD3D12LowLevelGraphicsPipelineStateDesc &Desc)=0
TFunction< void(FD3D12PipelineState **, const FD3D12LowLevelGraphicsPipelineStateDesc &)> FPostCreateGraphicCallback
Definition D3D12PipelineState.h:511
void AddToLowLevelCache(const FD3D12LowLevelGraphicsPipelineStateDesc &Desc, FD3D12PipelineState **OutPipelineState, const FPostCreateGraphicCallback &PostCreateCallback)
Definition D3D12Pipelinestate.cpp:672
virtual void OnPSOCreated(FD3D12PipelineState *PipelineState, const FD3D12ComputePipelineStateDesc &Desc)=0
FDiskCacheInterface DiskCaches[NUM_PSO_CACHE_TYPES]
Definition D3D12PipelineState.h:507
FRWLock LowLevelGraphicsPipelineStateCacheMutex
Definition D3D12PipelineState.h:503
static uint64 HashPSODesc(const FD3D12LowLevelGraphicsPipelineStateDesc &Desc)
Definition D3D12Pipelinestate.cpp:185
void RemoveFromLowLevelCache(FD3D12PipelineState *PipelineState, const FGraphicsPipelineStateInitializer &PipelineStateInitializer, const FD3D12RootSignature *RootSignature)
Definition D3D12Pipelinestate.cpp:622
PSO_CACHE_TYPE
Definition D3D12PipelineState.h:462
@ NUM_PSO_CACHE_TYPES
Definition D3D12PipelineState.h:465
@ PSO_CACHE_GRAPHICS
Definition D3D12PipelineState.h:463
@ PSO_CACHE_COMPUTE
Definition D3D12PipelineState.h:464
static uint64 HashData(const void *Data, int32 NumBytes)
Definition D3D12Pipelinestate.cpp:180
FRWLock DiskCachesCS
Definition D3D12PipelineState.h:506
virtual ~FD3D12PipelineStateCacheBase()
Definition D3D12Pipelinestate.cpp:292
TFunction< void(FD3D12PipelineState *, const FD3D12ComputePipelineStateDesc &)> FPostCreateComputeCallback
Definition D3D12PipelineState.h:512
void CleanupPipelineStateCaches()
Definition D3D12Pipelinestate.cpp:499
FD3D12PipelineState * CreateAndAddToLowLevelCache(const FD3D12LowLevelGraphicsPipelineStateDesc &Desc)
Definition D3D12Pipelinestate.cpp:610
Definition D3D12Shader.h:150
Definition D3D12RootSignature.h:73
Definition D3D12Shader.h:126
Definition WindowsD3D12DiskCache.h:14
Definition RHIResources.h:4572
FBoundShaderStateInput BoundShaderState
Definition RHIResources.h:4754
Definition AsyncWork.h:663
Definition UnrealTemplate.h:321
Definition RHIResources.h:1078
Definition RHIResources.h:1058
Definition RHIResources.h:947
Definition RefCounting.h:213
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
UE_FORCEINLINE_HINT ReferencedType * GetReference() const
Definition RefCounting.h:584
Definition StaticArray.h:26
uint32 GetTypeHash(const FKey &Key)
Definition BlackboardKey.h:35
bool operator==(const FCachedAssetKey &A, const FCachedAssetKey &B)
Definition AssetDataMap.h:501
Definition SetUtilities.h:23
Definition WindowsD3D12PipelineState.h:87
Definition WindowsD3D12PipelineState.h:123
Definition D3D12PipelineState.h:367
void Set(uint32_t Frame) const
Definition D3D12PipelineState.h:368
uint32 Get() const
Definition D3D12PipelineState.h:373
std::atomic< uint32 > LastUsedFrame
Definition D3D12PipelineState.h:379
Definition D3D12PipelineState.h:146
const FD3D12RootSignature * pRootSignature
Definition D3D12PipelineState.h:147
FORCEINLINE FString GetName() const
Definition D3D12PipelineState.h:158
ShaderBytecodeHash CSHash
Definition D3D12PipelineState.h:149
FD3D12_COMPUTE_PIPELINE_STATE_DESC Desc
Definition D3D12PipelineState.h:148
SIZE_T CombinedHash
Definition D3D12PipelineState.h:151
Definition D3D12PipelineState.h:424
FD3D12ComputePipelineState()=delete
~FD3D12ComputePipelineState()
Definition D3D12Pipelinestate.cpp:478
bool bShaderNeedsGlobalConstantBuffer
Definition D3D12PipelineState.h:430
bool bPSOPrecache
Definition D3D12PipelineState.h:429
Definition D3D12PipelineState.h:394
FORCEINLINE FD3D12PixelShader * GetPixelShader() const
Definition D3D12PipelineState.h:400
FD3D12GraphicsPipelineState()=delete
FORCEINLINE FD3D12AmplificationShader * GetAmplificationShader() const
Definition D3D12PipelineState.h:402
TStaticArray< uint16, MaxVertexElementCount > StreamStrides
Definition D3D12PipelineState.h:419
~FD3D12GraphicsPipelineState()
Definition D3D12Pipelinestate.cpp:425
FORCEINLINE FD3D12GeometryShader * GetGeometryShader() const
Definition D3D12PipelineState.h:403
FORCEINLINE FD3D12MeshShader * GetMeshShader() const
Definition D3D12PipelineState.h:401
bool bShaderNeedsGlobalConstantBuffer[SF_NumStandardFrequencies]
Definition D3D12PipelineState.h:420
FORCEINLINE FD3D12VertexShader * GetVertexShader() const
Definition D3D12PipelineState.h:399
FRHIGraphicsShader * GetShader(EShaderFrequency Frequency) const override
Definition D3D12PipelineState.h:405
FGraphicsPipelineStateInitializer PipelineStateInitializer
Definition D3D12PipelineState.h:418
Definition D3D12PipelineState.h:93
ShaderBytecodeHash GSHash
Definition D3D12PipelineState.h:99
bool bFromPSOFileCache
Definition D3D12PipelineState.h:102
ShaderBytecodeHash PSHash
Definition D3D12PipelineState.h:100
uint32 InputLayoutHash
Definition D3D12PipelineState.h:101
FD3D12_GRAPHICS_PIPELINE_STATE_DESC Desc
Definition D3D12PipelineState.h:95
const FD3D12RootSignature * pRootSignature
Definition D3D12PipelineState.h:94
FORCEINLINE FString GetName() const
Definition D3D12PipelineState.h:132
FORCEINLINE bool UsesMeshShaders() const
Definition D3D12PipelineState.h:106
ShaderBytecodeHash MSHash
Definition D3D12PipelineState.h:97
ShaderBytecodeHash VSHash
Definition D3D12PipelineState.h:96
SIZE_T CombinedHash
Definition D3D12PipelineState.h:104
ShaderBytecodeHash ASHash
Definition D3D12PipelineState.h:98
Definition D3D12PipelineState.h:470
const TPairInitializer< typename TTypeTraits< TDesc >::ConstInitType, typename TTypeTraits< TValue >::ConstInitType > & ElementInitType
Definition D3D12PipelineState.h:472
static FORCEINLINE bool Matches(KeyInitType A, KeyInitType B)
Definition D3D12PipelineState.h:478
static FORCEINLINE uint32 GetKeyHash(KeyInitType Key)
Definition D3D12PipelineState.h:483
static FORCEINLINE KeyInitType GetSetKey(ElementInitType Element)
Definition D3D12PipelineState.h:474
TTypeTraits< TDesc >::ConstPointerType KeyInitType
Definition D3D12PipelineState.h:471
Definition D3D12PipelineState.h:383
const FD3D12RootSignature *const RootSignature
Definition D3D12PipelineState.h:386
FD3D12PipelineState * PipelineState
Definition D3D12PipelineState.h:388
D3D12ResourceFrameCounter FrameCounter
Definition D3D12PipelineState.h:390
Definition D3D12PipelineState.h:281
FORCEINLINE TStatId GetStatId() const
Definition D3D12PipelineState.h:287
FD3D12PipelineStateWorker(FD3D12Adapter *Adapter, const GraphicsPipelineCreationArgs &InArgs)
FD3D12PipelineStateWorker(FD3D12Adapter *Adapter, const ComputePipelineCreationArgs &InArgs)
void DoWork()
Definition WindowsD3D12PipelineState.cpp:1020
union FD3D12PipelineStateWorker::PipelineCreationArgs CreationArgs
TRefCountPtr< ID3D12PipelineState > PSO
Definition D3D12PipelineState.h:296
const bool bIsGraphics
Definition D3D12PipelineState.h:295
Definition D3D12PipelineState.h:300
FORCEINLINE void SetContextSortKey(uint64 InContextSortKey)
Definition D3D12PipelineState.h:337
TRefCountPtr< ID3D12PipelineState > PipelineState
Definition D3D12PipelineState.h:350
void CreateAsync(const ComputePipelineCreationArgs &InCreationArgs)
Definition WindowsD3D12PipelineState.cpp:993
uint64 ContextSortKey
Definition D3D12PipelineState.h:363
volatile PSOInitState InitState
Definition D3D12PipelineState.h:360
~FD3D12PipelineState()
Definition D3D12Pipelinestate.cpp:307
FORCEINLINE bool IsValid()
Definition D3D12PipelineState.h:315
FD3D12PipelineState & operator=(const FD3D12PipelineState &other)=delete
FRWLock GetPipelineStateMutex
Definition D3D12PipelineState.h:352
FORCEINLINE ID3D12PipelineState * GetPipelineState()
Definition D3D12PipelineState.h:320
FORCEINLINE uint64 GetContextSortKey() const
Definition D3D12PipelineState.h:332
FAsyncTask< FD3D12PipelineStateWorker > * Worker
Definition D3D12PipelineState.h:351
PSOInitState
Definition D3D12PipelineState.h:355
static bool UsePSORefCounting()
Definition D3D12Pipelinestate.cpp:326
Definition D3D12PipelineState.h:141
FD3D12_COMPUTE_PIPELINE_STATE_STREAM PipelineStateStream() const
Definition WindowsD3D12PipelineState.cpp:96
Definition WindowsD3D12PipelineState.h:68
Definition D3D12PipelineState.h:61
ID3D12RootSignature * pRootSignature
Definition D3D12PipelineState.h:62
D3D12_SHADER_BYTECODE PS
Definition D3D12PipelineState.h:66
D3D12_SHADER_BYTECODE GS
Definition D3D12PipelineState.h:67
D3D12_INPUT_LAYOUT_DESC InputLayout
Definition D3D12PipelineState.h:76
D3D12_SHADER_BYTECODE MS
Definition D3D12PipelineState.h:64
uint32 SampleMask
Definition D3D12PipelineState.h:72
D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue
Definition D3D12PipelineState.h:77
FD3D12_GRAPHICS_PIPELINE_STATE_STREAM PipelineStateStream() const
Definition WindowsD3D12PipelineState.cpp:50
D3D12_BLEND_DESC BlendState
Definition D3D12PipelineState.h:69
D3D12_RT_FORMAT_ARRAY RTFormatArray
Definition D3D12PipelineState.h:79
D3D12_CACHED_PIPELINE_STATE CachedPSO
Definition D3D12PipelineState.h:83
D3D12_SHADER_BYTECODE AS
Definition D3D12PipelineState.h:65
DXGI_FORMAT DSVFormat
Definition D3D12PipelineState.h:80
D3D12_PIPELINE_STATE_FLAGS Flags
Definition D3D12PipelineState.h:84
D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType
Definition D3D12PipelineState.h:78
DXGI_SAMPLE_DESC SampleDesc
Definition D3D12PipelineState.h:81
D3D12_DEPTH_STENCIL_DESC1 DepthStencilState
Definition D3D12PipelineState.h:74
uint32 NodeMask
Definition D3D12PipelineState.h:82
D3D12_SHADER_BYTECODE VS
Definition D3D12PipelineState.h:63
D3D12_RASTERIZER_DESC RasterizerState
Definition D3D12PipelineState.h:73
Definition WindowsD3D12PipelineState.h:15
Definition WindowsD3D12PipelineState.h:103
Definition WindowsD3D12PipelineState.h:138
Definition D3D12Shader.h:54
Definition LightweightStats.h:416
TCallTraits< T >::ParamType ConstInitType
Definition UnrealTypeTraits.h:336
TCallTraits< T >::ConstPointerType ConstPointerType
Definition UnrealTypeTraits.h:337
bool operator()(const FD3D12ComputePipelineStateDesc &lhs, const FD3D12ComputePipelineStateDesc &rhs)
Definition D3D12PipelineState.h:253
bool operator()(const FD3D12LowLevelGraphicsPipelineStateDesc &lhs, const FD3D12LowLevelGraphicsPipelineStateDesc &rhs)
Definition D3D12PipelineState.h:183
Definition D3D12PipelineState.h:179
Definition D3D12PipelineState.h:290
GraphicsPipelineCreationArgs_POD * GraphicsArgs
Definition D3D12PipelineState.h:292
ComputePipelineCreationArgs_POD * ComputeArgs
Definition D3D12PipelineState.h:291