UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
D3D12RootSignature.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 D3D12RootSignature.h: D3D12 Root Signatures
5=============================================================================*/
6
7#pragma once
8
10#include "D3D12Util.h"
11
12// Root parameter keys grouped by visibility.
43
45
47{
48public:
50
51 inline const D3D12_VERSIONED_ROOT_SIGNATURE_DESC& GetDesc() const { return RootDesc; }
52
53 static constexpr uint32 MaxRootParameters = 32; // Arbitrary max, increase as needed.
54
55 inline int8 GetRootConstantsSlot() const { return RootConstantsSlot; }
56 inline int8 GetDiagnosticBufferSlot() const { return DiagnosticBufferSlot; }
57 inline int8 GetStaticShaderBindingSlot() const { return StaticShaderBindingSlot; }
58 inline int8 GetStaticShaderBindingCount() const { return StaticShaderBindingCount; }
59
60private:
61
62 uint32 RootParametersSize; // The size of all root parameters in the root signature. Size in DWORDs, the limit is 64.
63 int8 RootConstantsSlot = -1;
64 int8 DiagnosticBufferSlot = -1;
65 int8 StaticShaderBindingSlot = -1;
66 int8 StaticShaderBindingCount = -1;
70};
71
73{
74private:
75 // Struct for all the useful info we want per shader stage.
76 struct ShaderStage
77 {
78 // TODO: Make these arrays and index into them by type instead of individual variables.
79 uint8 MaxCBVCount = 0;
80 uint8 MaxSRVCount = 0;
81 uint8 MaxSamplerCount = 0;
82 uint8 MaxUAVCount = 0;
83 CBVSlotMask CBVRegisterMask = 0;
84 bool bVisible = false;
85 };
86
87public:
96
99
102#if D3D12_RHI_RAYTRACING
105#endif
106
107 ID3D12RootSignature* GetRootSignature() const { return RootSignature.GetReference(); }
108 ID3DBlob* GetRootSignatureBlob() const { return RootSignatureBlob.GetReference(); }
109
111 {
112 switch (ShaderStage)
113 {
114 case SF_Vertex: return BindSlotMap[VS_Samplers];
115 case SF_Mesh: return BindSlotMap[MS_Samplers];
116 case SF_Amplification: return BindSlotMap[AS_Samplers];
117 case SF_Pixel: return BindSlotMap[PS_Samplers];
118 case SF_Geometry: return BindSlotMap[GS_Samplers];
119 case SF_Compute: return BindSlotMap[ALL_Samplers];
120
121 default: check(false);
122 return UINT_MAX;
123 }
124 }
125
127 {
128 switch (ShaderStage)
129 {
130 case SF_Vertex: return BindSlotMap[VS_SRVs];
131 case SF_Mesh: return BindSlotMap[MS_SRVs];
132 case SF_Amplification: return BindSlotMap[AS_SRVs];
133 case SF_Pixel: return BindSlotMap[PS_SRVs];
134 case SF_Geometry: return BindSlotMap[GS_SRVs];
135 case SF_Compute: return BindSlotMap[ALL_SRVs];
136
137 default: check(false);
138 return UINT_MAX;
139 }
140 }
141
143 {
144 switch (ShaderStage)
145 {
146 case SF_Vertex: return BindSlotMap[VS_CBVs];
147 case SF_Mesh: return BindSlotMap[MS_CBVs];
148 case SF_Amplification: return BindSlotMap[AS_CBVs];
149 case SF_Pixel: return BindSlotMap[PS_CBVs];
150 case SF_Geometry: return BindSlotMap[GS_CBVs];
151 case SF_Compute: return BindSlotMap[ALL_CBVs];
152
153 default: check(false);
154 return UINT_MAX;
155 }
156 }
157
159 {
160 switch (ShaderStage)
161 {
162 case SF_Vertex: return BindSlotMap[VS_RootCBVs];
163 case SF_Mesh: return BindSlotMap[MS_RootCBVs];
164 case SF_Amplification: return BindSlotMap[AS_RootCBVs];
165 case SF_Pixel: return BindSlotMap[PS_RootCBVs];
166 case SF_Geometry: return BindSlotMap[GS_RootCBVs];
167
169 case SF_Compute: return BindSlotMap[ALL_RootCBVs];
170
171 default: check(false);
172 return UINT_MAX;
173 }
174 }
175
177 {
178 // This code assumes that all Root CBVs for a particular stage are contiguous in the root signature (thus indexable by the buffer index).
179 return CBVRDBaseBindSlot(ShaderStage) + BufferIndex;
180 }
181
188
190 {
191 return BindSlotMapIndex < InvalidBindSlotMapIndex;
192 }
193
194 inline bool HasUAVs() const { return bHasUAVs; }
195 inline bool HasSRVs() const { return bHasSRVs; }
196 inline bool HasCBVs() const { return bHasCBVs; }
197 inline bool HasRootCBs() const { return bHasRootCBs; }
198 inline bool HasTableResources() const { return bHasUAVs || bHasSRVs; }
199 inline bool HasTableConstants() const { return bHasCBVs; }
200 inline bool HasSamplers() const { return bHasSamplers; }
201
202#if PLATFORM_SUPPORTS_BINDLESS_RENDERING
203 bool UsesDynamicResources() const { return bUsesDynamicResources; }
204 bool UsesDynamicSamplers() const { return bUsesDynamicSamplers; }
205#else
206 constexpr bool UsesDynamicResources() const { return false; }
207 constexpr bool UsesDynamicSamplers() const { return false; }
208#endif
209
210 inline bool HasVS() const { return Stage[SF_Vertex].bVisible; }
211 inline bool HasMS() const { return Stage[SF_Mesh].bVisible; }
212 inline bool HasAS() const { return Stage[SF_Amplification].bVisible; }
213 inline bool HasGS() const { return Stage[SF_Geometry].bVisible; }
214 inline bool HasPS() const { return Stage[SF_Pixel].bVisible; }
215 inline bool HasCS() const { return Stage[SF_Compute].bVisible; } // Root signatures can be used for Graphics and/or Compute because they exist in separate bind spaces.
216 inline uint32 MaxSamplerCount(uint32 ShaderStage) const { check(ShaderStage != SF_NumFrequencies); return Stage[ShaderStage].MaxSamplerCount; }
217 inline uint32 MaxSRVCount(uint32 ShaderStage) const { check(ShaderStage != SF_NumFrequencies); return Stage[ShaderStage].MaxSRVCount; }
218 inline uint32 MaxCBVCount(uint32 ShaderStage) const { check(ShaderStage != SF_NumFrequencies); return Stage[ShaderStage].MaxCBVCount; }
219 inline uint32 MaxUAVCount(uint32 ShaderStage) const { check(ShaderStage != SF_NumFrequencies); return Stage[ShaderStage].MaxUAVCount; }
220 inline CBVSlotMask CBVRegisterMask(uint32 ShaderStage) const { check(ShaderStage != SF_NumFrequencies); return Stage[ShaderStage].CBVRegisterMask; }
221
222 uint32 GetBindSlotOffsetInBytes(uint8 BindSlotIndex) const { check(BindSlotIndex < UE_ARRAY_COUNT(BindSlotOffsetsInDWORDs)); return 4 * BindSlotOffsetsInDWORDs[BindSlotIndex]; }
223 uint32 GetTotalRootSignatureSizeInBytes() const { return 4 * TotalRootSignatureSizeInDWORDs; }
224
225 inline int8 GetRootConstantsSlot() const { return RootConstantsSlot; }
226 inline int8 GetStaticShaderBindingSlot() const { return StaticShaderBindingSlot; }
227 inline int8 GetStaticShaderBindingCount() const { return StaticShaderBindingCount; }
228
229 // Returns root parameter slot for the internal shader diagnostic buffer (used for asserts, etc.) or -1 if not available.
230 inline int8 GetDiagnosticBufferSlot() const { return DiagnosticBufferSlot; }
231
232private:
234
235 template<typename RootSignatureDescType>
236 void InternalAnalyzeSignature(const RootSignatureDescType& Desc, ERootSignatureType InRootSignatureType);
237
238 inline bool HasVisibility(const D3D12_SHADER_VISIBILITY& ParameterVisibility, const D3D12_SHADER_VISIBILITY& Visibility) const
239 {
241 }
242
243 inline void SetSamplersRDTBindSlot(EShaderFrequency SF, uint8 RootParameterIndex)
244 {
245 uint8* pBindSlot = nullptr;
246 switch (SF)
247 {
248 case SF_Vertex: pBindSlot = &BindSlotMap[VS_Samplers]; break;
249 case SF_Mesh: pBindSlot = &BindSlotMap[MS_Samplers]; break;
250 case SF_Amplification: pBindSlot = &BindSlotMap[AS_Samplers]; break;
251 case SF_Pixel: pBindSlot = &BindSlotMap[PS_Samplers]; break;
252 case SF_Geometry: pBindSlot = &BindSlotMap[GS_Samplers]; break;
253
254 case SF_Compute:
255 case SF_NumFrequencies: pBindSlot = &BindSlotMap[ALL_Samplers]; break;
256
257 default: check(false);
258 return;
259 }
260
261 check(*pBindSlot == InvalidBindSlotMapIndex);
263
264 bHasSamplers = true;
265 }
266
267 inline void SetSRVRDTBindSlot(EShaderFrequency SF, uint8 RootParameterIndex)
268 {
269 uint8* pBindSlot = nullptr;
270 switch (SF)
271 {
272 case SF_Vertex: pBindSlot = &BindSlotMap[VS_SRVs]; break;
273 case SF_Mesh: pBindSlot = &BindSlotMap[MS_SRVs]; break;
274 case SF_Amplification: pBindSlot = &BindSlotMap[AS_SRVs]; break;
275 case SF_Pixel: pBindSlot = &BindSlotMap[PS_SRVs]; break;
276 case SF_Geometry: pBindSlot = &BindSlotMap[GS_SRVs]; break;
277
278 case SF_Compute:
279 case SF_NumFrequencies: pBindSlot = &BindSlotMap[ALL_SRVs]; break;
280
281 default: check(false);
282 return;
283 }
284
285 check(*pBindSlot == InvalidBindSlotMapIndex);
287
288 bHasSRVs = true;
289 }
290
291 inline void SetCBVRDTBindSlot(EShaderFrequency SF, uint8 RootParameterIndex)
292 {
293 uint8* pBindSlot = nullptr;
294 switch (SF)
295 {
296 case SF_Vertex: pBindSlot = &BindSlotMap[VS_CBVs]; break;
297 case SF_Mesh: pBindSlot = &BindSlotMap[MS_CBVs]; break;
298 case SF_Amplification: pBindSlot = &BindSlotMap[AS_CBVs]; break;
299 case SF_Pixel: pBindSlot = &BindSlotMap[PS_CBVs]; break;
300 case SF_Geometry: pBindSlot = &BindSlotMap[GS_CBVs]; break;
301
302 case SF_Compute:
303 case SF_NumFrequencies: pBindSlot = &BindSlotMap[ALL_CBVs]; break;
304
305 default: check(false);
306 return;
307 }
308
309 check(*pBindSlot == InvalidBindSlotMapIndex);
311
312 bHasCBVs = true;
313 }
314
315 inline void SetCBVRDBindSlot(EShaderFrequency SF, uint8 RootParameterIndex)
316 {
317 uint8* pBindSlot = nullptr;
318 switch (SF)
319 {
320 case SF_Vertex: pBindSlot = &BindSlotMap[VS_RootCBVs]; break;
321 case SF_Mesh: pBindSlot = &BindSlotMap[MS_RootCBVs]; break;
322 case SF_Amplification: pBindSlot = &BindSlotMap[AS_RootCBVs]; break;
323 case SF_Pixel: pBindSlot = &BindSlotMap[PS_RootCBVs]; break;
324 case SF_Geometry: pBindSlot = &BindSlotMap[GS_RootCBVs]; break;
325
326 case SF_Compute:
327 case SF_NumFrequencies: pBindSlot = &BindSlotMap[ALL_RootCBVs]; break;
328
329 default: check(false);
330 return;
331 }
332
333 check(*pBindSlot == InvalidBindSlotMapIndex);
335
336 bHasRootCBs = true;
337 }
338
339 inline void SetUAVRDTBindSlot(EShaderFrequency SF, uint8 RootParameterIndex)
340 {
342
344 uint8* pBindSlot = &BindSlotMap[MapSlotIndex];
345
346 check(*pBindSlot == InvalidBindSlotMapIndex);
348
349 bHasUAVs = true;
350 }
351
352 inline void SetMaxSamplerCount(EShaderFrequency SF, uint8 Count)
353 {
354 if (SF == SF_NumFrequencies)
355 {
356 // Update all counts for all stages.
357 for (uint32 s = SF_Vertex; s <= SF_Compute; s++)
358 {
359 Stage[s].MaxSamplerCount = Count;
360 }
361 }
362 else
363 {
364 Stage[SF].MaxSamplerCount = Count;
365 }
366 }
367
368 inline void SetMaxSRVCount(EShaderFrequency SF, uint8 Count)
369 {
370 if (SF == SF_NumFrequencies)
371 {
372 // Update all counts for all stages.
373 for (uint32 s = SF_Vertex; s <= SF_Compute; s++)
374 {
375 Stage[s].MaxSRVCount = Count;
376 }
377 }
378 else
379 {
380 Stage[SF].MaxSRVCount = Count;
381 }
382 }
383
384 // Update the mask that indicates what shader registers are used in the descriptor table.
385 template<typename DescriptorRangeType>
386 inline void UpdateCBVRegisterMaskWithDescriptorRange(EShaderFrequency SF, const DescriptorRangeType& Range)
387 {
388 const uint32 StartRegister = Range.BaseShaderRegister;
389 const uint32 EndRegister = StartRegister + Range.NumDescriptors;
393 {
395 {
396 // The bit shouldn't already be set for the current register.
397 check((Stage[CurrentStage].CBVRegisterMask & (1 << Register)) == 0);
398 Stage[CurrentStage].CBVRegisterMask |= (1 << Register);
399 }
400 }
401 }
402
403 // Update the mask that indicates what shader registers are used in the root descriptor.
404 template<typename DescriptorType>
405 inline void UpdateCBVRegisterMaskWithDescriptor(EShaderFrequency SF, const DescriptorType& Descriptor)
406 {
409 const uint32& Register = Descriptor.ShaderRegister;
411 {
412 // The bit shouldn't already be set for the current register.
413 check((Stage[CurrentStage].CBVRegisterMask & (1 << Register)) == 0);
414 Stage[CurrentStage].CBVRegisterMask |= (1 << Register);
415 }
416 }
417
418 inline void SetMaxCBVCount(EShaderFrequency SF, uint8 Count)
419 {
420 if (SF == SF_NumFrequencies)
421 {
422 // Update all counts for all stages.
423 for (uint32 s = SF_Vertex; s <= SF_Compute; s++)
424 {
425 Stage[s].MaxCBVCount = Count;
426 }
427 }
428 else
429 {
430 Stage[SF].MaxCBVCount = Count;
431 }
432 }
433
434 inline void IncrementMaxCBVCount(EShaderFrequency SF, uint8 Count)
435 {
436 if (SF == SF_NumFrequencies)
437 {
438 // Update all counts for all stages.
439 for (uint32 s = SF_Vertex; s <= SF_Compute; s++)
440 {
441 Stage[s].MaxCBVCount += Count;
442 }
443 }
444 else
445 {
446 Stage[SF].MaxCBVCount += Count;
447 }
448 }
449
450 inline void SetMaxUAVCount(EShaderFrequency SF, uint8 Count)
451 {
452 if (SF == SF_NumFrequencies)
453 {
454 // Update all counts for all stages.
455 for (uint32 s = SF_Vertex; s <= SF_Compute; s++)
456 {
457 Stage[s].MaxUAVCount = Count;
458 }
459 }
460 else
461 {
462 Stage[SF].MaxUAVCount = Count;
463 }
464 }
465
467 uint8 BindSlotMap[RPK_RootParameterKeyCount]; // This map uses an enum as a key to lookup the root parameter index
468 static constexpr uint8 InvalidBindSlotMapIndex = 0xFF;
470 TRefCountPtr<ID3DBlob> RootSignatureBlob;
471
472 uint8 BindSlotOffsetsInDWORDs[FD3D12RootSignatureDesc::MaxRootParameters] = {};
473 uint8 TotalRootSignatureSizeInDWORDs = 0;
474 int8 RootConstantsSlot = -1;
475 int8 DiagnosticBufferSlot = -1;
476 int8 StaticShaderBindingSlot = -1;
477 int8 StaticShaderBindingCount = -1;
478
479 uint8 bHasUAVs : 1;
480 uint8 bHasSRVs : 1;
481 uint8 bHasCBVs : 1;
482 uint8 bHasRootCBs : 1;
483 uint8 bHasSamplers : 1;
484#if PLATFORM_SUPPORTS_BINDLESS_RENDERING
487#endif
488};
489
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
uint16 CBVSlotMask
Definition D3D12RHICommon.h:29
ERootParameterKeys
Definition D3D12RootSignature.h:14
@ VS_Samplers
Definition D3D12RootSignature.h:22
@ VS_CBVs
Definition D3D12RootSignature.h:20
@ VS_SRVs
Definition D3D12RootSignature.h:19
@ AS_RootCBVs
Definition D3D12RootSignature.h:34
@ GS_RootCBVs
Definition D3D12RootSignature.h:26
@ ALL_SRVs
Definition D3D12RootSignature.h:36
@ MS_SRVs
Definition D3D12RootSignature.h:28
@ PS_RootCBVs
Definition D3D12RootSignature.h:17
@ ALL_Samplers
Definition D3D12RootSignature.h:39
@ GS_SRVs
Definition D3D12RootSignature.h:24
@ PS_Samplers
Definition D3D12RootSignature.h:18
@ RPK_RootParameterKeyCount
Definition D3D12RootSignature.h:41
@ PS_CBVs
Definition D3D12RootSignature.h:16
@ MS_CBVs
Definition D3D12RootSignature.h:29
@ AS_SRVs
Definition D3D12RootSignature.h:32
@ ALL_UAVs
Definition D3D12RootSignature.h:40
@ ALL_RootCBVs
Definition D3D12RootSignature.h:38
@ AS_Samplers
Definition D3D12RootSignature.h:35
@ AS_CBVs
Definition D3D12RootSignature.h:33
@ GS_Samplers
Definition D3D12RootSignature.h:27
@ MS_RootCBVs
Definition D3D12RootSignature.h:30
@ MS_Samplers
Definition D3D12RootSignature.h:31
@ VS_RootCBVs
Definition D3D12RootSignature.h:21
@ GS_CBVs
Definition D3D12RootSignature.h:25
@ PS_SRVs
Definition D3D12RootSignature.h:15
@ ALL_CBVs
Definition D3D12RootSignature.h:37
@ VS_UAVs
Definition D3D12RootSignature.h:23
ERootSignatureType
Definition D3D12Util.h:83
void Init()
Definition LockFreeList.h:4
EShaderFrequency
Definition RHIDefinitions.h:202
@ SF_Compute
Definition RHIDefinitions.h:208
@ SF_NumFrequencies
Definition RHIDefinitions.h:216
@ 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
EShaderBindingLayoutFlags
Definition RHIShaderBindingLayout.h:53
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition D3D12RHICommon.h:54
Definition D3D12Adapter.h:136
Definition D3D12RootSignature.h:47
const D3D12_VERSIONED_ROOT_SIGNATURE_DESC & GetDesc() const
Definition D3D12RootSignature.h:51
static constexpr uint32 MaxRootParameters
Definition D3D12RootSignature.h:53
int8 GetStaticShaderBindingSlot() const
Definition D3D12RootSignature.h:57
int8 GetDiagnosticBufferSlot() const
Definition D3D12RootSignature.h:56
int8 GetRootConstantsSlot() const
Definition D3D12RootSignature.h:55
int8 GetStaticShaderBindingCount() const
Definition D3D12RootSignature.h:58
Definition D3D12RootSignature.h:491
FD3D12RootSignature * GetRootSignature(const FD3D12QuantizedBoundShaderState &QBSS)
Definition D3D12RootSignature.cpp:841
void Destroy()
Definition D3D12RootSignature.cpp:831
FD3D12RootSignatureManager(FD3D12Adapter *InParent)
Definition D3D12RootSignature.h:493
FD3D12QuantizedBoundShaderState GetQuantizedBoundShaderState(const FD3D12RootSignature *const RootSignature)
Definition D3D12RootSignature.cpp:869
~FD3D12RootSignatureManager()
Definition D3D12RootSignature.h:497
Definition D3D12RootSignature.h:73
uint32 GetTotalRootSignatureSizeInBytes() const
Definition D3D12RootSignature.h:223
FD3D12RootSignature(FD3D12Adapter *InParent)
Definition D3D12RootSignature.h:88
uint32 CBVRDBindSlot(EShaderFrequency ShaderStage, uint32 BufferIndex) const
Definition D3D12RootSignature.h:176
bool HasCS() const
Definition D3D12RootSignature.h:215
constexpr bool UsesDynamicSamplers() const
Definition D3D12RootSignature.h:207
bool HasUAVs() const
Definition D3D12RootSignature.h:194
int8 GetDiagnosticBufferSlot() const
Definition D3D12RootSignature.h:230
bool HasMS() const
Definition D3D12RootSignature.h:211
int8 GetStaticShaderBindingSlot() const
Definition D3D12RootSignature.h:226
uint32 SRVRDTBindSlot(EShaderFrequency ShaderStage) const
Definition D3D12RootSignature.h:126
bool HasAS() const
Definition D3D12RootSignature.h:212
bool HasPS() const
Definition D3D12RootSignature.h:214
FD3D12RootSignature(FD3D12Adapter *InParent, const FD3D12QuantizedBoundShaderState &InQBSS)
Definition D3D12RootSignature.h:91
constexpr bool UsesDynamicResources() const
Definition D3D12RootSignature.h:206
bool HasCBVs() const
Definition D3D12RootSignature.h:196
uint32 MaxUAVCount(uint32 ShaderStage) const
Definition D3D12RootSignature.h:219
bool HasTableConstants() const
Definition D3D12RootSignature.h:199
bool HasRootCBs() const
Definition D3D12RootSignature.h:197
int8 GetRootConstantsSlot() const
Definition D3D12RootSignature.h:225
uint32 CBVRDBaseBindSlot(EShaderFrequency ShaderStage) const
Definition D3D12RootSignature.h:158
uint32 GetBindSlotOffsetInBytes(uint8 BindSlotIndex) const
Definition D3D12RootSignature.h:222
uint32 UAVRDTBindSlot(EShaderFrequency ShaderStage) const
Definition D3D12RootSignature.h:182
uint32 CBVRDTBindSlot(EShaderFrequency ShaderStage) const
Definition D3D12RootSignature.h:142
int8 GetStaticShaderBindingCount() const
Definition D3D12RootSignature.h:227
uint32 MaxCBVCount(uint32 ShaderStage) const
Definition D3D12RootSignature.h:218
ID3DBlob * GetRootSignatureBlob() const
Definition D3D12RootSignature.h:108
uint32 MaxSRVCount(uint32 ShaderStage) const
Definition D3D12RootSignature.h:217
bool HasSRVs() const
Definition D3D12RootSignature.h:195
bool HasGS() const
Definition D3D12RootSignature.h:213
static bool IsValidBindSlot(uint32 BindSlotMapIndex)
Definition D3D12RootSignature.h:189
uint32 SamplerRDTBindSlot(EShaderFrequency ShaderStage) const
Definition D3D12RootSignature.h:110
bool HasVS() const
Definition D3D12RootSignature.h:210
uint32 MaxSamplerCount(uint32 ShaderStage) const
Definition D3D12RootSignature.h:216
ID3D12RootSignature * GetRootSignature() const
Definition D3D12RootSignature.h:107
void InitStaticComputeRootSignatureDesc(EShaderBindingLayoutFlags InFlags)
Definition D3D12RootSignature.cpp:519
bool HasTableResources() const
Definition D3D12RootSignature.h:198
CBVSlotMask CBVRegisterMask(uint32 ShaderStage) const
Definition D3D12RootSignature.h:220
bool HasSamplers() const
Definition D3D12RootSignature.h:200
void InitStaticGraphicsRootSignature(EShaderBindingLayoutFlags InFlags)
Definition D3D12RootSignature.cpp:493
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
UE_FORCEINLINE_HINT ReferencedType * GetReference() const
Definition RefCounting.h:584
@ Range
Definition EnvQueryTypes.h:81
Definition VulkanCommon.h:29
Definition D3D12Util.h:118