UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WindowsD3D12PipelineState.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3// Implementation of D3D12 Pipelinestate related functions
4
5#pragma once
6
7#include "D3D12RHICommon.h"
8
9class FD3D12RootSignature; // forward-declare
12
13// Graphics pipeline stream struct that represents the latest version of PSO subobjects currently used by the RHI.
40
41#if PLATFORM_SUPPORTS_MESH_SHADERS
43{
44 // Note: Unused members are currently commented out to exclude them from the stream.
45 // This results in a smaller struct and thus fewer tokens to parse at runtime. Feel free to add/change as necessary.
46
47 //CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;
62 //CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;
63};
64#endif
65
66// Compute pipeline stream struct that represents the latest version of PSO subobjects currently used by the RHI.
68{
69 // Note: Unused members are currently commented out to exclude them from the stream.
70 // This results in a smaller struct and thus fewer tokens to parse at runtime. Feel free to add/change as necessary.
71
72 //CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;
77};
78
81
82#include "D3D12PipelineState.h"
83
85
101
121
136
151
153{
154private:
155 FDiskCacheInterface DiskBinaryCache;
157 bool bUseAPILibaries;
158
159 void WriteOutShaderBlob(PSO_CACHE_TYPE Cache, ID3D12PipelineState* APIPso);
160
161 template<typename PipelineStateDescType>
162 void ReadBackShaderBlob(PipelineStateDescType& Desc, PSO_CACHE_TYPE Cache)
163 {
164 SIZE_T* cachedBlobOffset = nullptr;
166
167 SIZE_T* cachedBlobSize = nullptr;
169
172
173 if (UseCachedBlobs())
174 {
176 Desc.CachedPSO.CachedBlobSizeInBytes = *cachedBlobSize;
177 Desc.CachedPSO.pCachedBlob = DiskBinaryCache.GetDataAt(*cachedBlobOffset);
178 }
179 else
180 {
181 Desc.CachedPSO.CachedBlobSizeInBytes = 0;
182 Desc.CachedPSO.pCachedBlob = nullptr;
183 }
184 }
185
186 bool UsePipelineLibrary() const
187 {
188 return bUseAPILibaries && PipelineLibrary != nullptr;
189 }
190
191 bool UseCachedBlobs() const
192 {
193 // Use Cached Blobs if Pipeline Librarys aren't supported.
194 //return bUseAPILibaries && !UsePipelineLibrary();
195 return false; // Don't try to use cached blobs (for now).
196 }
197
198protected:
199
200 void OnPSOCreated(FD3D12PipelineState* PipelineState, const FD3D12LowLevelGraphicsPipelineStateDesc& Desc) final override;
201 void OnPSOCreated(FD3D12PipelineState* PipelineState, const FD3D12ComputePipelineStateDesc& Desc) final override;
202
204 void AddToDiskCache(const FD3D12ComputePipelineStateDesc& Desc, FD3D12PipelineState* PipelineState);
205
206public:
207#if !D3D12RHI_USE_HIGH_LEVEL_PSO_CACHE
210#endif
212
213 void Close();
214
215 void Init(FString &GraphicsCacheFilename, FString &ComputeCacheFilename, FString &DriverBlobFilename);
216 bool IsInErrorState() const;
217
220};
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
void SaveByteCode(D3D12_SHADER_BYTECODE &ByteCode)
Definition WindowsD3D12PipelineState.cpp:107
Definition D3D12Adapter.h:136
Definition D3D12PipelineState.h:459
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
FDiskCacheInterface DiskCaches[NUM_PSO_CACHE_TYPES]
Definition D3D12PipelineState.h:507
PSO_CACHE_TYPE
Definition D3D12PipelineState.h:462
Definition WindowsD3D12PipelineState.h:153
void AddToDiskCache(const FD3D12LowLevelGraphicsPipelineStateDesc &Desc, FD3D12PipelineState *PipelineState)
Definition WindowsD3D12PipelineState.cpp:339
bool IsInErrorState() const
Definition WindowsD3D12PipelineState.cpp:564
void OnPSOCreated(FD3D12PipelineState *PipelineState, const FD3D12LowLevelGraphicsPipelineStateDesc &Desc) final override
Definition WindowsD3D12PipelineState.cpp:131
void Close()
Definition WindowsD3D12PipelineState.cpp:470
virtual ~FD3D12PipelineStateCache()
Definition WindowsD3D12PipelineState.cpp:577
void RebuildFromDiskCache()
Definition WindowsD3D12PipelineState.cpp:177
Definition D3D12RootSignature.h:73
Definition WindowsD3D12DiskCache.h:14
bool SetPointerAndAdvanceFilePosition(void **pDest, size_t size, bool backWithSystemMemory=false)
Definition WindowsD3D12DiskCache.cpp:157
void * GetDataAt(SIZE_T Offset) const
Definition WindowsD3D12DiskCache.cpp:284
Definition RefCounting.h:454
Definition WindowsD3D12PipelineState.h:87
ID3D12PipelineLibrary * Library
Definition WindowsD3D12PipelineState.h:89
void Destroy()
Definition WindowsD3D12PipelineState.cpp:117
FD3D12ComputePipelineStateDesc Desc
Definition WindowsD3D12PipelineState.h:88
void Init(const ComputePipelineCreationArgs_POD &InArgs)
Definition WindowsD3D12PipelineState.h:91
Definition WindowsD3D12PipelineState.h:123
ComputePipelineCreationArgs(const FD3D12ComputePipelineStateDesc *InDesc, ID3D12PipelineLibrary *InLibrary)
Definition WindowsD3D12PipelineState.h:124
ComputePipelineCreationArgs(const ComputePipelineCreationArgs &InArgs)
Definition WindowsD3D12PipelineState.h:130
ComputePipelineCreationArgs_POD Args
Definition WindowsD3D12PipelineState.h:134
Definition D3D12PipelineState.h:146
FD3D12_COMPUTE_PIPELINE_STATE_DESC Desc
Definition D3D12PipelineState.h:148
Definition D3D12PipelineState.h:93
FD3D12_GRAPHICS_PIPELINE_STATE_DESC Desc
Definition D3D12PipelineState.h:95
Definition D3D12PipelineState.h:300
Definition WindowsD3D12PipelineState.h:68
CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature
Definition WindowsD3D12PipelineState.h:74
CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO
Definition WindowsD3D12PipelineState.h:76
CD3DX12_PIPELINE_STATE_STREAM_CS CS
Definition WindowsD3D12PipelineState.h:75
CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask
Definition WindowsD3D12PipelineState.h:73
D3D12_SHADER_BYTECODE PS
Definition D3D12PipelineState.h:66
D3D12_SHADER_BYTECODE GS
Definition D3D12PipelineState.h:67
D3D12_SHADER_BYTECODE MS
Definition D3D12PipelineState.h:64
D3D12_SHADER_BYTECODE AS
Definition D3D12PipelineState.h:65
D3D12_SHADER_BYTECODE VS
Definition D3D12PipelineState.h:63
Definition WindowsD3D12PipelineState.h:15
CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat
Definition WindowsD3D12PipelineState.h:32
CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats
Definition WindowsD3D12PipelineState.h:34
CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState
Definition WindowsD3D12PipelineState.h:31
CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask
Definition WindowsD3D12PipelineState.h:20
CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO
Definition WindowsD3D12PipelineState.h:37
CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue
Definition WindowsD3D12PipelineState.h:23
CD3DX12_PIPELINE_STATE_STREAM_DS DS
Definition WindowsD3D12PipelineState.h:28
CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState
Definition WindowsD3D12PipelineState.h:33
CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout
Definition WindowsD3D12PipelineState.h:22
CD3DX12_PIPELINE_STATE_STREAM_PS PS
Definition WindowsD3D12PipelineState.h:29
CD3DX12_PIPELINE_STATE_STREAM_GS GS
Definition WindowsD3D12PipelineState.h:26
CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState
Definition WindowsD3D12PipelineState.h:30
CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature
Definition WindowsD3D12PipelineState.h:21
CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask
Definition WindowsD3D12PipelineState.h:36
CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc
Definition WindowsD3D12PipelineState.h:35
CD3DX12_PIPELINE_STATE_STREAM_VS VS
Definition WindowsD3D12PipelineState.h:25
CD3DX12_PIPELINE_STATE_STREAM_HS HS
Definition WindowsD3D12PipelineState.h:27
CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType
Definition WindowsD3D12PipelineState.h:24
Definition WindowsD3D12PipelineState.h:103
FD3D12LowLevelGraphicsPipelineStateDesc Desc
Definition WindowsD3D12PipelineState.h:104
void Destroy()
Definition WindowsD3D12PipelineState.cpp:122
void Init(const GraphicsPipelineCreationArgs_POD &InArgs)
Definition WindowsD3D12PipelineState.h:107
ID3D12PipelineLibrary * Library
Definition WindowsD3D12PipelineState.h:105
Definition WindowsD3D12PipelineState.h:138
GraphicsPipelineCreationArgs_POD Args
Definition WindowsD3D12PipelineState.h:149
GraphicsPipelineCreationArgs(const GraphicsPipelineCreationArgs &InArgs)
Definition WindowsD3D12PipelineState.h:145
GraphicsPipelineCreationArgs(const FD3D12LowLevelGraphicsPipelineStateDesc *InDesc, ID3D12PipelineLibrary *InLibrary)
Definition WindowsD3D12PipelineState.h:139