UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Shader.h File Reference
#include "Algo/BinarySearch.h"
#include "Containers/Array.h"
#include "Containers/ArrayView.h"
#include "Containers/ContainersFwd.h"
#include "Containers/EnumAsByte.h"
#include "Containers/HashTable.h"
#include "Containers/List.h"
#include "Containers/Map.h"
#include "Containers/Set.h"
#include "Containers/StringFwd.h"
#include "Containers/UnrealString.h"
#include "CoreMinimal.h"
#include "CoreTypes.h"
#include "HAL/CriticalSection.h"
#include "HAL/PlatformCrt.h"
#include "HAL/ThreadSafeBool.h"
#include "HAL/UnrealMemory.h"
#include "Math/NumericLimits.h"
#include "Misc/AssertionMacros.h"
#include "Misc/CString.h"
#include "Misc/EnumClassFlags.h"
#include "Misc/ScopeLock.h"
#include "Misc/SecureHash.h"
#include "RHI.h"
#include "RHIDefinitions.h"
#include "RHIMemoryLayout.h"
#include "RenderResource.h"
#include "RenderDeferredCleanup.h"
#include "Serialization/Archive.h"
#include "Serialization/ArchiveProxy.h"
#include "Serialization/MemoryImage.h"
#include "Serialization/MemoryLayout.h"
#include "ShaderCore.h"
#include "ShaderParameterMetadata.h"
#include "ShaderParameters.h"
#include "ShaderPermutation.h"
#include "ShaderPermutationUtils.h"
#include "Templates/RefCounting.h"
#include "Templates/TypeHash.h"
#include "Templates/UniquePtr.h"
#include "Templates/UnrealTemplate.h"
#include "Templates/UnrealTypeTraits.h"
#include "UObject/NameTypes.h"
#include "UObject/RenderingObjectVersion.h"
#include <atomic>

Go to the source code of this file.

Classes

struct  TShaderTypePermutation< MetaShaderType >
 
class  TCompareShaderTypePermutation< MetaShaderType >
 
class  FShaderUniformBufferParameterInfo
 
class  FShaderResourceParameterInfo
 
class  FShaderLooseParameterInfo
 
class  FShaderLooseParameterBufferInfo
 
class  FShaderParameterMapInfo
 
struct  FRegisterRayTracingPayloadTypeHelper
 
class  FShaderMapResource
 
class  FShaderMapResourceCode
 
class  FShaderMapResource_InlineCode
 
class  FShaderMapPointerTable
 
class  FShaderKey
 
class  FShaderId
 
class  FShaderParameterBindings
 
struct  FShaderParameterBindings::FParameter
 
struct  FShaderParameterBindings::FResourceParameter
 
struct  FShaderParameterBindings::FBindlessResourceParameter
 
struct  FShaderParameterBindings::FParameterStructReference
 
class  FShader
 
class  TShaderRefBase< ShaderType, PointerTableType >
 
class  FShaderType
 
class  FShaderType::FParameters
 
class  FShaderTypeRegistration
 
struct  FShaderCompiledShaderInitializerType
 
class  FShaderPipelineType
 
class  FShaderTypeDependency
 
class  FShaderPipelineTypeDependency
 
class  FCompareShaderTypes
 
class  FShaderPipeline
 
class  FShaderPipelineRef
 
class  FShaderMapContent
 
struct  FShaderMapContent::FProjectShaderPipelineToKey
 
class  FShaderMapBase
 
class  TShaderMap< ContentType, PointerTableType >
 
class  TShaderMapRef< ShaderType >
 
class  TOptionalShaderMapRef< ShaderType >
 

Namespaces

namespace  Freeze
 

Macros

#define IMPLEMENT_RT_PAYLOAD_TYPE_CONCAT2(x, y)   x##y
 
#define IMPLEMENT_RT_PAYLOAD_TYPE_CONCAT(x, y)   IMPLEMENT_RT_PAYLOAD_TYPE_CONCAT2( x, y )
 
#define IMPLEMENT_RT_PAYLOAD_TYPE(PayloadType, PayloadSize)   static FRegisterRayTracingPayloadTypeHelper IMPLEMENT_RT_PAYLOAD_TYPE_CONCAT(PayloadHelper, __COUNTER__) = FRegisterRayTracingPayloadTypeHelper(PayloadType, PayloadSize, nullptr);
 
