UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ShaderParameterStruct.h File Reference
#include "Containers/Array.h"
#include "CoreMinimal.h"
#include "HAL/Platform.h"
#include "Misc/AssertionMacros.h"
#include "RHI.h"
#include "RHIDefinitions.h"
#include "RenderGraphResources.h"
#include "Serialization/MemoryImage.h"
#include "Shader.h"

Go to the source code of this file.

Macros

#define SHADER_USE_PARAMETER_STRUCT_INTERNAL(ShaderClass, ShaderParentClass, bShouldBindEverything)
 
#define SHADER_ROOT_PARAMETERS_SIGNATURE()    static inline const FShaderParametersMetadata* GetRootParametersMetadata() { return FParameters::FTypeInfo::GetStructMetadata(); }
 
#define SHADER_USE_PARAMETER_STRUCT(ShaderClass, ShaderParentClass)
 
#define SHADER_USE_PARAMETER_STRUCT_WITH_LEGACY_BASE(ShaderClass, ShaderParentClass)    SHADER_USE_PARAMETER_STRUCT_INTERNAL(ShaderClass, ShaderParentClass, false)
 
#define SHADER_USE_PARAMETER_STRUCT_MIXED(ShaderClass, ShaderParentClass)
 
#define SHADER_USE_ROOT_PARAMETER_STRUCT(ShaderClass, ShaderParentClass)
 

Functions

template<typename FParameterStruct >
void BindForLegacyShaderParameters (FShader *Shader, int32 PermutationId, const FShaderParameterMap &ParameterMap, bool bShouldBindEverything=false)
 
FRHIResourceGetShaderParameterResourceRHI (const void *Contents, uint16 MemberOffset, EUniformBufferBaseType MemberType)
 
void ValidateShaderParameterResourcesRHI (const void *Contents, const FRHIUniformBufferLayout &Layout)
 
RENDERCORE_API void EmitNullShaderParameterFatalError (const TShaderRef< FShader > &Shader, const FShaderParametersMetadata *ParametersMetadata, uint16 MemberOffset)
 
void ValidateShaderParameters (const TShaderRef< FShader > &Shader, const FShaderParametersMetadata *ParametersMetadata, const void *ParametersData)
 
template<typename TShaderClass >
void ValidateShaderParameters (const TShaderRef< TShaderClass > &Shader, const typename TShaderClass::FParameters &Parameters)
 
template<typename TParameterType >
void CollectUAVsToUnset (FRHIBatchedShaderUnbinds &BatchedUnbinds, const TMemoryImageArray< TParameterType > &InParameters)
 
template<typename TParameterType >
void CollectSRVsToUnset (FRHIBatchedShaderUnbinds &BatchedUnbinds, const TMemoryImageArray< TParameterType > &InParameters)
 
void UnsetShaderUAVs (FRHIBatchedShaderUnbinds &BatchedUnbinds, const FShaderParameterBindings &Bindings)
 
void UnsetShaderSRVs (FRHIBatchedShaderUnbinds &BatchedUnbinds, const FShaderParameterBindings &Bindings)
 
template<typename TShaderClass >
void UnsetShaderUAVs (FRHIBatchedShaderUnbinds &BatchedUnbinds, const TShaderRef< TShaderClass > &Shader)
 
template<typename TShaderClass >
void UnsetShaderSRVs (FRHIBatchedShaderUnbinds &BatchedUnbinds, const TShaderRef< TShaderClass > &Shader)
 
template<typename TRHICmdList , typename TShaderClass >
void UnsetShaderUAVs (TRHICmdList &RHICmdList, const TShaderRef< TShaderClass > &Shader, FRHIComputeShader *ShaderRHI)
 
template<typename TRHICmdList , typename TShaderClass >
void UnsetShaderSRVs (TRHICmdList &RHICmdList, const TShaderRef< TShaderClass > &Shader, FRHIComputeShader *ShaderRHI)
 
template<typename TRHICmdList , typename TShaderClass >
void UnsetShaderSRVs (TRHICmdList &RHICmdList, const TShaderRef< TShaderClass > &Shader, FRHIGraphicsShader *ShaderRHI)
 
