76 checkf(PermutationId == 0 || PermutationId == 1,
TEXT(
"Invalid shader permutation dimension id %i."), PermutationId);
77 return PermutationId == 1;
83template <
typename TType,
int32 TDimensionSize,
int32 TFirstValue=0>
107 return PermutationId;
126template <
int32... Ts>
144 checkf(
false,
TEXT(
"Unknown shader permutation dimension value %i."),
E);
151 checkf(
false,
TEXT(
"Invalid shader permutation dimension id %i."), PermutationId);
227template <
typename... Ts>
246 checkf(PermutationId == 0,
TEXT(
"Invalid shader permutation id %i."), PermutationId);
251 template<
class DimensionToSet>
252 void Set(
typename DimensionToSet::Type)
257 static_assert(
sizeof(
typename DimensionToSet::Type) == 0,
"Unknown shader permutation dimension.");
261 template<
class DimensionToGet>
262 const typename DimensionToGet::Type
Get()
const
267 static_assert(
sizeof(
typename DimensionToGet::Type) == 0,
"Unknown shader permutation dimension.");
268 return DimensionToGet::Type();
291 return Type(PermutationId);
305template<
bool BooleanSpecialization>
310 template<
typename TPermutationVector,
typename TDimension>
323 template<
typename TPermutationVector,
typename TDimensionToGet>
329 template<
typename TPermutationVector,
typename TDimensionToSet>
342 template<
typename TPermutationVector,
typename TDimension>
349 template<
typename TPermutationVector,
typename TDimensionToGet>
355 template<
typename TPermutationVector,
typename TDimensionToSet>
397 template<
class DimensionToSet>
405 template<
class DimensionToGet>
406 const typename DimensionToGet::Type&
Get()
const
434 return TDimension::ToDimensionValueId(DimensionValue) + TDimension::PermutationCount * Tail.ToDimensionValueId();
441 return Type(PermutationId);
448 return DimensionValue ==
Other.DimensionValue && Tail ==
Other.Tail;
454 return !(*
this ==
Other);
458 template<
bool BooleanSpecialization>
461 typename TDimension::Type DimensionValue;
471#define DECLARE_SHADER_PERMUTATION_IMPL(InDefineName,PermutationMetaType,...) \
472 public PermutationMetaType<__VA_ARGS__> { \
474 static constexpr const TCHAR* DefineName = TEXT(InDefineName); \
482#define SHADER_PERMUTATION_BOOL(InDefineName) \
483 public FShaderPermutationBool { \
485 static constexpr const TCHAR* DefineName = TEXT(InDefineName); \
492#define SHADER_PERMUTATION_INT(InDefineName, Count) \
493 DECLARE_SHADER_PERMUTATION_IMPL(InDefineName, TShaderPermutationInt, int32, Count)
499#define SHADER_PERMUTATION_RANGE_INT(InDefineName, Start, Count) \
500 DECLARE_SHADER_PERMUTATION_IMPL(InDefineName, TShaderPermutationInt, int32, Count, Start)
506#define SHADER_PERMUTATION_SPARSE_INT(InDefineName,...) \
507 DECLARE_SHADER_PERMUTATION_IMPL(InDefineName, TShaderPermutationSparseInt, __VA_ARGS__)
521#define SHADER_PERMUTATION_ENUM_CLASS(InDefineName, EnumName) \
522 DECLARE_SHADER_PERMUTATION_IMPL(InDefineName, TShaderPermutationInt, EnumName, static_cast<int32>(EnumName::MAX))
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
return true
Definition ExternalRpcRegistry.cpp:601
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
const bool
Definition NetworkReplayStreaming.h:178
EShaderPermutationFlags
Definition ShaderPermutation.h:19
constexpr bool bLogPermutations
Definition ShaderPermutation.h:13
static void ModifyCompilationEnvironment(const TPermutationVector &PermutationVector, FShaderCompilerEnvironment &OutEnvironment)
Definition ShaderPermutation.h:343
static void SetDimension(TPermutationVector &PermutationVector, const typename TDimensionToSet::Type &Value)
Definition ShaderPermutation.h:356
static const TDimensionToGet::Type & GetDimension(const TPermutationVector &PermutationVector)
Definition ShaderPermutation.h:350
Definition ShaderPermutation.h:307
static void ModifyCompilationEnvironment(const TPermutationVector &PermutationVector, FShaderCompilerEnvironment &OutEnvironment)
Definition ShaderPermutation.h:311
static void SetDimension(TPermutationVector &PermutationVector, const typename TDimensionToSet::Type &Value)
Definition ShaderPermutation.h:330
static const TDimensionToGet::Type & GetDimension(const TPermutationVector &PermutationVector)
Definition ShaderPermutation.h:324
Definition ShaderCore.h:544
Definition ShaderPermutation.h:48
static Type FromDimensionValueId(int32 PermutationId)
Definition ShaderPermutation.h:74
static constexpr bool IsMultiDimensional
Definition ShaderPermutation.h:58
static constexpr int32 PermutationCount
Definition ShaderPermutation.h:53
static bool ToDefineValue(Type E)
Definition ShaderPermutation.h:68
bool Type
Definition ShaderPermutation.h:50
static int32 ToDimensionValueId(Type E)
Definition ShaderPermutation.h:62
Definition ShaderPermutation.h:27
const int32 PermutationId
Definition ShaderPermutation.h:32
const EShaderPlatform Platform
Definition ShaderPermutation.h:29
FShaderPermutationParameters(EShaderPlatform InPlatform, int32 InPermutationId=0, EShaderPermutationFlags InFlags=EShaderPermutationFlags::HasEditorOnlyData)
Definition ShaderPermutation.h:38
const EShaderPermutationFlags Flags
Definition ShaderPermutation.h:35
Definition ShaderPermutation.h:366
static int32 ToDimensionValueId(const Type &PermutationVector)
Definition ShaderPermutation.h:427
bool operator==(const Type &Other) const
Definition ShaderPermutation.h:446
bool operator!=(const Type &Other) const
Definition ShaderPermutation.h:452
static Type FromDimensionValueId(const int32 PermutationId)
Definition ShaderPermutation.h:439
void ModifyCompilationEnvironment(FShaderCompilerEnvironment &OutEnvironment) const
Definition ShaderPermutation.h:420
const DimensionToGet::Type & Get() const
Definition ShaderPermutation.h:406
void Set(typename DimensionToSet::Type Value)
Definition ShaderPermutation.h:398
const Super::Type & GetTail() const
Definition ShaderPermutation.h:413
int32 ToDimensionValueId() const
Definition ShaderPermutation.h:432
Definition ShaderPermutation.h:229
static Type FromDimensionValueId(const int32 PermutationId)
Definition ShaderPermutation.h:289
void ModifyCompilationEnvironment(FShaderCompilerEnvironment &OutEnvironment) const
Definition ShaderPermutation.h:273
void Set(typename DimensionToSet::Type)
Definition ShaderPermutation.h:252
bool operator==(const Type &Other) const
Definition ShaderPermutation.h:296
static constexpr bool IsMultiDimensional
Definition ShaderPermutation.h:236
int32 ToDimensionValueId() const
Definition ShaderPermutation.h:282
static constexpr int32 PermutationCount
Definition ShaderPermutation.h:239
const DimensionToGet::Type Get() const
Definition ShaderPermutation.h:262
static int32 ToDimensionValueId(const Type &PermutationVector)
Definition ShaderPermutation.h:277
TShaderPermutationDomain< Ts... > Type
Definition ShaderPermutation.h:233
Definition ShaderPermutation.h:85
static constexpr int32 PermutationCount
Definition ShaderPermutation.h:90
static constexpr Type MinValue
Definition ShaderPermutation.h:98
TType Type
Definition ShaderPermutation.h:87
static constexpr bool IsMultiDimensional
Definition ShaderPermutation.h:95
static Type FromDimensionValueId(int32 PermutationId)
Definition ShaderPermutation.h:117
static int32 ToDimensionValueId(Type E)
Definition ShaderPermutation.h:103
static constexpr Type MaxValue
Definition ShaderPermutation.h:99
static int32 ToDefineValue(Type E)
Definition ShaderPermutation.h:111
static Type FromDimensionValueId(int32 PermutationId)
Definition ShaderPermutation.h:188
static int32 ToDimensionValueId(Type E)
Definition ShaderPermutation.h:172
int32 Type
Definition ShaderPermutation.h:160
static int32 ToDefineValue(Type E)
Definition ShaderPermutation.h:182
Definition ShaderPermutation.h:128
static int32 ToDimensionValueId(Type E)
Definition ShaderPermutation.h:142
static constexpr bool IsMultiDimensional
Definition ShaderPermutation.h:138
static Type FromDimensionValueId(int32 PermutationId)
Definition ShaderPermutation.h:149
int32 Type
Definition ShaderPermutation.h:130
static constexpr int32 PermutationCount
Definition ShaderPermutation.h:133