#define IMPLEMENT_RT_PAYLOAD_TYPE_FUNCTION(PayloadType, PayloadSizeFunction)   static FRegisterRayTracingPayloadTypeHelper IMPLEMENT_RT_PAYLOAD_TYPE_CONCAT(PayloadHelper, __COUNTER__) = FRegisterRayTracingPayloadTypeHelper(PayloadType, 0u, PayloadSizeFunction);
 
#define SHADER_TYPE_LIST
 
#define SHADER_TYPE_ENTRY(Name)   Name
 
#define SHADER_TYPE_ENTRY(Name)   TEXT(#Name)
 
#define SHADER_DECLARE_EDITOR_VTABLE(ShaderClass)
 
#define SHADER_DECLARE_VTABLE(ShaderClass)
 
#define INTERNAL_DECLARE_SHADER_TYPE_COMMON(ShaderClass, ShaderMetaTypeShortcut, RequiredAPI)
 
#define DECLARE_EXPORTED_SHADER_TYPE(ShaderClass, ShaderMetaTypeShortcut, RequiredAPI, ...)
 
#define DECLARE_SHADER_TYPE(ShaderClass, ShaderMetaTypeShortcut, ...)    DECLARE_EXPORTED_SHADER_TYPE(ShaderClass,ShaderMetaTypeShortcut,, ##__VA_ARGS__)
 
#define DECLARE_SHADER_TYPE_EXPLICIT_BASES(ShaderClass, ShaderMetaTypeShortcut, ...)
 
#define SHADER_TYPE_EDITOR_VTABLE(ShaderClass)
 
#define SHADER_TYPE_EDITOR_PERMUTATION_METADATA(ShaderClass)
 
#define SHADER_TYPE_VTABLE(ShaderClass)
 
#define IMPLEMENT_SHADER_TYPE(TemplatePrefix, ShaderClass, SourceFilename, FunctionName, Frequency)
 
#define IMPLEMENT_SHADER_TYPE_WITH_DEBUG_NAME(TemplatePrefix, ShaderClass, SourceFilename, FunctionName, Frequency)
 
#define IMPLEMENT_SHADER_TYPE2_WITH_TEMPLATE_PREFIX(TemplatePrefix, ShaderClass, Frequency)
 
#define IMPLEMENT_SHADER_TYPE2(ShaderClass, Frequency)    IMPLEMENT_SHADER_TYPE2_WITH_TEMPLATE_PREFIX(template<>, ShaderClass, Frequency)
 
#define IMPLEMENT_SHADER_TYPE3(ShaderClass, Frequency)
 
#define IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX(TemplatePrefix, RequiredAPI, ShaderClass, Frequency)
 
#define IMPLEMENT_SHADER_TYPE_CONSTRUCTOR(ShaderClass, InShaderTypeForDynamicCast, InShaderClassUserFriendlyName)
 
#define IMPLEMENT_SHADERPIPELINE_TYPE_VSPS(PipelineName, VertexShaderType, PixelShaderType, bRemoveUnused)    static FShaderPipelineType PipelineName(TEXT(PREPROCESSOR_TO_STRING(PipelineName)), &VertexShaderType::GetStaticType(), nullptr, &PixelShaderType::GetStaticType(), false, bRemoveUnused);
 
#define IMPLEMENT_SHADERPIPELINE_TYPE_VS(PipelineName, VertexShaderType, bRemoveUnused)    static FShaderPipelineType PipelineName(TEXT(PREPROCESSOR_TO_STRING(PipelineName)), &VertexShaderType::GetStaticType(), nullptr, nullptr, false, bRemoveUnused);
 
#define IMPLEMENT_SHADERPIPELINE_TYPE_VSGSPS(PipelineName, VertexShaderType, GeometryShaderType, PixelShaderType, bRemoveUnused)    static FShaderPipelineType PipelineName(TEXT(PREPROCESSOR_TO_STRING(PipelineName)), &VertexShaderType::GetStaticType(), &GeometryShaderType::GetStaticType(), &PixelShaderType::GetStaticType(), false, bRemoveUnused);
 
