UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ShaderParameterMetadataBuilder.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "CoreMinimal.h"
7#include "HAL/Platform.h"
8#include "RHI.h"
9#include "RHIDefinitions.h"
13
15{
16public:
18
19 explicit FShaderParametersMetadataBuilder(const FShaderParametersMetadata* RootParametersMetadata)
20 {
21 if (RootParametersMetadata)
22 {
23 Members = RootParametersMetadata->GetMembers();
24 NextMemberOffset = RootParametersMetadata->GetSize();
25 }
26 }
27
28 template<typename T>
30 const TCHAR* Name,
32 )
33 {
35
36 NextMemberOffset = Align(NextMemberOffset, TParamTypeInfo::Alignment);
37
38 Members.Emplace(
39 Name,
40 TEXT(""),
42 NextMemberOffset,
43 TParamTypeInfo::BaseType,
44 Precision,
45 TParamTypeInfo::NumRows,
46 TParamTypeInfo::NumColumns,
47 TParamTypeInfo::NumElements,
48 TParamTypeInfo::GetStructMetadata()
49 );
50
51 NextMemberOffset += sizeof(typename TParamTypeInfo::TAlignedType);
52 }
53
54 template<typename T>
56 const TCHAR* Name,
57 int32 NumElements,
59 )
60 {
62
63 NextMemberOffset = Align(NextMemberOffset, SHADER_PARAMETER_ARRAY_ELEMENT_ALIGNMENT);
64
65 Members.Emplace(
66 Name,
67 TEXT(""),
69 NextMemberOffset,
70 TParamTypeInfo::BaseType,
71 Precision,
72 TParamTypeInfo::NumRows,
73 TParamTypeInfo::NumColumns,
74 NumElements,
75 TParamTypeInfo::GetStructMetadata()
76 );
77
78 NextMemberOffset += sizeof(typename TParamTypeInfo::TAlignedType) * NumElements;
79 }
80
81 template<typename T>
89
91 const TCHAR* Name,
94 );
95
96 template<typename T>
103
107 );
108
109 template<typename T>
111 const TCHAR* Name,
113 )
114 {
116
117 NextMemberOffset = Align(NextMemberOffset, TParamTypeInfo::Alignment);
118 const uint32 ThisMemberOffset = NextMemberOffset;
119
120 Members.Emplace(
121 Name,
122 TEXT(""),
123 __LINE__,
124 NextMemberOffset,
126 Precision,
127 TParamTypeInfo::NumRows,
128 TParamTypeInfo::NumColumns,
129 TParamTypeInfo::NumElements,
130 TParamTypeInfo::GetStructMetadata()
131 );
132
133 NextMemberOffset += sizeof(typename TParamTypeInfo::TAlignedType);
134 return ThisMemberOffset;
135 }
136
138 const TCHAR* Name,
141 );
142
144 const TCHAR* Name,
145 const TCHAR* ShaderType,
147 );
148
150 const TCHAR* Name,
151 const TCHAR* ShaderType,
153 );
154
156 const TCHAR* Name,
157 const TCHAR* ShaderType,
159 );
160
162 const TCHAR* Name,
163 const TCHAR* ShaderType,
165 );
166
168 const TCHAR* Name,
169 const TCHAR* ShaderType,
171 );
172
174 const TCHAR* Name,
175 const TCHAR* ShaderType,
177 );
178
180 const TCHAR* Name,
181 const TCHAR* ShaderType,
183 );
184
186 const TCHAR* Name = TEXT("RenderTargets"),
187 const TCHAR* ShaderType = TEXT(""),
189 );
190
192 {
193 NextMemberOffset = Align(NextMemberOffset, SHADER_PARAMETER_STRUCT_ALIGNMENT);
194 }
195
196 uint32 GetNextMemberOffset() const { return NextMemberOffset; }
197
201 );
202
206 const TCHAR* InLayoutName,
207 const TCHAR* InStructTypeName,
209 const TCHAR* InStaticSlotName,
210 const ANSICHAR* InFileName,
211 const int32 InFileLine,
212 bool bForceCompleteInitialization = false,
215 );
216
217private:
219 uint32 NextMemberOffset = 0;
220};
constexpr T Align(T Val, uint64 Alignment)
Definition AlignmentTemplates.h:18
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define SHADER_PARAMETER_ARRAY_ELEMENT_ALIGNMENT
Definition RHIDefinitions.h:28
#define SHADER_PARAMETER_STRUCT_ALIGNMENT
Definition RHIDefinitions.h:25
@ UBMT_NESTED_STRUCT
Definition RHIDefinitions.h:666
EUniformBufferBindingFlags
Definition RHIDefinitions.h:686
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ShaderParameterMetadataBuilder.h:15
RENDERCORE_API void AddRDGBufferSRV(const TCHAR *Name, const TCHAR *ShaderType, EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.cpp:126
void AddReferencedStruct(const TCHAR *Name, EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.h:82
uint32 GetNextMemberOffset() const
Definition ShaderParameterMetadataBuilder.h:196
RENDERCORE_API void AddRDGTexture(const TCHAR *Name, const TCHAR *ShaderType, EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.cpp:197
void AlignNextMemberToStruct()
Definition ShaderParameterMetadataBuilder.h:191
FShaderParametersMetadataBuilder(const FShaderParametersMetadata *RootParametersMetadata)
Definition ShaderParameterMetadataBuilder.h:19
void AddParam(const TCHAR *Name, EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.h:29
FShaderParametersMetadataBuilder()
Definition ShaderParameterMetadataBuilder.h:17
uint32 AddNestedStruct(const TCHAR *Name, EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.h:110
RENDERCORE_API void AddRDGBufferUAV(const TCHAR *Name, const TCHAR *ShaderType, EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.cpp:150
void AddParamArray(const TCHAR *Name, int32 NumElements, EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.h:55
RENDERCORE_API void AddSampler(const TCHAR *Name, const TCHAR *ShaderType, EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.cpp:221
RENDERCORE_API void AddRenderTargetBindingSlots(const TCHAR *Name=TEXT("RenderTargets"), const TCHAR *ShaderType=TEXT(""), EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.cpp:241
RENDERCORE_API void AddBufferUAV(const TCHAR *Name, const TCHAR *ShaderType, EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.cpp:102
RENDERCORE_API void AddBufferSRV(const TCHAR *Name, const TCHAR *ShaderType, EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.cpp:78
RENDERCORE_API void AddTexture(const TCHAR *Name, const TCHAR *ShaderType, EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.cpp:174
void AddIncludedStruct(EShaderPrecisionModifier::Type Precision=EShaderPrecisionModifier::Float)
Definition ShaderParameterMetadataBuilder.h:97
Definition ShaderParameterMetadata.h:136
EUseCase
Definition ShaderParameterMetadata.h:140
const TArray< FMember > & GetMembers() const
Definition ShaderParameterMetadata.h:383
EUsageFlags
Definition ShaderParameterMetadata.h:153
uint32 GetSize() const
Definition ShaderParameterMetadata.h:368
Definition Array.h:670
UE_FORCEINLINE_HINT SizeType Emplace(ArgsType &&... Args)
Definition Array.h:2561
Type
Definition ShaderParameterMetadata.h:38
@ Float
Definition ShaderParameterMetadata.h:39
Definition RHIUniformBufferLayoutInitializer.h:41
Definition ShaderParameterMacros.h:1347
Definition ShaderParameterMacros.h:895