UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
D3D12Shader.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 D3D12Shader.h: D3D12 Shaders
5=============================================================================*/
6
7#pragma once
8
9#include "D3D12RHICommon.h"
10#include "RHIResources.h"
11#include "ShaderCore.h"
13
15
16template <>
17struct TTypeTraits<D3D12_INPUT_ELEMENT_DESC> : public TTypeTraitsBase < D3D12_INPUT_ELEMENT_DESC >
18{
19 enum { IsBytewiseComparable = true };
20};
21
24
48
49//==================================================================================================================================
50// FD3D12ShaderBytecode
51// Encapsulates D3D12 shader bytecode and creates a hash for the shader bytecode
52//==================================================================================================================================
54{
56
57 bool operator ==(const ShaderBytecodeHash& b) const
58 {
59 return (Hash[0] == b.Hash[0] && Hash[1] == b.Hash[1]);
60 }
61
62 bool operator !=(const ShaderBytecodeHash& b) const
63 {
64 return (Hash[0] != b.Hash[0] || Hash[1] != b.Hash[1]);
65 }
66};
67
69{
72
74
75 // Hash of the static shader binding layout used during shader gen
77
78#if D3D12RHI_NEEDS_VENDOR_EXTENSIONS
80#endif
81
82#if D3D12RHI_NEEDS_SHADER_FEATURE_CHECKS
84#endif
85
90
92 {
94 if (Code.Num() == 0)
95 {
96 Hash.Hash[0] = Hash.Hash[1] = 0;
97 }
98 else
99 {
100 // D3D shader bytecode contains a 128bit checksum in DWORD 1-4. We can just use that directly instead of hashing the whole shader bytecode ourselves.
101 const uint8* pData = Code.GetData() + 4;
102 Hash = *reinterpret_cast<const ShaderBytecodeHash*>(pData);
103 }
104 return Hash;
105 }
106
107#if D3D12RHI_NEEDS_SHADER_FEATURE_CHECKS
109#else
111#endif
112
115#if PLATFORM_SUPPORTS_BINDLESS_RENDERING
118#endif
120
122};
123
126{
127public:
129};
130
132{
133public:
135};
136
142
144{
145public:
147};
148
150{
151public:
153
154#if D3D12_RHI_WORKGRAPHS_GRAPHICS
155 FString EntryPoint;
156#endif
157};
158
160{
161public:
163
165};
166
176
177#if D3D12_RHI_RAYTRACING
178
180{
181public:
183
185
187 FString EntryPoint; // Primary entry point for all ray tracing shaders. Assumed to be closest hit shader for SF_RayHitGroup.
188 FString AnyHitEntryPoint; // Optional any-hit shader entry point for SF_RayHitGroup.
189 FString IntersectionEntryPoint; // Optional intersection shader entry point for SF_RayHitGroup.
190 bool bPrecompiledPSO = false;
191};
192
193#endif // D3D12_RHI_RAYTRACING
194
195template<>
200template<>
205template<>
210template<>
215template<>
220template<>
225template<>
230template<>
#define FORCEINLINE
Definition AndroidPlatform.h:140
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
TArray< D3D12_INPUT_ELEMENT_DESC, TFixedAllocator< MaxVertexElementCount > > FD3D12VertexElements
Definition D3D12Shader.h:23
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
void Init()
Definition LockFreeList.h:4
EShaderFrequency
Definition RHIDefinitions.h:202
@ SF_Compute
Definition RHIDefinitions.h:208
@ 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
EShaderCodeFeatures
Definition ShaderCore.h:832
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 D3D12Shader.h:138
@ StaticFrequency
Definition D3D12Shader.h:140
Definition D3D12Shader.h:160
@ StaticFrequency
Definition D3D12Shader.h:162
const FD3D12RootSignature * RootSignature
Definition D3D12Shader.h:164
Definition D3D12Shader.h:144
@ StaticFrequency
Definition D3D12Shader.h:146
Definition D3D12Shader.h:132
@ StaticFrequency
Definition D3D12Shader.h:134
Definition D3D12Shader.h:150
@ StaticFrequency
Definition D3D12Shader.h:152
Definition D3D12RootSignature.h:73
Definition D3D12Shader.h:27
uint32 HashNoStrides
Definition D3D12Shader.h:34
TStaticArray< uint16, MaxVertexElementCount > StreamStrides
Definition D3D12Shader.h:32
FD3D12VertexDeclaration(const FD3D12VertexElements &InElements, const uint16 *InStrides, const uint32 InHash, const uint32 InHashNoStrides)
Definition D3D12Shader.h:37
uint32 Hash
Definition D3D12Shader.h:33
virtual uint32 GetPrecachePSOHash() const final override
Definition D3D12Shader.h:46
FD3D12VertexElements VertexElements
Definition D3D12Shader.h:30
virtual bool GetInitializer(FVertexDeclarationElementList &Init) final override
Definition D3D12VertexDeclaration.cpp:178
Definition D3D12Shader.h:126
@ StaticFrequency
Definition D3D12Shader.h:128
Definition D3D12Shader.h:168
FD3D12WorkGraphShader(EShaderFrequency InFrequency)
Definition D3D12Shader.h:170
FString EntryPoint
Definition D3D12Shader.h:174
const FD3D12RootSignature * RootSignature
Definition D3D12Shader.h:172
Definition RHIResources.h:966
Definition RHIResources.h:1018
Definition RHIResources.h:978
Definition RHIResources.h:960
Definition RHIResources.h:972
Definition RHIResources.h:984
Definition RHIResources.h:725
Definition RHIResources.h:954
Definition RHIResources.h:1033
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
Definition StaticArray.h:26
UE_REWRITE constexpr InElementType * GetData()
Definition StaticArray.h:89
UE_REWRITE constexpr int32 Num() const
Definition StaticArray.h:83
Definition D3D12Shader.h:69
FORCEINLINE EShaderCodeFeatures GetFeatures() const
Definition D3D12Shader.h:110
FShaderCodePackedResourceCounts ResourceCounts
Definition D3D12Shader.h:73
FORCEINLINE bool UsesGlobalUniformBuffer() const
Definition D3D12Shader.h:114
D3D12_SHADER_BYTECODE GetShaderBytecode() const
Definition D3D12Shader.h:86
ShaderBytecodeHash GetBytecodeHash() const
Definition D3D12Shader.h:91
FORCEINLINE bool UsesRootConstants() const
Definition D3D12Shader.h:119
uint32 ShaderBindingLayoutHash
Definition D3D12Shader.h:76
bool InitCommon(TArrayView< const uint8 > InCode)
TArray< uint8 > Code
Definition D3D12Shader.h:71
FORCEINLINE bool UsesDiagnosticBuffer() const
Definition D3D12Shader.h:113
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition ShaderCore.h:773
EShaderResourceUsageFlags UsageFlags
Definition ShaderCore.h:777
Definition D3D12Shader.h:54
uint64 Hash[2]
Definition D3D12Shader.h:55
bool operator!=(const ShaderBytecodeHash &b) const
Definition D3D12Shader.h:62
bool operator==(const ShaderBytecodeHash &b) const
Definition D3D12Shader.h:57
FD3D12AmplificationShader TConcreteType
Definition D3D12Shader.h:208
FD3D12ComputeShader TConcreteType
Definition D3D12Shader.h:223
FD3D12GeometryShader TConcreteType
Definition D3D12Shader.h:213
FD3D12MeshShader TConcreteType
Definition D3D12Shader.h:203
FD3D12PixelShader TConcreteType
Definition D3D12Shader.h:218
FD3D12VertexDeclaration TConcreteType
Definition D3D12Shader.h:233
FD3D12VertexShader TConcreteType
Definition D3D12Shader.h:198
FD3D12WorkGraphShader TConcreteType
Definition D3D12Shader.h:228
Definition D3D12RHICommon.h:374
Definition UnrealTypeTraits.h:335
Definition UnrealTypeTraits.h:347