#define IMPLEMENT_SHADERPIPELINE_TYPE_VSGS(PipelineName, VertexShaderType, GeometryShaderType, bRemoveUnused)    static FShaderPipelineType PipelineName(TEXT(PREPROCESSOR_TO_STRING(PipelineName)), &VertexShaderType::GetStaticType(), &GeometryShaderType::GetStaticType(), nullptr, false, bRemoveUnused);
 
#define IMPLEMENT_SHADERPIPELINE_TYPE_MSPS(PipelineName, MeshShaderType, PixelShaderType, bRemoveUnused)    static FShaderPipelineType PipelineName(TEXT(PREPROCESSOR_TO_STRING(PipelineName)), &MeshShaderType::GetStaticType(), nullptr, &PixelShaderType::GetStaticType(), true, bRemoveUnused);
 
#define IMPLEMENT_SHADERPIPELINE_TYPE_MSASPS(PipelineName, MeshShaderType, AmplificationShaderType, PixelShaderType, bRemoveUnused)    static FShaderPipelineType PipelineName(TEXT(PREPROCESSOR_TO_STRING(PipelineName)), &MeshShaderType::GetStaticType(), &AmplificationShaderType::GetStaticType(), &PixelShaderType::GetStaticType(), true, bRemoveUnused);
 

Typedefs

using FShaderMapAssetPaths = TSet< FName >
 
using FShaderPermutation = TShaderTypePermutation< FShaderType >
 
typedef uint32(* TRaytracingPayloadSizeFunction) ()
 
template<typename ShaderType >
using TShaderRef = TShaderRefBase< ShaderType, FShaderMapPointerTable >
 

Enumerations

enum class  EShaderPermutationPrecacheRequest : uint8 { Precached , NotPrecached , NotUsed }
 

Functions

 ENUM_CLASS_FLAGS (ERayTracingPayloadType)
 
RENDERCORE_API uint32 GetRayTracingPayloadTypeMaxSize (ERayTracingPayloadType PayloadType)
 
RENDERCORE_API void RegisterRayTracingPayloadType (ERayTracingPayloadType PayloadType, uint32 PayloadSize, TRaytracingPayloadSizeFunction PayloadSizeFunction)
 
int16 GetParameterIndex (const FShaderParameterBindings::FResourceParameter &Parameter)
 
int16 GetParameterIndex (const FShaderParameterBindings::FBindlessResourceParameter &Parameter)
 
int16 GetParameterIndex (const FShaderParameterBindings::FParameterStructReference &Parameter)
 
RENDERCORE_API EShaderPermutationFlags GetShaderPermutationFlags (const FPlatformTypeLayoutParameters &LayoutParams)
 
RENDERCORE_API void SetAdditionalShaderPermutationFlags (EShaderPermutationFlags AdditionalFlags)
 
RENDERCORE_API void Freeze::IntrinsicToString (const TIndexedPtr< FShaderType > &Object, const FTypeLayoutDesc &TypeDesc, const FPlatformTypeLayoutParameters &LayoutParams, FMemoryToStringContext &OutContext)
 
RENDERCORE_API void Freeze::IntrinsicToString (const TIndexedPtr< FVertexFactoryType > &Object, const FTypeLayoutDesc &TypeDesc, const FPlatformTypeLayoutParameters &LayoutParams, FMemoryToStringContext &OutContext)
 
 DECLARE_EXPORTED_TEMPLATE_INTRINSIC_TYPE_LAYOUT (template<>, TIndexedPtr< FShaderType >, RENDERCORE_API)
 
 DECLARE_EXPORTED_TEMPLATE_INTRINSIC_TYPE_LAYOUT (template<>, TIndexedPtr< FVertexFactoryType >, RENDERCORE_API)
 
RENDERCORE_API const FTypeLayoutDescGetTypeLayoutDesc (const FPointerTableBase *PtrTable, const FShader &Shader)
 
FString LexToString (FShaderType::EShaderTypeForDynamicCast ShaderType)
 
bool operator< (const FShaderPipeline &Lhs, const FShaderPipeline &Rhs)
 
 DECLARE_DELEGATE_EightParams (FShaderListReport, const TCHAR *, const TCHAR *, const TCHAR *, const TCHAR *, uint32, uint32, const TCHAR *, void *)
 
RENDERCORE_API void DumpShaderStats (EShaderPlatform Platform, EShaderFrequency Frequency)
 
RENDERCORE_API void DumpShaderPipelineStats (EShaderPlatform Platform)
 