RENDERCORE_API void SetAllShaderParametersAsBindless (FRHIBatchedShaderParameters &BatchedParameters, const FShaderParametersMetadata *ParametersMetadata, const void *ParametersData)
 
template<typename TParameters >
void SetAllShaderParametersAsBindless (FRHIBatchedShaderParameters &BatchedParameters, const TParameters &InParameters)
 
RENDERCORE_API void SetShaderParameters (FRHIBatchedShaderParameters &BatchedParameters, const FShaderParameterBindings &Bindings, const FShaderParametersMetadata *ParametersMetadata, const void *ParametersData)
 
template<typename TShaderClass >
void SetShaderParameters (FRHIBatchedShaderParameters &BatchedParameters, const TShaderRef< TShaderClass > &Shader, const FShaderParametersMetadata *ParametersMetadata, const typename TShaderClass::FParameters &Parameters)
 
template<typename TShaderClass >
void SetShaderParameters (FRHIBatchedShaderParameters &BatchedParameters, const TShaderRef< TShaderClass > &Shader, const typename TShaderClass::FParameters &Parameters)
 
RENDERCORE_API void SetShaderParameters (FRHIComputeCommandList &RHICmdList, FRHIComputeShader *ShaderRHI, const FShaderParameterBindings &Bindings, const FShaderParametersMetadata *ParametersMetadata, const void *ParametersData)
 
RENDERCORE_API void SetShaderParameters (FRHICommandList &RHICmdList, FRHIGraphicsShader *ShaderRHI, const FShaderParameterBindings &Bindings, const FShaderParametersMetadata *ParametersMetadata, const void *ParametersData)
 
RENDERCORE_API void SetShaderParameters (FRHICommandList &RHICmdList, FRHIComputeShader *ShaderRHI, const FShaderParameterBindings &Bindings, const FShaderParametersMetadata *ParametersMetadata, const void *ParametersData)
 
template<typename TRHICmdList , typename TShaderClass , typename TShaderRHI >
void SetShaderParameters (TRHICmdList &RHICmdList, const TShaderRef< TShaderClass > &Shader, TShaderRHI *ShaderRHI, const FShaderParametersMetadata *ParametersMetadata, const typename TShaderClass::FParameters &Parameters)
 
template<typename TRHICmdList , typename TShaderClass , typename TShaderRHI >
void SetShaderParameters (TRHICmdList &RHICmdList, const TShaderRef< TShaderClass > &Shader, TShaderRHI *ShaderRHI, const typename TShaderClass::FParameters &Parameters)
 

Macro Definition Documentation

◆ SHADER_ROOT_PARAMETERS_SIGNATURE

#define SHADER_ROOT_PARAMETERS_SIGNATURE ( )     static inline const FShaderParametersMetadata* GetRootParametersMetadata() { return FParameters::FTypeInfo::GetStructMetadata(); }

◆ SHADER_USE_PARAMETER_STRUCT

#define SHADER_USE_PARAMETER_STRUCT (   ShaderClass,
  ShaderParentClass 
)
Value:
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define SHADER_USE_PARAMETER_STRUCT_INTERNAL(ShaderClass, ShaderParentClass, bShouldBindEverything)
Definition ShaderParameterStruct.h:50

◆ SHADER_USE_PARAMETER_STRUCT_INTERNAL

#define SHADER_USE_PARAMETER_STRUCT_INTERNAL (   ShaderClass,
  ShaderParentClass,
  bShouldBindEverything 
)
Value:
ShaderClass() = default; \
ShaderClass(const ShaderMetaType::CompiledShaderInitializerType& Initializer) \
{ \
}

Tag a shader class to use the structured shader parameters API.

class FMyShaderClassCS : public FGlobalShader { DECLARE_GLOBAL_SHADER(FMyShaderClassCS); SHADER_USE_PARAMETER_STRUCT(FMyShaderClassCS, FGlobalShader);

BEGIN_SHADER_PARAMETER_STRUCT(FParameters) SHADER_PARAMETER(FMatrix44f, ViewToClip) //... END_SHADER_PARAMETER_STRUCT() };

Notes: Long term, this macro will no longer be needed. Instead, parameter binding will become the default behavior for shader declarations.

◆ SHADER_USE_PARAMETER_STRUCT_MIXED

#define SHADER_USE_PARAMETER_STRUCT_MIXED (   ShaderClass,
  ShaderParentClass 
)
Value:

