UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ShaderParameterParser.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "ShaderCore.h"
8
14
15enum class EShaderParameterType : uint8;
16
18{
19 None,
20 SRV,
21 UAV,
22 Sampler,
23};
24
26{
27 None = 0,
29 SupportsBindless = 1 << 1,
30 // "Vulkan" style
31 BindlessUsesArrays = 1 << 2,
32 // Some RHI Validation requires parameters to be parsed
33 AlwaysParseParams = 1 << 3,
34 // Replace loose data globals in bindless shaders
35 ReplaceGlobals = 1 << 4,
36};
38
39
41{
42public:
44 {
55
57 {}
58
61 {
62 checkf(false, TEXT("Platforms that support bindless must override GenerateBindlessAccess"));
63 return FString();
64 }
65
67 virtual FString ReplaceGlobal(FStringView FullDeclString, FStringView ParamName) const
68 {
69 checkf(false, TEXT("Platforms that support replacing globals must override ReplaceGlobal"));
70 return FString();
71 }
72
74 virtual FString GetStableConstantBufferRegisterString(EShaderFrequency ShaderFrequency) const
75 {
76 // Not required to be overridden
77 return FString();
78 }
79
84 };
85
87 {
88 public:
92 uint32 NumRows = 0u;
93 uint32 NumColumns = 0u;
94 uint32 MemberSize = 0u;
95
102 int32 ConstantBufferOffset = 0;
103
104 /* Returns whether the shader parameter has been found when parsing. */
105 bool IsFound() const
106 {
107 return !ParsedType.IsEmpty();
108 }
109
110 int32 ParsedPragmaLineOffset = 0;
111 int32 ParsedLineOffset = 0;
112
114 int32 ParsedCharOffsetStart = INDEX_NONE;
115 int32 ParsedCharOffsetEnd = INDEX_NONE;
116
117 EBindlessConversionType BindlessConversionType{};
118 EShaderParameterType ConstantBufferParameterType{};
119
120 bool bGloballyCoherent = false;
121 bool bIsBindable = false;
122
124
126 };
127
130
132
133 static constexpr const TCHAR* kBindlessSRVPrefix = TEXT("BindlessSRV_");
134 static constexpr const TCHAR* kBindlessUAVPrefix = TEXT("BindlessUAV_");
135 static constexpr const TCHAR* kBindlessSamplerPrefix = TEXT("BindlessSampler_");
136
137 // Prefix used to declare arrays of samplers/resources for bindless
138 static constexpr const TCHAR* kBindlessSRVArrayPrefix = TEXT("SRVDescriptorHeap_");
139 static constexpr const TCHAR* kBindlessUAVArrayPrefix = TEXT("UAVDescriptorHeap_");
140 static constexpr const TCHAR* kBindlessSamplerArrayPrefix = TEXT("SamplerDescriptorHeap_");
141
144 static RENDERCORE_API bool RemoveBindlessParameterPrefix(FString& InName);
146
151 );
152
154 const FParsedShaderParameter& FindParameterInfos(const FString& ParameterName) const
155 {
156 const FParsedShaderParameter* ShaderParameter = ParsedParameters.Find(ParameterName);
157 checkf(ShaderParameter != nullptr, TEXT("Missing shader parameter '%s'"), *ParameterName);
158 return *ShaderParameter;
159 }
160
161 const FParsedShaderParameter* FindParameterInfosUnsafe(const FString& ParameterName) const
162 {
163 return ParsedParameters.Find(ParameterName);
164 }
165
169 const FString& ShaderBindingName,
174
184
190
197
200 {
201 return ExtractFileAndLine(ParsedParameter.ParsedPragmaLineOffset, ParsedParameter.ParsedLineOffset, OutFile, OutLine);
202 }
203
204 bool DidModifyShader() const { return bModifiedShader; }
205
206protected:
208
211 const FShaderParametersMetadata* RootParametersStructure,
213 );
214
217 );
218
222 );
223
226 const FShaderParametersMetadata* RootParametersStructure,
227 EShaderFrequency ShaderFrequency,
229 );
230
232
237 RENDERCORE_API virtual FString GenerateBindlessParameterDeclaration(const FParsedShaderParameter& ParsedParameter) const;
238
240
242
244
245 bool bBindlessEnabled = false;
246
249
252
254 bool bModifiedShader = false;
255};
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr void EnumAddFlags(Enum &Flags, Enum FlagsToAdd)
Definition EnumClassFlags.h:91
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
EShaderFrequency
Definition RHIDefinitions.h:202
@ UBMT_INVALID
Definition RHIDefinitions.h:635
EShaderCodeResourceBindingType
Definition RHIDefinitions.h:553
EShaderParameterType
Definition ShaderCore.h:248
EShaderParameterParserConfigurationFlags
Definition ShaderParameterParser.h:26
EBindlessConversionType
Definition ShaderParameterParser.h:18
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ShaderCore.h:402
Definition ShaderParameterParser.h:41
TMap< FString, FParsedShaderParameter > ParsedParameters
Definition ShaderParameterParser.h:243
static RENDERCORE_API EShaderParameterType ParseAndRemoveBindlessParameterPrefix(FStringView &InName)
Definition ShaderParameterParser.cpp:214
void GetParameterFileAndLine(const FParsedShaderParameter &ParsedParameter, FString &OutFile, FString &OutLine) const
Definition ShaderParameterParser.h:199
RENDERCORE_API void ValidateShaderParameterType(const FShaderCompilerInput &CompilerInput, const FString &ShaderBindingName, int32 ReflectionOffset, int32 ReflectionSize, bool bPlatformSupportsPrecisionModifier, FShaderCompilerOutput &CompilerOutput) const
Definition ShaderParameterParser.cpp:1267
bool DidModifyShader() const
Definition ShaderParameterParser.h:204
virtual RENDERCORE_API ~FShaderParameterParser()
static constexpr const TCHAR * kBindlessSamplerArrayPrefix
Definition ShaderParameterParser.h:140
void ValidateShaderParameterTypes(const FShaderCompilerInput &CompilerInput, FShaderCompilerOutput &CompilerOutput) const
Definition ShaderParameterParser.h:191
FString OriginalParsedShader
Definition ShaderParameterParser.h:241
RENDERCORE_API bool ParseParameters(const FShaderParametersMetadata *RootParametersStructure, TArray< FShaderCompilerError > &OutErrors)
Definition ShaderParameterParser.cpp:264
bool bMovedLoosedParametersToRootConstantBuffer
Definition ShaderParameterParser.h:251
const FPlatformConfiguration & PlatformConfiguration
Definition ShaderParameterParser.h:239
RENDERCORE_API bool ParseAndModify(const FShaderCompilerInput &CompilerInput, TArray< FShaderCompilerError > &OutErrors, FString &PreprocessedShaderSource)
Definition ShaderParameterParser.cpp:1202
static RENDERCORE_API bool RemoveBindlessParameterPrefix(FString &InName)
Definition ShaderParameterParser.cpp:245
RENDERCORE_API bool MoveShaderParametersToRootConstantBuffer(const FShaderParametersMetadata *RootParametersStructure, EShaderFrequency ShaderFrequency, FString &PreprocessedShaderSource)
Definition ShaderParameterParser.cpp:1114
bool bNeedToMoveToRootConstantBuffer
Definition ShaderParameterParser.h:248
static constexpr const TCHAR * kBindlessSRVArrayPrefix
Definition ShaderParameterParser.h:138
RENDERCORE_API void ExtractFileAndLine(int32 PragamLineoffset, int32 LineOffset, FString &OutFile, FString &OutLine) const
Definition ShaderParameterParser.cpp:1458
static constexpr const TCHAR * kBindlessSamplerPrefix
Definition ShaderParameterParser.h:135
const FParsedShaderParameter * FindParameterInfosUnsafe(const FString &ParameterName) const
Definition ShaderParameterParser.h:161
FShaderParameterParser()=delete
bool bBindlessEnabled
Definition ShaderParameterParser.h:245
static constexpr const TCHAR * kBindlessUAVPrefix
Definition ShaderParameterParser.h:134
static constexpr const TCHAR * kBindlessSRVPrefix
Definition ShaderParameterParser.h:133
RENDERCORE_API void ValidateShaderParameterTypes(const FShaderCompilerInput &CompilerInput, bool bPlatformSupportsPrecisionModifier, FShaderCompilerOutput &CompilerOutput) const
Definition ShaderParameterParser.cpp:1399
virtual RENDERCORE_API FString GenerateBindlessParameterDeclaration(const FParsedShaderParameter &ParsedParameter) const
Definition ShaderParameterParser.cpp:938
bool bModifiedShader
Definition ShaderParameterParser.h:254
const FParsedShaderParameter & FindParameterInfos(const FString &ParameterName) const
Definition ShaderParameterParser.h:154
RENDERCORE_API void RemoveMovingParametersFromSource(FString &PreprocessedShaderSource)
Definition ShaderParameterParser.cpp:892
static RENDERCORE_API FStringView GetBindlessParameterPrefix(EShaderParameterType InShaderParameterType)
Definition ShaderParameterParser.cpp:252
RENDERCORE_API EShaderParameterType ParseParameterType(FStringView InType)
Definition ShaderParameterParser.cpp:188
void ValidateShaderParameterType(const FShaderCompilerInput &CompilerInput, const FString &ShaderBindingName, int32 ReflectionOffset, int32 ReflectionSize, FShaderCompilerOutput &CompilerOutput) const
Definition ShaderParameterParser.h:175
static constexpr const TCHAR * kBindlessUAVArrayPrefix
Definition ShaderParameterParser.h:139
RENDERCORE_API void ApplyBindlessModifications(FString &PreprocessedShaderSource)
Definition ShaderParameterParser.cpp:997
Definition ShaderParameterMetadata.h:136
Definition Array.h:670
Definition EnumAsByte.h:22
Definition UnrealString.h.inl:34
constexpr bool IsEmpty() const
Definition StringView.h:180
@ Invalid
Definition ShaderParameterMetadata.h:42
Definition ShaderCore.h:544
Definition ShaderCompilerCore.h:411
Definition ShaderCompilerCore.h:210
Definition ShaderCompilerCore.h:491
Definition ShaderParameterParser.h:87
FStringView ParsedArraySize
Definition ShaderParameterParser.h:99
FStringView ParsedName
Definition ShaderParameterParser.h:97
FStringView ParsedType
Definition ShaderParameterParser.h:98
bool IsFound() const
Definition ShaderParameterParser.h:105
Definition ShaderParameterParser.h:44
virtual ~FPlatformConfiguration()
Definition ShaderParameterParser.h:56
FPlatformConfiguration(FStringView InStableConstantBufferType, EShaderParameterParserConfigurationFlags InFlags=EShaderParameterParserConfigurationFlags::None)
Definition ShaderParameterParser.h:46
FStringView StableConstantBufferType
Definition ShaderParameterParser.h:82
virtual FString GetStableConstantBufferRegisterString(EShaderFrequency ShaderFrequency) const
Definition ShaderParameterParser.h:74
TConstArrayView< FStringView > ExtraUAVTypes
Definition ShaderParameterParser.h:81
virtual FString GenerateBindlessAccess(EBindlessConversionType BindlessType, FStringView FullTypeString, FStringView ArrayNameOverride, FStringView IndexString) const
Definition ShaderParameterParser.h:60
TConstArrayView< FStringView > ExtraSRVTypes
Definition ShaderParameterParser.h:80
virtual FString ReplaceGlobal(FStringView FullDeclString, FStringView ParamName) const
Definition ShaderParameterParser.h:67