RENDERCORE_API FShaderTypeFindShaderTypeByName (const FHashedName &ShaderTypeName)
 
RENDERCORE_API void DispatchComputeShader (FRHIComputeCommandList &RHICmdList, FShader *Shader, uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ)
 
RENDERCORE_API void DispatchIndirectComputeShader (FRHIComputeCommandList &RHICmdList, FShader *Shader, FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset)
 
void DispatchComputeShader (FRHIComputeCommandList &RHICmdList, const TShaderRef< FShader > &Shader, uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ)
 
RENDERCORE_API bool IsUsingEmulatedUniformBuffers (EShaderPlatform Platform)
 
RENDERCORE_API bool IsDxcEnabledForPlatform (EShaderPlatform Platform, bool bHlslVersion2021=false)
 
RENDERCORE_API void ShaderMapAppendKeyString (EShaderPlatform Platform, FString &KeyString)
 
RENDERCORE_API void ShaderMapAppendKey (EShaderPlatform Platform, FShaderKeyGenerator &KeyGen)
 

Variables

const int32 kUniqueShaderPermutationId = 0
 

Macro Definition Documentation

◆ DECLARE_EXPORTED_SHADER_TYPE

#define DECLARE_EXPORTED_SHADER_TYPE (   ShaderClass,
  ShaderMetaTypeShortcut,
  RequiredAPI,
  ... 
)
Value:
DECLARE_EXPORTED_TYPE_LAYOUT(ShaderClass, RequiredAPI, NonVirtual); \
public:
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define INTERNAL_DECLARE_SHADER_TYPE_COMMON(ShaderClass, ShaderMetaTypeShortcut, RequiredAPI)
Definition Shader.h:1665

A macro to declare a new shader type. This should be called in the class body of the new shader type.

Parameters
ShaderClass- The name of the class representing an instance of the shader type.
ShaderMetaTypeShortcut- The shortcut for the shader meta type: simple, material, meshmaterial, etc. The shader meta type controls

◆ DECLARE_SHADER_TYPE

#define DECLARE_SHADER_TYPE (   ShaderClass,
  ShaderMetaTypeShortcut,
  ... 
)     DECLARE_EXPORTED_SHADER_TYPE(ShaderClass,ShaderMetaTypeShortcut,, ##__VA_ARGS__)

◆ DECLARE_SHADER_TYPE_EXPLICIT_BASES

#define DECLARE_SHADER_TYPE_EXPLICIT_BASES (   ShaderClass,
  ShaderMetaTypeShortcut,
  ... 
)

◆ IMPLEMENT_RT_PAYLOAD_TYPE

#define IMPLEMENT_RT_PAYLOAD_TYPE (   PayloadType,
  PayloadSize 
)    static FRegisterRayTracingPayloadTypeHelper IMPLEMENT_RT_PAYLOAD_TYPE_CONCAT(PayloadHelper, __COUNTER__) = FRegisterRayTracingPayloadTypeHelper(PayloadType, PayloadSize, nullptr);

◆ IMPLEMENT_RT_PAYLOAD_TYPE_CONCAT

#define IMPLEMENT_RT_PAYLOAD_TYPE_CONCAT (   x,
 
)    IMPLEMENT_RT_PAYLOAD_TYPE_CONCAT2( x, y )

◆ IMPLEMENT_RT_PAYLOAD_TYPE_CONCAT2

#define IMPLEMENT_RT_PAYLOAD_TYPE_CONCAT2 (   x,
 
)    x##y

◆ IMPLEMENT_RT_PAYLOAD_TYPE_FUNCTION

◆ IMPLEMENT_SHADER_TYPE