Use when sharing shader parameter binding with legacy parameters in the base class; i.e. FMaterialShader or FMeshMaterialShader. This forces the shader to be compiled with the Parameters.

◆ SHADER_USE_PARAMETER_STRUCT_WITH_LEGACY_BASE

#define SHADER_USE_PARAMETER_STRUCT_WITH_LEGACY_BASE (   ShaderClass,
  ShaderParentClass 
)     SHADER_USE_PARAMETER_STRUCT_INTERNAL(ShaderClass, ShaderParentClass, false)

Use when sharing shader parameter binding with legacy parameters in the base class; i.e. FMaterialShader or FMeshMaterialShader. Note that this disables validation that the parameter struct contains all shader bindings.

◆ SHADER_USE_ROOT_PARAMETER_STRUCT

#define SHADER_USE_ROOT_PARAMETER_STRUCT (   ShaderClass,
  ShaderParentClass 
)
Value:
ShaderClass() = default; \
ShaderClass(const ShaderMetaType::CompiledShaderInitializerType& Initializer) \
{ \
this->Bindings.BindForRootShaderParameters(this, Initializer.PermutationId, Initializer.ParameterMap); \
}
#define SHADER_ROOT_PARAMETERS_SIGNATURE()
Definition ShaderParameterStruct.h:58

Function Documentation

◆ BindForLegacyShaderParameters()

void BindForLegacyShaderParameters ( FShader Shader,
int32  PermutationId,
const FShaderParameterMap ParameterMap,
bool  bShouldBindEverything = false 
)

◆ CollectSRVsToUnset()

void CollectSRVsToUnset ( FRHIBatchedShaderUnbinds BatchedUnbinds,
const TMemoryImageArray< TParameterType > &  InParameters 
)
inline

◆ CollectUAVsToUnset()

void CollectUAVsToUnset ( FRHIBatchedShaderUnbinds BatchedUnbinds,
const TMemoryImageArray< TParameterType > &  InParameters 
)
inline

◆ EmitNullShaderParameterFatalError()

RENDERCORE_API void EmitNullShaderParameterFatalError ( const TShaderRef< FShader > &  Shader,
const FShaderParametersMetadata ParametersMetadata,
uint16  MemberOffset 
)
extern

Raise fatal error when a required shader parameter has not been set.

◆ GetShaderParameterResourceRHI()

FRHIResource * GetShaderParameterResourceRHI ( const void Contents,
uint16  MemberOffset,
EUniformBufferBaseType  MemberType 
)
inline

Dereferences the RHI resource from a shader parameter struct.

◆ SetAllShaderParametersAsBindless() [1/2]

RENDERCORE_API void SetAllShaderParametersAsBindless ( FRHIBatchedShaderParameters BatchedParameters,
const FShaderParametersMetadata ParametersMetadata,
const void ParametersData 
)

Set all resources described by ParametersMetadata using data from ParametersData as BindlessParameters

◆ SetAllShaderParametersAsBindless() [2/2]

template<typename TParameters >
void SetAllShaderParametersAsBindless ( FRHIBatchedShaderParameters BatchedParameters,
const TParameters InParameters 
)
inline

◆ SetShaderParameters() [1/8]

RENDERCORE_API void SetShaderParameters ( FRHIBatchedShaderParameters BatchedParameters,
const FShaderParameterBindings Bindings,
const FShaderParametersMetadata ParametersMetadata,
const void InParametersData 
)

Set batched parameters from a parameters struct.

◆ SetShaderParameters() [2/8]

template<typename TShaderClass >
void SetShaderParameters ( FRHIBatchedShaderParameters BatchedParameters,
const TShaderRef< TShaderClass > &  Shader,
const FShaderParametersMetadata ParametersMetadata,
const typename TShaderClass::FParameters &  Parameters 
)
inline

◆ SetShaderParameters() [3/8]

