UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RenderGraphParameter.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7
9class FRDGParameter final
10{
11public:
12 FRDGParameter() = default;
13
14 bool IsResource() const
15 {
17 }
18
19 bool IsSRV() const
20 {
21 return MemberType == UBMT_RDG_TEXTURE_SRV || MemberType == UBMT_RDG_TEXTURE_NON_PIXEL_SRV || MemberType == UBMT_RDG_BUFFER_SRV;
22 }
23
24 bool IsUAV() const
25 {
26 return MemberType == UBMT_RDG_TEXTURE_UAV || MemberType == UBMT_RDG_BUFFER_UAV;
27 }
28
29 bool IsView() const
30 {
31 return IsSRV() || IsUAV();
32 }
33
34 bool IsTexture() const
35 {
36 return
37 MemberType == UBMT_RDG_TEXTURE ||
38 MemberType == UBMT_RDG_TEXTURE_ACCESS;
39 }
40
41 bool IsTextureAccess() const
42 {
43 return MemberType == UBMT_RDG_TEXTURE_ACCESS;
44 }
45
47 {
48 return MemberType == UBMT_RDG_TEXTURE_ACCESS_ARRAY;
49 }
50
51 bool IsBuffer() const
52 {
53 return MemberType == UBMT_RDG_BUFFER_ACCESS;
54 }
55
56 bool IsBufferAccess() const
57 {
58 return MemberType == UBMT_RDG_BUFFER_ACCESS;
59 }
60
62 {
63 return MemberType == UBMT_RDG_BUFFER_ACCESS_ARRAY;
64 }
65
67 {
69 }
70
71 bool IsUniformBuffer() const
72 {
73 return MemberType == UBMT_RDG_UNIFORM_BUFFER;
74 }
75
76 bool IsViewableResource() const
77 {
78 return IsTexture() || IsBuffer();
79 }
80
82 {
83 return MemberType == UBMT_RENDER_TARGET_BINDING_SLOTS;
84 }
85
87 {
88 return MemberType;
89 }
90
96
102
108
110 {
111 check(IsView());
112 return *GetAs<FRDGViewRef>();
113 }
114
120
126
128 {
129 check(IsTexture());
130 return *GetAs<FRDGTextureRef>();
131 }
132
134 {
135 check(MemberType == UBMT_RDG_TEXTURE_ACCESS);
136 return *GetAs<FRDGTextureAccess>();
137 }
138
144
146 {
147 check(IsBuffer());
148 return *GetAs<FRDGBufferRef>();
149 }
150
152 {
153 check(MemberType == UBMT_RDG_BUFFER_ACCESS);
154 return *GetAs<FRDGBufferAccess>();
155 }
156
162
164 {
165 check(MemberType == UBMT_RDG_TEXTURE_SRV || MemberType == UBMT_RDG_TEXTURE_NON_PIXEL_SRV);
166 return *GetAs<FRDGTextureSRVRef>();
167 }
168
170 {
171 check(MemberType == UBMT_RDG_BUFFER_SRV);
172 return *GetAs<FRDGBufferSRVRef>();
173 }
174
176 {
177 check(MemberType == UBMT_RDG_TEXTURE_UAV);
178 return *GetAs<FRDGTextureUAVRef>();
179 }
180
182 {
183 check(MemberType == UBMT_RDG_BUFFER_UAV);
184 return *GetAs<FRDGBufferUAVRef>();
185 }
186
192
193private:
195 : MemberType(InMemberType)
196 , MemberPtr(InMemberPtr)
197 {}
198
199 template <typename T>
200 T* GetAs() const
201 {
202 return reinterpret_cast<T*>(MemberPtr);
203 }
204
205 const EUniformBufferBaseType MemberType = UBMT_INVALID;
206 void* const MemberPtr = nullptr;
207
209};
210
213{
214public:
215 template <typename ParameterStructType>
217 : Contents(reinterpret_cast<const uint8*>(Parameters))
219 , Metadata(InParameterMetadata)
220 {}
221
223 : Contents(reinterpret_cast<const uint8*>(InContents))
224 , Layout(InLayout)
225 {
226 checkf(Contents && Layout, TEXT("Pass parameter struct created with null inputs."));
227 }
228
230 const uint8* GetContents() const { return Contents; }
231
233 const FRHIUniformBufferLayout& GetLayout() const { return *Layout; }
234 const FRHIUniformBufferLayout* GetLayoutPtr() const { return Layout; }
235
236 const FShaderParametersMetadata* GetMetadata() const { return Metadata; }
237
239 inline bool HasRenderTargets() const { return Layout->HasRenderTargets(); }
240 inline bool HasExternalOutputs() const { return Layout->HasExternalOutputs(); }
241 inline bool HasStaticSlot() const { return Layout->HasStaticSlot(); }
242
244 uint32 GetBufferParameterCount() const { return Layout->GraphBuffers.Num(); }
245
247 uint32 GetTextureParameterCount() const { return Layout->GraphTextures.Num(); }
248
251
254 {
256 return *reinterpret_cast<const FRenderTargetBindingSlots*>(Contents + Layout->RenderTargetsOffset);
257 }
258
263 template <typename FunctionType>
264 void Enumerate(FunctionType Function) const;
265
267 template <typename FunctionType>
268 void EnumerateTextures(FunctionType Function) const;
269
271 template <typename FunctionType>
272 void EnumerateBuffers(FunctionType Function) const;
273
275 template <typename FunctionType>
276 void EnumerateUniformBuffers(FunctionType Function) const;
277
280
283
285 static void ClearUniformBuffers(void* Contents, const FRHIUniformBufferLayout* Layout);
286
287private:
288 FRDGParameter GetParameterInternal(TArrayView<const FRHIUniformBufferResource> Parameters, uint32 ParameterIndex) const
289 {
290 checkf(ParameterIndex < static_cast<uint32>(Parameters.Num()), TEXT("Attempted to access RDG pass parameter outside of index for Layout '%s'"), *Layout->GetDebugName());
291 const EUniformBufferBaseType MemberType = Parameters[ParameterIndex].MemberType;
292 const uint16 MemberOffset = Parameters[ParameterIndex].MemberOffset;
293 return FRDGParameter(MemberType, const_cast<uint8*>(Contents + MemberOffset));
294 }
295
296 const uint8* Contents;
298 const FShaderParametersMetadata* Metadata = nullptr;
299
300 friend class FRDGPass;
301};
302
303template <typename ParameterStructType>
305 : public FRDGParameterStruct
306{
307public:
309 : FRDGParameterStruct(Parameters, &ParameterStructType::FTypeInfo::GetStructMetadata()->GetLayout())
310 {}
311
314 {
315 return reinterpret_cast<const ParameterStructType*>(FRDGParameterStruct::GetContents());
316 }
317
319 {
320 return GetContents();
321 }
322};
323
329template <typename TParameterStruct>
330inline static FRHIRenderPassInfo GetRenderPassInfo(TParameterStruct* Parameters)
331{
332 return FRDGParameterStruct(Parameters, TParameterStruct::FTypeInfo::GetStructMetadata()).GetRenderPassInfo();
333}
334
335template <typename TParameterStruct>
336inline static bool HasRenderPassInfo(TParameterStruct* Parameters)
337{
338 return FRDGParameterStruct(Parameters, TParameterStruct::FTypeInfo::GetStructMetadata()).HasRenderTargets();
339}
340
342template <typename TParameterStruct>
343inline static FUniformBufferStaticBindings GetStaticUniformBuffers(TParameterStruct* Parameters)
344{
345 return FRDGParameterStruct(Parameters, TParameterStruct::FTypeInfo::GetStructMetadata()).GetStaticUniformBuffers();
346}
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define TEXT(x)
Definition Platform.h:1272
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EUniformBufferBaseType
Definition RHIDefinitions.h:634
@ UBMT_RDG_BUFFER_UAV
Definition RHIDefinitions.h:662
@ UBMT_RENDER_TARGET_BINDING_SLOTS
Definition RHIDefinitions.h:675
@ UBMT_RDG_UNIFORM_BUFFER
Definition RHIDefinitions.h:663
@ UBMT_RDG_TEXTURE_NON_PIXEL_SRV
Definition RHIDefinitions.h:657
@ UBMT_RDG_BUFFER_ACCESS
Definition RHIDefinitions.h:659
@ UBMT_RDG_TEXTURE
Definition RHIDefinitions.h:653
@ UBMT_RDG_BUFFER_ACCESS_ARRAY
Definition RHIDefinitions.h:660
@ UBMT_RDG_TEXTURE_SRV
Definition RHIDefinitions.h:656
@ UBMT_RDG_BUFFER_SRV
Definition RHIDefinitions.h:661
@ UBMT_INVALID
Definition RHIDefinitions.h:635
@ UBMT_RDG_TEXTURE_ACCESS_ARRAY
Definition RHIDefinitions.h:655
@ UBMT_RDG_TEXTURE_ACCESS
Definition RHIDefinitions.h:654
@ UBMT_RDG_TEXTURE_UAV
Definition RHIDefinitions.h:658
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 ShaderParameterMacros.h:367
Definition RenderGraphResources.h:1426
Definition RenderGraphResources.h:1452
Definition RenderGraphResources.h:1321
Definition RenderGraphParameter.h:213
void EnumerateBuffers(FunctionType Function) const
Definition RenderGraphParameters.inl:34
uint32 GetBufferParameterCount() const
Definition RenderGraphParameter.h:244
uint32 GetTextureParameterCount() const
Definition RenderGraphParameter.h:247
const FRHIUniformBufferLayout * GetLayoutPtr() const
Definition RenderGraphParameter.h:234
const FShaderParametersMetadata * GetMetadata() const
Definition RenderGraphParameter.h:236
bool HasRenderTargets() const
Definition RenderGraphParameter.h:239
void EnumerateTextures(FunctionType Function) const
Definition RenderGraphParameters.inl:20
FRDGParameterStruct(const ParameterStructType *Parameters, const FShaderParametersMetadata *InParameterMetadata)
Definition RenderGraphParameter.h:216
const FRHIUniformBufferLayout & GetLayout() const
Definition RenderGraphParameter.h:233
void EnumerateUniformBuffers(FunctionType Function) const
Definition RenderGraphParameters.inl:48
bool HasExternalOutputs() const
Definition RenderGraphParameter.h:240
void Enumerate(FunctionType Function) const
Definition RenderGraphParameters.inl:6
static void ClearUniformBuffers(void *Contents, const FRHIUniformBufferLayout *Layout)
Definition RenderGraphParameters.inl:61
const uint8 * GetContents() const
Definition RenderGraphParameter.h:230
bool HasStaticSlot() const
Definition RenderGraphParameter.h:241
FRDGParameterStruct(const void *InContents, const FRHIUniformBufferLayout *InLayout)
Definition RenderGraphParameter.h:222
RENDERCORE_API FRHIRenderPassInfo GetRenderPassInfo() const
Definition RenderGraphPass.cpp:35
uint32 GetUniformBufferParameterCount() const
Definition RenderGraphParameter.h:250
RENDERCORE_API FUniformBufferStaticBindings GetStaticUniformBuffers() const
Definition RenderGraphPass.cpp:9
const FRenderTargetBindingSlots & GetRenderTargets() const
Definition RenderGraphParameter.h:253
Definition RenderGraphParameter.h:10
bool IsBufferAccess() const
Definition RenderGraphParameter.h:56
bool IsTexture() const
Definition RenderGraphParameter.h:34
FRDGBufferAccess GetAsBufferAccess() const
Definition RenderGraphParameter.h:151
const FRDGTextureAccessArray & GetAsTextureAccessArray() const
Definition RenderGraphParameter.h:139
FRDGTextureRef GetAsTexture() const
Definition RenderGraphParameter.h:127
bool IsUniformBuffer() const
Definition RenderGraphParameter.h:71
bool IsViewableResource() const
Definition RenderGraphParameter.h:76
bool IsTextureAccess() const
Definition RenderGraphParameter.h:41
bool IsUAV() const
Definition RenderGraphParameter.h:24
FRDGBufferUAVRef GetAsBufferUAV() const
Definition RenderGraphParameter.h:181
FRDGViewableResource * GetAsViewableResource() const
Definition RenderGraphParameter.h:103
FRDGParameter()=default
FRDGUnorderedAccessViewRef GetAsUAV() const
Definition RenderGraphParameter.h:121
bool IsResource() const
Definition RenderGraphParameter.h:14
bool IsView() const
Definition RenderGraphParameter.h:29
FRDGBufferSRVRef GetAsBufferSRV() const
Definition RenderGraphParameter.h:169
FRDGTextureUAVRef GetAsTextureUAV() const
Definition RenderGraphParameter.h:175
FRDGUniformBufferBinding GetAsUniformBuffer() const
Definition RenderGraphParameter.h:97
bool IsBuffer() const
Definition RenderGraphParameter.h:51
bool IsBufferAccessArray() const
Definition RenderGraphParameter.h:61
FRDGResourceRef GetAsResource() const
Definition RenderGraphParameter.h:91
FRDGBufferRef GetAsBuffer() const
Definition RenderGraphParameter.h:145
FRDGViewRef GetAsView() const
Definition RenderGraphParameter.h:109
FRDGShaderResourceViewRef GetAsSRV() const
Definition RenderGraphParameter.h:115
bool IsTextureAccessArray() const
Definition RenderGraphParameter.h:46
FRDGTextureAccess GetAsTextureAccess() const
Definition RenderGraphParameter.h:133
EUniformBufferBaseType GetType() const
Definition RenderGraphParameter.h:86
bool IsResourceAccessArray() const
Definition RenderGraphParameter.h:66
const FRenderTargetBindingSlots & GetAsRenderTargetBindingSlots() const
Definition RenderGraphParameter.h:187
const FRDGBufferAccessArray & GetAsBufferAccessArray() const
Definition RenderGraphParameter.h:157
bool IsSRV() const
Definition RenderGraphParameter.h:19
FRDGTextureSRVRef GetAsTextureSRV() const
Definition RenderGraphParameter.h:163
bool IsRenderTargetBindingSlots() const
Definition RenderGraphParameter.h:81
Definition RenderGraphPass.h:217
Definition RenderGraphResources.h:131
Definition RenderGraphResources.h:698
Definition ShaderParameterMacros.h:430
Definition RenderGraphResources.h:839
Definition RenderGraphResources.h:905
Definition RenderGraphResources.h:571
Definition ShaderParameterMacros.h:273
Definition RenderGraphResources.h:721
Definition RenderGraphResources.h:496
Definition RenderGraphResources.h:291
Definition ShaderParameterMetadata.h:136
Definition RHIContext.h:49
Definition ArrayView.h:139
UE_FORCEINLINE_HINT constexpr SizeType Num() const
Definition ArrayView.h:380
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition RenderGraphParameter.h:306
const ParameterStructType * GetContents() const
Definition RenderGraphParameter.h:313
const ParameterStructType * operator->() const
Definition RenderGraphParameter.h:318
TRDGParameterStruct(ParameterStructType *Parameters)
Definition RenderGraphParameter.h:308
Definition ShaderParameterMacros.h:509
Definition RHIResources.h:5248
Definition RHIResources.h:1150
bool HasRenderTargets() const
Definition RHIResources.h:1166
const FString & GetDebugName() const
Definition RHIResources.h:1155
const TArray< FRHIUniformBufferResource > GraphTextures
Definition RHIResources.h:1190
bool HasExternalOutputs() const
Definition RHIResources.h:1171
const TArray< FRHIUniformBufferResource > GraphUniformBuffers
Definition RHIResources.h:1196
bool HasStaticSlot() const
Definition RHIResources.h:1176
const TArray< FRHIUniformBufferResource > GraphBuffers
Definition RHIResources.h:1193
const uint16 RenderTargetsOffset
Definition RHIResources.h:1207
Definition ShaderParameterMacros.h:770