#define IMPLEMENT_SHADER_TYPE (   TemplatePrefix,
  ShaderClass,
  SourceFilename,
  FunctionName,
  Frequency 
)
Value:
TemplatePrefix \
ShaderClass::ShaderMetaType& ShaderClass::GetStaticType() \
{ \
static ShaderClass::ShaderMetaType StaticType( \
ShaderClass::StaticGetTypeLayout(), \
TEXT(#ShaderClass), \
SourceFilename, \
FunctionName, \
ShaderClass::FPermutationDomain::PermutationCount, \
SHADER_TYPE_VTABLE(ShaderClass), \
sizeof(ShaderClass), \
ShaderClass::GetRootParametersMetadata() \
); \
return StaticType; \
} \
TemplatePrefix FShaderTypeRegistration ShaderClass::ShaderTypeRegistration{TFunctionRef<::FShaderType&()>{ShaderClass::GetStaticType}};
#define TEXT(x)
Definition Platform.h:1272
#define IMPLEMENT_UNREGISTERED_TEMPLATE_TYPE_LAYOUT(TemplatePrefix, T)
Definition MemoryLayout.h:596
#define SHADER_TYPE_EDITOR_PERMUTATION_METADATA(ShaderClass)
Definition Shader.h:1709
#define SHADER_TYPE_VTABLE(ShaderClass)
Definition Shader.h:1713
Definition Shader.h:1589
Definition Shader.h:1238
Definition AssetRegistryState.h:50

A macro to implement a shader type.

◆ IMPLEMENT_SHADER_TYPE2

#define IMPLEMENT_SHADER_TYPE2 (   ShaderClass,
  Frequency 
)     IMPLEMENT_SHADER_TYPE2_WITH_TEMPLATE_PREFIX(template<>, ShaderClass, Frequency)

◆ IMPLEMENT_SHADER_TYPE2_WITH_TEMPLATE_PREFIX

#define IMPLEMENT_SHADER_TYPE2_WITH_TEMPLATE_PREFIX (   TemplatePrefix,
  ShaderClass,
  Frequency 
)
Value:
TemplatePrefix \
ShaderClass::ShaderMetaType& ShaderClass::GetStaticType() \
{ \
static ShaderClass::ShaderMetaType StaticType( \
ShaderClass::StaticGetTypeLayout(), \
TEXT(#ShaderClass), \
ShaderClass::GetSourceFilename(), \
ShaderClass::GetFunctionName(), \
ShaderClass::FPermutationDomain::PermutationCount, \
SHADER_TYPE_VTABLE(ShaderClass), \
sizeof(ShaderClass), \
ShaderClass::GetRootParametersMetadata() \
); \
return StaticType; \
} \
TemplatePrefix FShaderTypeRegistration ShaderClass::ShaderTypeRegistration{TFunctionRef<::FShaderType&()>{ShaderClass::GetStaticType}};

A macro to implement a templated shader type, the function name and the source filename comes from the class.

◆ IMPLEMENT_SHADER_TYPE3

#define IMPLEMENT_SHADER_TYPE3 (   ShaderClass,
  Frequency 
)
Value:
ShaderClass::ShaderMetaType& ShaderClass::GetStaticType() \
{ \
static ShaderClass::ShaderMetaType StaticType( \
ShaderClass::StaticGetTypeLayout(), \
TEXT(#ShaderClass), \
ShaderClass::GetSourceFilename(), \
ShaderClass::GetFunctionName(), \
ShaderClass::FPermutationDomain::PermutationCount, \
SHADER_TYPE_VTABLE(ShaderClass), \
sizeof(ShaderClass), \
ShaderClass::GetRootParametersMetadata() \
); \
return StaticType; \
} \
FShaderTypeRegistration ShaderClass::ShaderTypeRegistration{TFunctionRef<::FShaderType&()>{ShaderClass::GetStaticType}};

todo: this should replace IMPLEMENT_SHADER_TYPE

◆ IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX

#define IMPLEMENT_SHADER_TYPE4_WITH_TEMPLATE_PREFIX (   TemplatePrefix,
  RequiredAPI,
  ShaderClass,
  Frequency 
)
Value:
TemplatePrefix RequiredAPI \
ShaderClass::ShaderMetaType& ShaderClass::GetStaticType() \
{ \
static ShaderClass::ShaderMetaType StaticType( \
ShaderClass::StaticGetTypeLayout(), \
TEXT(#ShaderClass), \
ShaderClass::GetSourceFilename(), \
ShaderClass::GetFunctionName(), \
ShaderClass::FPermutationDomain::PermutationCount, \
SHADER_TYPE_VTABLE(ShaderClass), \
sizeof(ShaderClass), \
ShaderClass::GetRootParametersMetadata() \
); \
return StaticType; \
} \
TemplatePrefix FShaderTypeRegistration ShaderClass::ShaderTypeRegistration{TFunctionRef<::FShaderType&()>{ShaderClass::GetStaticType}};

◆ IMPLEMENT_SHADER_TYPE_CONSTRUCTOR

#define IMPLEMENT_SHADER_TYPE_CONSTRUCTOR (   ShaderClass,
  InShaderTypeForDynamicCast,
  InShaderClassUserFriendlyName 
)