template<typename TShaderClass >
void SetShaderParameters ( FRHIBatchedShaderParameters BatchedParameters,
const TShaderRef< TShaderClass > &  Shader,
const typename TShaderClass::FParameters &  Parameters 
)
inline

◆ SetShaderParameters() [4/8]

RENDERCORE_API void SetShaderParameters ( FRHICommandList RHICmdList,
FRHIComputeShader ShaderRHI,
const FShaderParameterBindings Bindings,
const FShaderParametersMetadata ParametersMetadata,
const void ParametersData 
)

◆ SetShaderParameters() [5/8]

RENDERCORE_API void SetShaderParameters ( FRHICommandList RHICmdList,
FRHIGraphicsShader ShaderRHI,
const FShaderParameterBindings Bindings,
const FShaderParametersMetadata ParametersMetadata,
const void ParametersData 
)

◆ SetShaderParameters() [6/8]

RENDERCORE_API void SetShaderParameters ( FRHIComputeCommandList RHICmdList,
FRHIComputeShader ShaderRHI,
const FShaderParameterBindings Bindings,
const FShaderParametersMetadata ParametersMetadata,
const void ParametersData 
)

◆ SetShaderParameters() [7/8]

void SetShaderParameters ( TRHICmdList RHICmdList,
const TShaderRef< TShaderClass > &  Shader,
TShaderRHI ShaderRHI,
const FShaderParametersMetadata ParametersMetadata,
const typename TShaderClass::FParameters &  Parameters 
)
inline

◆ SetShaderParameters() [8/8]

void SetShaderParameters ( TRHICmdList RHICmdList,
const TShaderRef< TShaderClass > &  Shader,
TShaderRHI ShaderRHI,
const typename TShaderClass::FParameters &  Parameters 
)
inline

◆ UnsetShaderSRVs() [1/4]

void UnsetShaderSRVs ( FRHIBatchedShaderUnbinds BatchedUnbinds,
const FShaderParameterBindings Bindings 
)
inline

◆ UnsetShaderSRVs() [2/4]

template<typename TShaderClass >
void UnsetShaderSRVs ( FRHIBatchedShaderUnbinds BatchedUnbinds,
const TShaderRef< TShaderClass > &  Shader 
)
inline

◆ UnsetShaderSRVs() [3/4]

void UnsetShaderSRVs ( TRHICmdList RHICmdList,
const TShaderRef< TShaderClass > &  Shader,
FRHIComputeShader ShaderRHI 
)
inline

Unset compute shader SRVs.

◆ UnsetShaderSRVs() [4/4]

void UnsetShaderSRVs ( TRHICmdList RHICmdList,
const TShaderRef< TShaderClass > &  Shader,
FRHIGraphicsShader ShaderRHI 
)
inline

Unset compute shader SRVs.

◆ UnsetShaderUAVs() [1/3]

void UnsetShaderUAVs ( FRHIBatchedShaderUnbinds BatchedUnbinds,
const FShaderParameterBindings Bindings 
)
inline

◆ UnsetShaderUAVs() [2/3]

template<typename TShaderClass >
void UnsetShaderUAVs ( FRHIBatchedShaderUnbinds BatchedUnbinds,
const TShaderRef< TShaderClass > &  Shader 
)
inline

◆ UnsetShaderUAVs() [3/3]

void UnsetShaderUAVs ( TRHICmdList RHICmdList,
const TShaderRef< TShaderClass > &  Shader,
FRHIComputeShader ShaderRHI 
)
inline

Unset compute shader UAVs.

◆ ValidateShaderParameterResourcesRHI()

void ValidateShaderParameterResourcesRHI ( const void Contents,
const FRHIUniformBufferLayout Layout 
)
inline

Validates that all resource parameters of a uniform buffer are set.

◆ ValidateShaderParameters() [1/2]

void ValidateShaderParameters ( const TShaderRef< FShader > &  Shader,
const FShaderParametersMetadata ParametersMetadata,
const void ParametersData 
)
inline

Validates that all resource parameters of a shader are set.

◆ ValidateShaderParameters() [2/2]

template<typename TShaderClass >
void ValidateShaderParameters ( const TShaderRef< TShaderClass > &  Shader,
const typename TShaderClass::FParameters &  Parameters 
)
inline