UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ShaderParameters.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 ShaderParameters.h: Shader parameter definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "Containers/Map.h"
11#include "CoreMinimal.h"
12#include "HAL/Platform.h"
14#include "RHI.h"
15#include "RHICommandList.h"
16#include "RHIDefinitions.h"
19
22class FRHITexture;
26struct FRWBuffer;
30
31enum class EShaderParameterType : uint8;
33
36
37#if WITH_EDITOR
38namespace UE::ShaderParameters
39{
43}
44#endif
45
47{
48 // no shader error if the parameter is not used
50 // shader error if the parameter is not used
52};
53
56{
58public:
60 : BufferIndex(0)
61 , BaseIndex(0)
62 , NumBytes(0)
63 {}
64
65 RENDERCORE_API void Bind(const FShaderParameterMap& ParameterMap,const TCHAR* ParameterName, EShaderParameterFlags Flags = SPF_Optional);
67 inline bool IsBound() const { return NumBytes > 0; }
68
69 inline bool IsInitialized() const
70 {
71 return true;
72 }
73
74 uint32 GetBufferIndex() const { return BufferIndex; }
75 uint32 GetBaseIndex() const { return BaseIndex; }
76 uint32 GetNumBytes() const { return NumBytes; }
77
78private:
79 LAYOUT_FIELD(uint16, BufferIndex);
80 LAYOUT_FIELD(uint16, BaseIndex);
81 // 0 if the parameter wasn't bound
82 LAYOUT_FIELD(uint16, NumBytes);
83};
84
87{
89public:
91
92 RENDERCORE_API void Bind(const FShaderParameterMap& ParameterMap,const TCHAR* ParameterName,EShaderParameterFlags Flags = SPF_Optional);
94
95 inline bool IsBound() const { return NumResources > 0; }
96 inline bool IsInitialized() const { return true; }
97
98 inline uint32 GetBaseIndex() const { return BaseIndex; }
99 inline uint32 GetNumResources() const { return NumResources; }
100 inline EShaderParameterType GetType() const { return Type; }
101
102private:
103 LAYOUT_FIELD_INITIALIZED(uint16, BaseIndex, 0);
104 LAYOUT_FIELD_INITIALIZED(uint8, NumResources, 0);
106};
107
109{
111public:
113 : BaseIndex(0xffff)
114 {}
115
116#if WITH_EDITOR
117 static RENDERCORE_API void ModifyCompilationEnvironment(const TCHAR* ParameterName,const FShaderParametersMetadata& Struct,EShaderPlatform Platform,FShaderCompilerEnvironment& OutEnvironment);
118#endif // WITH_EDITOR
119
120 RENDERCORE_API void Bind(const FShaderParameterMap& ParameterMap,const TCHAR* ParameterName,EShaderParameterFlags Flags = SPF_Optional);
121
123 {
124 P.Serialize(Ar);
125 return Ar;
126 }
127
128 inline bool IsBound() const { return BaseIndex != 0xffff; }
129
131 {
132 Ar << BaseIndex;
133 }
134
135 inline bool IsInitialized() const
136 {
137 return true;
138 }
139 uint32 GetBaseIndex() const { ensure(IsBound()); return BaseIndex; }
140
141private:
142 LAYOUT_FIELD(uint16, BaseIndex);
143};
144
146template<typename TBufferStruct>
148{
149public:
150#if WITH_EDITOR
151 static void ModifyCompilationEnvironment(const TCHAR* ParameterName,EShaderPlatform Platform, FShaderCompilerEnvironment& OutEnvironment)
152 {
153 FShaderUniformBufferParameter::ModifyCompilationEnvironment(ParameterName,TBufferStruct::StaticStruct,Platform,OutEnvironment);
154 }
155#endif // WITH_EDITOR
156
158 {
159 P.Serialize(Ar);
160 return Ar;
161 }
162};
163
166{
168public:
170
171 RENDERCORE_API void Bind(const FShaderParameterMap& ParameterMap, const TCHAR* ParameterName);
173
174 inline bool IsBound() const { return bIsBound != 0; }
175 inline bool IsInitialized() const { return true; }
176
177private:
178 LAYOUT_FIELD_INITIALIZED(uint8, bIsBound, 0);
179};
180
181#if RHI_RAYTRACING
182
183struct UE_DEPRECATED(5.5, "Use FRHIBatchedShaderParameters and SetShaderParameters() instead.") FRayTracingShaderBindingsWriter : FRayTracingShaderBindings
184{
186
187 void AddBindlessParameter(const FRHIShaderParameterResource& Parameter)
188 {
189 BindlessParameters.Add(Parameter);
190 }
191
192 void Set(const FShaderResourceParameter& Param, FRHITexture* Value)
193 {
194 if (Param.IsBound())
195 {
196 checkf(Param.GetNumResources() == 1, TEXT("Resource array binding is not implemented"));
197 Textures[Param.GetBaseIndex()] = Value;
198 }
199 }
200
202 {
203 if (Param.IsBound())
204 {
205 checkf(Param.GetNumResources() == 1, TEXT("Resource array binding is not implemented"));
206 SRVs[Param.GetBaseIndex()] = Value;
207 }
208 }
209
211 {
212 if (Param.IsBound())
213 {
215 }
216 }
217
219 {
220 if (Param.IsBound())
221 {
222 checkf(Param.GetNumResources() == 1, TEXT("Resource array binding is not implemented"));
223 UAVs[Param.GetBaseIndex()] = Value;
224 }
225 }
226
228 {
229 if (Param.IsBound())
230 {
231 checkf(Param.GetNumResources() == 1, TEXT("Resource array binding is not implemented"));
232 Samplers[Param.GetBaseIndex()] = Value;
233 }
234 }
235
236 void SetTexture(uint16 BaseIndex, FRHITexture* Value)
237 {
238 checkSlow(BaseIndex < UE_ARRAY_COUNT(Textures));
239 Textures[BaseIndex] = Value;
240 }
241
242 void SetSRV(uint16 BaseIndex, FRHIShaderResourceView* Value)
243 {
244 checkSlow(BaseIndex < UE_ARRAY_COUNT(SRVs));
245 SRVs[BaseIndex] = Value;
246 }
247
248 void SetSampler(uint16 BaseIndex, FRHISamplerState* Value)
249 {
250 checkSlow(BaseIndex < UE_ARRAY_COUNT(Samplers));
251 Samplers[BaseIndex] = Value;
252 }
253
254 void SetUAV(uint16 BaseIndex, FRHIUnorderedAccessView* Value)
255 {
256 checkSlow(BaseIndex < UE_ARRAY_COUNT(UAVs));
257 UAVs[BaseIndex] = Value;
258 }
259
260 void SetUniformBuffer(uint16 BaseIndex, FRHIUniformBuffer* Value)
261 {
263 UniformBuffers[BaseIndex] = Value;
264 }
265};
266#endif //RHI_RAYTRACING
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define LAYOUT_FIELD(T, Name,...)
Definition MemoryLayout.h:471
#define DECLARE_EXPORTED_TYPE_LAYOUT(T, RequiredAPI, Interface)
Definition MemoryLayout.h:559
#define LAYOUT_FIELD_INITIALIZED(T, Name, Value,...)
Definition MemoryLayout.h:473
#define DECLARE_INTRINSIC_TYPE_LAYOUT(T)
Definition MemoryLayout.h:760
EShaderCodeResourceBindingType
Definition RHIDefinitions.h:553
EShaderPlatform
Definition RHIShaderPlatform.h:11
EShaderParameterType
Definition ShaderCore.h:248
EShaderParameterFlags
Definition ShaderParameters.h:47
@ SPF_Optional
Definition ShaderParameters.h:49
@ SPF_Mandatory
Definition ShaderParameters.h:51
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
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 Archive.h:1208
Definition MemoryImage.h:49
Definition RHIResources.h:1018
Definition RHIResources.h:671
Definition RHIResources.h:3304
Definition RHIResources.h:2153
Definition RHIResources.h:1232
Definition RHIResources.h:3294
Definition ShaderCore.h:323
Definition ShaderParameters.h:56
uint32 GetBufferIndex() const
Definition ShaderParameters.h:74
uint32 GetBaseIndex() const
Definition ShaderParameters.h:75
uint32 GetNumBytes() const
Definition ShaderParameters.h:76
bool IsBound() const
Definition ShaderParameters.h:67
bool IsInitialized() const
Definition ShaderParameters.h:69
RENDERCORE_API void Bind(const FShaderParameterMap &ParameterMap, const TCHAR *ParameterName, EShaderParameterFlags Flags=SPF_Optional)
Definition ShaderParameters.cpp:39
friend RENDERCORE_API FArchive & operator<<(FArchive &Ar, FShaderParameter &P)
Definition ShaderParameters.cpp:47
FShaderParameter()
Definition ShaderParameters.h:59
Definition ShaderParameterMetadata.h:136
Definition ShaderParameters.h:87
EShaderParameterType GetType() const
Definition ShaderParameters.h:100
RENDERCORE_API void Bind(const FShaderParameterMap &ParameterMap, const TCHAR *ParameterName, EShaderParameterFlags Flags=SPF_Optional)
Definition ShaderParameters.cpp:53
bool IsBound() const
Definition ShaderParameters.h:95
bool IsInitialized() const
Definition ShaderParameters.h:96
uint32 GetNumResources() const
Definition ShaderParameters.h:99
uint32 GetBaseIndex() const
Definition ShaderParameters.h:98
friend RENDERCORE_API FArchive & operator<<(FArchive &Ar, FShaderResourceParameter &P)
Definition ShaderParameters.cpp:67
FShaderResourceParameter()=default
Definition ShaderParameters.h:166
bool IsBound() const
Definition ShaderParameters.h:174
friend RENDERCORE_API FArchive & operator<<(FArchive &Ar, FShaderUniformBufferMemberParameter &P)
Definition ShaderParameters.cpp:77
RENDERCORE_API void Bind(const FShaderParameterMap &ParameterMap, const TCHAR *ParameterName)
Definition ShaderParameters.cpp:72
bool IsInitialized() const
Definition ShaderParameters.h:175
Definition ShaderParameters.h:109
friend FArchive & operator<<(FArchive &Ar, FShaderUniformBufferParameter &P)
Definition ShaderParameters.h:122
bool IsBound() const
Definition ShaderParameters.h:128
RENDERCORE_API void Bind(const FShaderParameterMap &ParameterMap, const TCHAR *ParameterName, EShaderParameterFlags Flags=SPF_Optional)
Definition ShaderParameters.cpp:107
FShaderUniformBufferParameter()
Definition ShaderParameters.h:112
void Serialize(FArchive &Ar)
Definition ShaderParameters.h:130
bool IsInitialized() const
Definition ShaderParameters.h:135
uint32 GetBaseIndex() const
Definition ShaderParameters.h:139
Definition ShaderParameters.h:148
friend FArchive & operator<<(FArchive &Ar, TShaderUniformBufferParameter &P)
Definition ShaderParameters.h:157
Definition RHIShaderParameters.h:32
Definition RHIShaderBindingLayout.h:14
Definition RHIUtilities.h:423
Definition RHIUtilities.h:181
Definition RHICommandList.h:248
Definition ShaderCore.h:544