◆ IMPLEMENT_SHADER_TYPE_WITH_DEBUG_NAME

#define IMPLEMENT_SHADER_TYPE_WITH_DEBUG_NAME (   TemplatePrefix,
  ShaderClass,
  SourceFilename,
  FunctionName,
  Frequency 
)
Value:
typename ShaderClass::ShaderMetaType& ShaderClass::GetStaticType() \
{ \
static typename ShaderClass::ShaderMetaType StaticType( \
ShaderClass::StaticGetTypeLayout(), \
ShaderClass::GetDebugName(), \
SourceFilename, \
FunctionName, \
ShaderClass::FPermutationDomain::PermutationCount, \
SHADER_TYPE_VTABLE(ShaderClass), \
sizeof(ShaderClass), \
ShaderClass::GetRootParametersMetadata() \
); \
return StaticType; \
} \
TemplatePrefix FShaderTypeRegistration ShaderClass::ShaderTypeRegistration{TFunctionRef<::FShaderType&()>{ShaderClass::GetStaticType}};

A macro to implement a shader type. Shader name is got from GetDebugName(), which is helpful for templated shaders.

◆ IMPLEMENT_SHADERPIPELINE_TYPE_MSASPS

◆ IMPLEMENT_SHADERPIPELINE_TYPE_MSPS

#define IMPLEMENT_SHADERPIPELINE_TYPE_MSPS (   PipelineName,
  MeshShaderType,
  PixelShaderType,
  bRemoveUnused 
)     static FShaderPipelineType PipelineName(TEXT(PREPROCESSOR_TO_STRING(PipelineName)), &MeshShaderType::GetStaticType(), nullptr, &PixelShaderType::GetStaticType(), true, bRemoveUnused);

◆ IMPLEMENT_SHADERPIPELINE_TYPE_VS

#define IMPLEMENT_SHADERPIPELINE_TYPE_VS (   PipelineName,
  VertexShaderType,
  bRemoveUnused 
)     static FShaderPipelineType PipelineName(TEXT(PREPROCESSOR_TO_STRING(PipelineName)), &VertexShaderType::GetStaticType(), nullptr, nullptr, false, bRemoveUnused);

◆ IMPLEMENT_SHADERPIPELINE_TYPE_VSGS

#define IMPLEMENT_SHADERPIPELINE_TYPE_VSGS (   PipelineName,
  VertexShaderType,
  GeometryShaderType,
  bRemoveUnused 
)     static FShaderPipelineType PipelineName(TEXT(PREPROCESSOR_TO_STRING(PipelineName)), &VertexShaderType::GetStaticType(), &GeometryShaderType::GetStaticType(), nullptr, false, bRemoveUnused);

◆ IMPLEMENT_SHADERPIPELINE_TYPE_VSGSPS

◆ IMPLEMENT_SHADERPIPELINE_TYPE_VSPS

#define IMPLEMENT_SHADERPIPELINE_TYPE_VSPS (   PipelineName,
  VertexShaderType,
  PixelShaderType,
  bRemoveUnused 
)     static FShaderPipelineType PipelineName(TEXT(PREPROCESSOR_TO_STRING(PipelineName)), &VertexShaderType::GetStaticType(), nullptr, &PixelShaderType::GetStaticType(), false, bRemoveUnused);

◆ INTERNAL_DECLARE_SHADER_TYPE_COMMON

#define INTERNAL_DECLARE_SHADER_TYPE_COMMON (   ShaderClass,
  ShaderMetaTypeShortcut,
  RequiredAPI 
)
Value:
public: \
using ShaderMetaType = F##ShaderMetaTypeShortcut##ShaderType; \
using ShaderMapType = F##ShaderMetaTypeShortcut##ShaderMap; \
\
static RequiredAPI ShaderMetaType& GetStaticType(); \
private: \
public: \

◆ SHADER_DECLARE_EDITOR_VTABLE

#define SHADER_DECLARE_EDITOR_VTABLE (   ShaderClass)

◆ SHADER_DECLARE_VTABLE

