9#include "Containers/Array.h"
28template <
typename FParameterStruct>
50#define SHADER_USE_PARAMETER_STRUCT_INTERNAL(ShaderClass, ShaderParentClass, bShouldBindEverything) \
51 ShaderClass() = default; \
52 ShaderClass(const ShaderMetaType::CompiledShaderInitializerType& Initializer) \
53 : ShaderParentClass(Initializer) \
55 BindForLegacyShaderParameters<FParameters>(this, Initializer.PermutationId, Initializer.ParameterMap, bShouldBindEverything); \
58#define SHADER_ROOT_PARAMETERS_SIGNATURE() \
59 static inline const FShaderParametersMetadata* GetRootParametersMetadata() { return FParameters::FTypeInfo::GetStructMetadata(); }
62#define SHADER_USE_PARAMETER_STRUCT(ShaderClass, ShaderParentClass) \
63 SHADER_USE_PARAMETER_STRUCT_INTERNAL(ShaderClass, ShaderParentClass, true) \
64 SHADER_ROOT_PARAMETERS_SIGNATURE()
69#define SHADER_USE_PARAMETER_STRUCT_WITH_LEGACY_BASE(ShaderClass, ShaderParentClass) \
70 SHADER_USE_PARAMETER_STRUCT_INTERNAL(ShaderClass, ShaderParentClass, false)
75#define SHADER_USE_PARAMETER_STRUCT_MIXED(ShaderClass, ShaderParentClass) \
76 SHADER_USE_PARAMETER_STRUCT_INTERNAL(ShaderClass, ShaderParentClass, false) \
77 SHADER_ROOT_PARAMETERS_SIGNATURE()
79#define SHADER_USE_ROOT_PARAMETER_STRUCT(ShaderClass, ShaderParentClass) \
80 SHADER_ROOT_PARAMETERS_SIGNATURE() \
81 ShaderClass() = default; \
82 ShaderClass(const ShaderMetaType::CompiledShaderInitializerType& Initializer) \
83 : ShaderParentClass(Initializer) \
85 this->Bindings.BindForRootShaderParameters(this, Initializer.PermutationId, Initializer.ParameterMap); \
97 const uint8* MemberPtr = (
const uint8*)Contents + MemberOffset;
106 return *
reinterpret_cast<FRHIResource* const*
>(MemberPtr);
128template<
typename TShaderClass>
134template<
typename TParameterType>
139 if (Parameter.BaseType ==
UBMT_UAV ||
148template<
typename TParameterType>
153 if (Parameter.BaseType ==
UBMT_SRV ||
173template<
typename TShaderClass>
184template<
typename TShaderClass>
196template<
typename TRHICmdList,
typename TShaderClass>
199 if (RHICmdList.NeedsShaderUnbinds())
208template<
typename TRHICmdList,
typename TShaderClass>
211 if (RHICmdList.NeedsShaderUnbinds())
220template<
typename TRHICmdList,
typename TShaderClass>
223 if (RHICmdList.NeedsShaderUnbinds())
235 const void* ParametersData
238template<
typename TParameters>
251 const void* ParametersData);
253template<
typename TShaderClass>
258 const typename TShaderClass::FParameters& Parameters)
274template<
typename TShaderClass>
286 const void* ParametersData);
293 const void* ParametersData);
300 const void* ParametersData);
302template<
typename TRHICmdList,
typename TShaderClass,
typename TShaderRHI>
308 const typename TShaderClass::FParameters& Parameters)
317template<
typename TRHICmdList,
typename TShaderClass,
typename TShaderRHI>
335 const void* ParametersData);
343 const void* ParametersData);
346template<
typename TShaderClass>
353 checkf(
Shader->Bindings.Parameters.Num() == 0,
TEXT(
"Ray tracing shader should use SHADER_USE_ROOT_PARAMETER_STRUCT() to passdown the cbuffer layout to the shader compiler."));
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EUniformBufferBaseType
Definition RHIDefinitions.h:634
@ UBMT_SRV
Definition RHIDefinitions.h:648
@ UBMT_UAV
Definition RHIDefinitions.h:649
@ UBMT_RDG_BUFFER_UAV
Definition RHIDefinitions.h:662
@ UBMT_RDG_TEXTURE_NON_PIXEL_SRV
Definition RHIDefinitions.h:657
@ UBMT_RDG_TEXTURE_SRV
Definition RHIDefinitions.h:656
@ UBMT_RDG_BUFFER_SRV
Definition RHIDefinitions.h:661
@ UBMT_RDG_TEXTURE_UAV
Definition RHIDefinitions.h:658
bool IsRayTracingShaderFrequency(EShaderFrequency Frequency)
Definition RHIDefinitions.h:1679
bool IsShaderParameterTypeIgnoredByRHI(EUniformBufferBaseType BaseType)
Definition RHIDefinitions.h:1612
bool IsRDGResourceReferenceShaderParameterType(EUniformBufferBaseType BaseType)
Definition RHIDefinitions.h:1575
void CollectUAVsToUnset(FRHIBatchedShaderUnbinds &BatchedUnbinds, const TMemoryImageArray< TParameterType > &InParameters)
Definition ShaderParameterStruct.h:135
RENDERCORE_API void SetAllShaderParametersAsBindless(FRHIBatchedShaderParameters &BatchedParameters, const FShaderParametersMetadata *ParametersMetadata, const void *ParametersData)
Definition ShaderParameterStruct.cpp:746
RENDERCORE_API void SetShaderParameters(FRHIBatchedShaderParameters &BatchedParameters, const FShaderParameterBindings &Bindings, const FShaderParametersMetadata *ParametersMetadata, const void *ParametersData)
Definition ShaderParameterStruct.cpp:883
void UnsetShaderSRVs(FRHIBatchedShaderUnbinds &BatchedUnbinds, const FShaderParameterBindings &Bindings)
Definition ShaderParameterStruct.h:168
RENDERCORE_API void EmitNullShaderParameterFatalError(const TShaderRef< FShader > &Shader, const FShaderParametersMetadata *ParametersMetadata, uint16 MemberOffset)
Definition ShaderParameterStruct.cpp:467
void CollectSRVsToUnset(FRHIBatchedShaderUnbinds &BatchedUnbinds, const TMemoryImageArray< TParameterType > &InParameters)
Definition ShaderParameterStruct.h:149
void UnsetShaderUAVs(FRHIBatchedShaderUnbinds &BatchedUnbinds, const FShaderParameterBindings &Bindings)
Definition ShaderParameterStruct.h:163
void ValidateShaderParameterResourcesRHI(const void *Contents, const FRHIUniformBufferLayout &Layout)
Definition ShaderParameterStruct.h:114
FRHIResource * GetShaderParameterResourceRHI(const void *Contents, uint16 MemberOffset, EUniformBufferBaseType MemberType)
Definition ShaderParameterStruct.h:89
void ValidateShaderParameters(const TShaderRef< FShader > &Shader, const FShaderParametersMetadata *ParametersMetadata, const void *ParametersData)
Definition ShaderParameterStruct.h:125
void BindForLegacyShaderParameters(FShader *Shader, int32 PermutationId, const FShaderParameterMap &ParameterMap, bool bShouldBindEverything=false)
Definition ShaderParameterStruct.h:29
int16 GetParameterIndex(const FShaderParameterBindings::FResourceParameter &Parameter)
Definition Shader.h:802
Definition RenderGraphResources.h:131
FRHIResource * GetRHI() const
Definition RenderGraphResources.h:149
Definition RHICommandList.h:3819
Definition RHICommandList.h:2735
Definition RHIResources.h:1018
Definition RHIResources.h:947
Definition RHIResources.h:54
static constexpr uint16 kInvalidBufferIndex
Definition Shader.h:783
Definition ShaderCore.h:323
Definition RHIShaderParameters.h:241
Definition RHIShaderParameters.h:374