UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SceneUniformBuffer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
9
10// Construct a shader parameter struct with the specified type at Obj.
11// The resulting struct must be valid for usage (i.e. all members initialized)
13template<typename TParameterStruct>
15
21{
22public:
23 using FMemberId = int;
24 struct FMemberInfo;
25 class FImpl;
26
27 // Must be called during static initialization
29 const TCHAR* Name,
31 // Used to set default values for this member if no value is set explicitly
32 FShaderParameterStructConstructor DefaultValueConstructor);
33};
34
36{
37public:
39
40 // Called at runtime
41 virtual void Commit() = 0;
42 static void CommitAll();
43
44 FString Name;
47
48protected:
50
51 // Called during static initialization
58
59private:
61};
62
63template<typename TMember>
86
87#define DECLARE_SCENE_UB_STRUCT(StructType, FieldName, PrefixKeywords) \
88 namespace SceneUB { \
89 PrefixKeywords extern TSceneUniformBufferMemberRegistration<StructType> FieldName; \
90 }
91
92#define IMPLEMENT_SCENE_UB_STRUCT(StructType, FieldName, DefaultValueFactoryType) \
93 TSceneUniformBufferMemberRegistration<StructType> SceneUB::FieldName { TEXT(#FieldName), DefaultValueFactoryType }
94
95
96DECLARE_UNIFORM_BUFFER_STRUCT(FSceneUniformParameters, RENDERER_API)
100MS_ALIGN(SHADER_PARAMETER_STRUCT_ALIGNMENT) class FSceneUniformParameters final
101{
102public:
103 struct FTypeInfo {
104 static constexpr int32 NumRows = 1;
105 static constexpr int32 NumColumns = 1;
106 static constexpr int32 NumElements = 0;
107 static constexpr int32 Alignment = SHADER_PARAMETER_STRUCT_ALIGNMENT;
108 static constexpr bool bIsStoredInConstantBuffer = true;
109 static constexpr const ANSICHAR* const FileName = UE_LOG_SOURCE_FILE(__FILE__);
110 static constexpr int32 FileLine = __LINE__;
111 using TAlignedType = FSceneUniformParameters;
112 static RENDERER_API const FShaderParametersMetadata* GetStructMetadata();
113 };
114
115 const void* GetContents() const
116 {
117 return Data;
118 }
119
120 FSceneUniformParameters();
121
122private:
123 friend class FSceneUniformBuffer;
125
126 // TODO: Decouple parameter struct and actual data, so the data can be allocated dynamically (variable size)
127 // This requires some work in buffer binding/parameter macros/RHI, as these all assume the data to be inline.
128 static constexpr size_t MaxSize = 4096;
129 uint8_t Data[MaxSize];
131
132
137{
138public:
141
143
149 template<typename TMember>
151 {
152 return Set(Registration.MemberId, &Value, TMember::FTypeInfo::GetStructMetadata()->GetSize());
153 }
154
159 template<typename TMember>
161 {
162 const void* Ptr = Get(Registration.MemberId, TMember::FTypeInfo::GetStructMetadata()->GetSize());
163 checkf(Ptr, TEXT("SceneUB::%s has not been set yet"), *Registration.Name);
164 return *reinterpret_cast<const TMember*>(Ptr);
165 }
166
171 template<typename TMember>
173 {
174 return *reinterpret_cast<const TMember*>(GetOrDefault(Registration.MemberId, TMember::FTypeInfo::GetStructMetadata()->GetSize(), GraphBuilder));
175 }
176
177 // Get and re-create the UB if the cached parameters are modified.
180
181#if !UE_BUILD_SHIPPING
183 {
184 FString ShaderType;
185 FString Name;
186 const void* Data;
187 };
189#endif
190
191private:
192 template<typename TMember>
195
201 RENDERER_API bool Set(const FMemberId MemberId, const void* Value, const int32 ValueSize);
202
207 RENDERER_API const void* Get(const FMemberId MemberId, const int32 ExpectedValueSize) const UE_LIFETIMEBOUND;
208
213 RENDERER_API const void* GetOrDefault(const FMemberId MemberId, const int32 ExpectedValueSize, FRDGBuilder& GraphBuilder) UE_LIFETIMEBOUND;
214
216
217 bool bAnyMemberDirty;
218 TBitArray<> MemberHasBeenSet;
220};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define GCC_ALIGN(n)
Definition AndroidPlatform.h:163
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_LIFETIMEBOUND
Definition Platform.h:812
#define TEXT(x)
Definition Platform.h:1272
#define MS_ALIGN(n)
Definition Platform.h:916
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 UE_LOG_SOURCE_FILE(File)
Definition LogMacros.h:114
#define SHADER_PARAMETER_STRUCT_ALIGNMENT
Definition RHIDefinitions.h:25
#define DECLARE_UNIFORM_BUFFER_STRUCT(StructTypeName, PrefixKeywords)
Definition ShaderParameterStructDeclaration.h:10
Definition RenderGraphBuilder.h:49
Definition RHIResources.h:1232
Definition SceneUniformBuffer.h:36
FShaderParameterStructConstructor DefaultValueConstructor
Definition SceneUniformBuffer.h:46
FMemberId MemberId
Definition SceneUniformBuffer.h:45
FSceneUniformBufferTypeRegistry::FMemberId FMemberId
Definition SceneUniformBuffer.h:38
FString Name
Definition SceneUniformBuffer.h:44
FSceneUniformBufferMemberRegistration(const TCHAR *Name)
Definition SceneUniformBuffer.h:52
static void CommitAll()
Definition SceneUniformBuffer.cpp:43
virtual ~FSceneUniformBufferMemberRegistration()=default
Definition SceneUniformBuffer.cpp:20
Definition SceneUniformBuffer.h:21
static RENDERER_API FMemberId RegisterMember(const TCHAR *Name, const FShaderParametersMetadata &StructMetadata, FShaderParameterStructConstructor DefaultValueConstructor)
Definition SceneUniformBuffer.cpp:28
int FMemberId
Definition SceneUniformBuffer.h:23
Definition SceneUniformBuffer.h:137
RENDERER_API FSceneUniformBuffer()
Definition SceneUniformBuffer.cpp:129
friend class FSceneUniformParameters
Definition SceneUniformBuffer.h:194
bool Set(const TSceneUniformBufferMemberRegistration< TMember > &Registration, const TMember &Value)
Definition SceneUniformBuffer.h:150
TArray< FDebugMemberInfo > GetDebugInfo() const
Definition SceneUniformBuffer.cpp:226
FSceneUniformBufferTypeRegistry::FMemberId FMemberId
Definition SceneUniformBuffer.h:139
RENDERER_API FRHIUniformBuffer * GetBufferRHI(FRDGBuilder &GraphBuilder)
Definition SceneUniformBuffer.cpp:218
RENDERER_API TRDGUniformBufferRef< FSceneUniformParameters > GetBuffer(FRDGBuilder &GraphBuilder)
Definition SceneUniformBuffer.cpp:190
const TMember & Get(const TSceneUniformBufferMemberRegistration< TMember > &Registration) const UE_LIFETIMEBOUND
Definition SceneUniformBuffer.h:160
const TMember & GetOrDefault(const TSceneUniformBufferMemberRegistration< TMember > &Registration, FRDGBuilder &GraphBuilder) const UE_LIFETIMEBOUND
Definition SceneUniformBuffer.h:172
Definition ShaderParameterMetadata.h:136
Definition Array.h:670
Definition RenderGraphResources.h:251
Definition SceneUniformBuffer.h:65
TSceneUniformBufferMemberRegistration(const TCHAR *Name, TShaderParameterStructConstructor< TMember > TemplatedDefaultValueConstructor)
Definition SceneUniformBuffer.h:67
void Commit() override
Definition SceneUniformBuffer.h:78
Definition SceneUniformBuffer.cpp:11
Definition SceneUniformBuffer.h:183
FString ShaderType
Definition SceneUniformBuffer.h:184
const void * Data
Definition SceneUniformBuffer.h:186
FString Name
Definition SceneUniformBuffer.h:185
Definition ShaderParameterMacros.h:1347