#define SHADER_DECLARE_VTABLE (   ShaderClass)
Value:
static FShader* ConstructSerializedInstance() { return new ShaderClass(); } \
{ return new ShaderClass(static_cast<const typename ShaderMetaType::CompiledShaderInitializerType&>(Initializer)); }\
{ return ShaderClass::ShouldCompilePermutation(static_cast<const typename ShaderClass::FPermutationParameters&>(Parameters)); } \
{ return ShaderClass::ShouldPrecachePermutation(static_cast<const typename ShaderClass::FPermutationParameters&>(Parameters)); } \
EShaderPermutationPrecacheRequest
Definition Shader.h:807
Definition Shader.h:829
Definition Shader.h:1610
Definition ShaderPermutation.h:27

◆ SHADER_TYPE_EDITOR_PERMUTATION_METADATA

#define SHADER_TYPE_EDITOR_PERMUTATION_METADATA (   ShaderClass)

◆ SHADER_TYPE_EDITOR_VTABLE

#define SHADER_TYPE_EDITOR_VTABLE (   ShaderClass)

◆ SHADER_TYPE_ENTRY [1/2]

#define SHADER_TYPE_ENTRY (   Name)    Name

◆ SHADER_TYPE_ENTRY [2/2]

#define SHADER_TYPE_ENTRY (   Name)    TEXT(#Name)

◆ SHADER_TYPE_LIST

◆ SHADER_TYPE_VTABLE

#define SHADER_TYPE_VTABLE (   ShaderClass)
Value:
ShaderClass::ConstructSerializedInstance, \
ShaderClass::ConstructCompiledInstance, \
ShaderClass::ShouldCompilePermutationImpl, \
ShaderClass::ShouldPrecachePermutationImpl, \
ShaderClass::GetRayTracingPayloadType, \
ShaderClass::GetShaderBindingLayout \
SHADER_TYPE_EDITOR_VTABLE(ShaderClass)

Typedef Documentation

◆ FShaderMapAssetPaths

using FShaderMapAssetPaths = TSet<FName>

◆ FShaderPermutation

◆ TRaytracingPayloadSizeFunction

typedef uint32(* TRaytracingPayloadSizeFunction) ()

◆ TShaderRef

template<typename ShaderType >
using TShaderRef = TShaderRefBase<ShaderType, FShaderMapPointerTable>

Enumeration Type Documentation

◆ EShaderPermutationPrecacheRequest

Enumerator
Precached 
NotPrecached 
NotUsed 

Function Documentation

◆ DECLARE_DELEGATE_EightParams()

DECLARE_DELEGATE_EightParams ( FShaderListReport  ,
const TCHAR ,
const TCHAR ,
const TCHAR ,
const TCHAR ,
uint32  ,
uint32  ,
const TCHAR ,
void  
)

◆ DECLARE_EXPORTED_TEMPLATE_INTRINSIC_TYPE_LAYOUT() [1/2]

DECLARE_EXPORTED_TEMPLATE_INTRINSIC_TYPE_LAYOUT ( template<>  ,
TIndexedPtr< FShaderType ,
RENDERCORE_API   
)

◆ DECLARE_EXPORTED_TEMPLATE_INTRINSIC_TYPE_LAYOUT() [2/2]

DECLARE_EXPORTED_TEMPLATE_INTRINSIC_TYPE_LAYOUT ( template<>  ,
TIndexedPtr< FVertexFactoryType ,
RENDERCORE_API   
)

◆ DispatchComputeShader() [1/2]

void DispatchComputeShader ( FRHIComputeCommandList RHICmdList,
const TShaderRef< FShader > &  Shader,
uint32  ThreadGroupCountX,
uint32  ThreadGroupCountY,
uint32  ThreadGroupCountZ 
)
inline

◆ DispatchComputeShader() [2/2]

RENDERCORE_API void DispatchComputeShader ( FRHIComputeCommandList RHICmdList,
FShader Shader,
uint32  ThreadGroupCountX,
uint32  ThreadGroupCountY,
uint32  ThreadGroupCountZ 
)
extern

Helper function to dispatch a compute shader while checking that parameters have been set correctly.

◆ DispatchIndirectComputeShader()

RENDERCORE_API void DispatchIndirectComputeShader ( FRHIComputeCommandList RHICmdList,
FShader Shader,
FRHIBuffer ArgumentBuffer,
uint32  ArgumentOffset 
)
extern

Helper function to dispatch a compute shader indirectly while checking that parameters have been set correctly.

◆ DumpShaderPipelineStats()

RENDERCORE_API void DumpShaderPipelineStats ( EShaderPlatform  Platform)
extern

Dumps shader pipeline stats to the log. Does not include material (eg shader pipeline instance) information.

Parameters
Platform- Platform to dump shader info for, use SP_NumPlatforms for all

◆ DumpShaderStats()

RENDERCORE_API void DumpShaderStats ( EShaderPlatform  Platform,
EShaderFrequency  Frequency 
)
extern

Dumps shader stats to the log. Will also print some shader pipeline information.

Parameters
Platform- Platform to dump shader info for, use SP_NumPlatforms for all
Frequency- Whether to dump PS or VS info, use SF_NumFrequencies to dump both

◆ ENUM_CLASS_FLAGS()

ENUM_CLASS_FLAGS ( ERayTracingPayloadType  )

◆ FindShaderTypeByName()

RENDERCORE_API FShaderType * FindShaderTypeByName ( const FHashedName ShaderTypeName)
extern

Finds the shader type with a given name.

Parameters
ShaderTypeName- The name of the shader type to find.
Returns
The shader type, or NULL if none matched.

◆ GetParameterIndex() [1/3]

int16 GetParameterIndex ( const FShaderParameterBindings::FBindlessResourceParameter Parameter)
inline

◆ GetParameterIndex() [2/3]

int16 GetParameterIndex ( const FShaderParameterBindings::FParameterStructReference Parameter)
inline

◆ GetParameterIndex() [3/3]

int16 GetParameterIndex ( const FShaderParameterBindings::FResourceParameter Parameter)
inline

◆ GetRayTracingPayloadTypeMaxSize()

RENDERCORE_API uint32 GetRayTracingPayloadTypeMaxSize ( ERayTracingPayloadType  PayloadType)

◆ GetShaderPermutationFlags()

RENDERCORE_API EShaderPermutationFlags GetShaderPermutationFlags ( const FPlatformTypeLayoutParameters LayoutParams)

Get the shader permutation flags associated with a platform layout.

◆ GetTypeLayoutDesc()

RENDERCORE_API const FTypeLayoutDesc & GetTypeLayoutDesc ( const FPointerTableBase PtrTable,
const FShader Shader 
)

◆ IsDxcEnabledForPlatform()

RENDERCORE_API bool IsDxcEnabledForPlatform ( EShaderPlatform  Platform,
bool  bHlslVersion2021 = false 
)
extern

Returns whether DirectXShaderCompiler (DXC) is enabled for the specified shader platform. See console variables "r.OpenGL.ForceDXC", "r.D3D.ForceDXC".

◆ IsUsingEmulatedUniformBuffers()

RENDERCORE_API bool IsUsingEmulatedUniformBuffers ( EShaderPlatform  Platform)
extern

Returns whether the platform is using emulated uniform buffers

◆ LexToString()

FString LexToString ( FShaderType::EShaderTypeForDynamicCast  ShaderType)
inline

◆ operator<()

bool operator< ( const FShaderPipeline Lhs,
const FShaderPipeline Rhs 
)
inline

◆ RegisterRayTracingPayloadType()

RENDERCORE_API void RegisterRayTracingPayloadType ( ERayTracingPayloadType  PayloadType,
uint32  PayloadSize,
TRaytracingPayloadSizeFunction  PayloadSizeFunction 
)

◆ SetAdditionalShaderPermutationFlags()

RENDERCORE_API void SetAdditionalShaderPermutationFlags ( EShaderPermutationFlags  AdditionalFlags)

Set global additional flags that are always added in GetShaderPermutationFlags(). Expected to be called once at startup.

◆ ShaderMapAppendKey()

RENDERCORE_API void ShaderMapAppendKey ( EShaderPlatform  Platform,
FShaderKeyGenerator KeyGen 
)
extern

◆ ShaderMapAppendKeyString()

RENDERCORE_API void ShaderMapAppendKeyString ( EShaderPlatform  Platform,
FString &  KeyString 
)
extern

Appends to KeyString for all shaders.

Variable Documentation

◆ kUniqueShaderPermutationId

const int32 kUniqueShaderPermutationId = 0
inline