UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CrossCompilerCommon.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 CrossCompilerCommon.h: Common functionality between compiler & runtime.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10#include "ShaderCore.h"
11#include "ShaderCompilerCore.h"
12
14{
26
27 // Make sure these enums match hlslcc EArray on Engine\Source\ThirdParty\hlslcc\hlslcc\src\hlslcc_lib\glsl_parser_extras.h
28 enum class EPackedTypeName : int8
29 {
30 HighP = 'h',
31 MediumP = 'm',
32 LowP = 'l',
33 Int = 'i',
34 Uint = 'u',
35 Sampler = 's',
36 Image = 'g',
37
38 Invalid = ' ',
39 };
40
42 {
43 HighP = 0,
44 MediumP = 1,
45 LowP = 2,
46 Int = 3,
47 Uint = 4,
48 Sampler = 5,
49 Image = 6,
50
51 Max = 7,
52 Invalid = -1,
53 };
54
55 enum
56 {
57 PACKED_TYPENAME_HIGHP = (int32)EPackedTypeName::HighP, // Make sure these enums match hlslcc
64
73 };
74
75 static inline uint8 ShaderStageIndexToTypeName(uint8 ShaderStage)
76 {
77 switch (ShaderStage)
78 {
79 case SHADER_STAGE_VERTEX: return 'v';
80 case SHADER_STAGE_PIXEL: return 'p';
81 case SHADER_STAGE_GEOMETRY: return 'g';
82 case SHADER_STAGE_COMPUTE: return 'c';
83 default: break;
84 }
85 checkf(0, TEXT("invalid value: ShaderStageIndexToTypeName(ShaderStage = '%u')"), ShaderStage);
86 return 0;
87 }
88
89 static inline uint8 PackedTypeIndexToTypeName(uint8 ArrayType)
90 {
91 switch (ArrayType)
92 {
100 default: break;
101 }
102 checkf(0, TEXT("invalid value: PackedTypeIndexToTypeName(ArrayType = %d)"), (int32)ArrayType);
103 return 0;
104 }
105
106 static inline uint8 PackedTypeNameToTypeIndex(uint8 ArrayName)
107 {
108 switch (ArrayName)
109 {
110 case 0: // Fallthrough; Used for bindless on some platforms
118 default: break;
119 }
120 checkf(0, TEXT("invalid value: PackedTypeNameToTypeIndex(ArrayName = %d)"), (int32)ArrayName);
121 return 0;
122 }
123
124 static inline bool IsValidPackedTypeName(EPackedTypeName TypeName)
125 {
126 switch (TypeName)
127 {
135 return true;
136 default: break;
137 }
138
139 return false;
140 }
141
142 static inline EPackedTypeName PackedTypeIndexToTypeName(EPackedTypeIndex TypeIndex)
143 {
144 switch (TypeIndex)
145 {
153 default: break;
154 }
155
157 }
158
159 static inline EPackedTypeIndex PackedTypeNameToTypeIndex(EPackedTypeName TypeName)
160 {
161 switch (TypeName)
162 {
170 default: break;
171 }
172
174 }
175
177 {
178 uint16 Size; // Bytes
179 uint8 TypeName; // PACKED_TYPENAME
180 uint8 TypeIndex; // PACKED_TYPE
181 };
182
184 {
185 Ar << Info.Size;
186 Ar << Info.TypeName;
187 Ar << Info.TypeIndex;
188 return Ar;
189 }
190
191#pragma warning(push)
192#pragma warning(error : 4596)
194 {
196
198 static constexpr int32 MaxIndex = (sizeof(decltype(FShaderBindingInOutMask::Bitmask)) * 8u) - 1u;
199
202
205 {
207 Bitmask |= (1u << Index);
208 }
209
211 inline bool IsFieldEnabled(int32 Index) const
212 {
214 return (Bitmask & (1u << Index)) != 0;
215 }
216
218 {
219 return Lhs.Bitmask == Rhs.Bitmask;
220 }
221
223 {
224 return !(Lhs == Rhs);
225 }
226 };
227#pragma warning(pop)
228
230 {
231 Ar << BindingInOutMask.Bitmask;
232 return Ar;
233 }
234
248
249 // Information for copying members from uniform buffers to packed
260
262 {
263 Ar << Info.SourceOffsetInFloats;
264 Ar << Info.SourceUBIndex;
265 Ar << Info.DestUBIndex;
266 Ar << Info.DestUBTypeName;
267 if (Ar.IsLoading())
268 {
269 Info.DestUBTypeIndex = CrossCompiler::PackedTypeNameToTypeIndex(Info.DestUBTypeName);
270 }
271 Ar << Info.DestOffsetInFloats;
272 Ar << Info.SizeInFloats;
273 return Ar;
274 }
275}
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#define TEXT(x)
Definition Platform.h:1272
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
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
Definition Array.h:670
Definition CrossCompilerCommon.h:14
@ PACKED_TYPENAME_INT
Definition CrossCompilerCommon.h:60
@ PACKED_TYPEINDEX_MAX
Definition CrossCompilerCommon.h:72
@ PACKED_TYPENAME_IMAGE
Definition CrossCompilerCommon.h:63
@ PACKED_TYPEINDEX_SAMPLER
Definition CrossCompilerCommon.h:70
@ PACKED_TYPEINDEX_LOWP
Definition CrossCompilerCommon.h:67
@ PACKED_TYPENAME_UINT
Definition CrossCompilerCommon.h:61
@ PACKED_TYPEINDEX_MEDIUMP
Definition CrossCompilerCommon.h:66
@ PACKED_TYPENAME_SAMPLER
Definition CrossCompilerCommon.h:62
@ PACKED_TYPEINDEX_HIGHP
Definition CrossCompilerCommon.h:65
@ PACKED_TYPEINDEX_IMAGE
Definition CrossCompilerCommon.h:71
@ PACKED_TYPENAME_HIGHP
Definition CrossCompilerCommon.h:57
@ PACKED_TYPENAME_LOWP
Definition CrossCompilerCommon.h:59
@ PACKED_TYPEINDEX_UINT
Definition CrossCompilerCommon.h:69
@ PACKED_TYPEINDEX_INT
Definition CrossCompilerCommon.h:68
@ PACKED_TYPENAME_MEDIUMP
Definition CrossCompilerCommon.h:58
FArchive & operator<<(FArchive &Ar, FPackedArrayInfo &Info)
Definition CrossCompilerCommon.h:183
EShaderStage
Definition CrossCompilerCommon.h:16
@ NUM_NON_COMPUTE_SHADER_STAGES
Definition CrossCompilerCommon.h:22
@ NUM_SHADER_STAGES
Definition CrossCompilerCommon.h:24
@ SHADER_STAGE_COMPUTE
Definition CrossCompilerCommon.h:23
@ SHADER_STAGE_GEOMETRY
Definition CrossCompilerCommon.h:19
@ SHADER_STAGE_MESH
Definition CrossCompilerCommon.h:20
@ SHADER_STAGE_PIXEL
Definition CrossCompilerCommon.h:18
@ SHADER_STAGE_VERTEX
Definition CrossCompilerCommon.h:17
@ SHADER_STAGE_AMPLIFICATION
Definition CrossCompilerCommon.h:21
EPackedTypeIndex
Definition CrossCompilerCommon.h:42
EPackedTypeName
Definition CrossCompilerCommon.h:29
Definition VulkanCommon.h:29
U16 Index
Definition radfft.cpp:71
Definition CrossCompilerCommon.h:177
uint8 TypeIndex
Definition CrossCompilerCommon.h:180
uint16 Size
Definition CrossCompilerCommon.h:178
uint8 TypeName
Definition CrossCompilerCommon.h:179
Definition CrossCompilerCommon.h:194
uint32 Bitmask
Definition CrossCompilerCommon.h:195
static constexpr int32 MaxIndex
Definition CrossCompilerCommon.h:198
friend bool operator==(const FShaderBindingInOutMask &Lhs, const FShaderBindingInOutMask &Rhs)
Definition CrossCompilerCommon.h:217
friend bool operator!=(const FShaderBindingInOutMask &Lhs, const FShaderBindingInOutMask &Rhs)
Definition CrossCompilerCommon.h:222
static constexpr int32 DepthStencilMaskIndex
Definition CrossCompilerCommon.h:201
bool IsFieldEnabled(int32 Index) const
Definition CrossCompilerCommon.h:211
void EnableField(int32 Index)
Definition CrossCompilerCommon.h:204
Definition CrossCompilerCommon.h:236
FShaderBindingInOutMask InOutMask
Definition CrossCompilerCommon.h:241
bool bHasRegularUniformBuffers
Definition CrossCompilerCommon.h:246
TArray< TArray< FPackedArrayInfo > > PackedUniformBuffers
Definition CrossCompilerCommon.h:237
uint8 NumAccelerationStructures
Definition CrossCompilerCommon.h:245
uint8 NumSamplers
Definition CrossCompilerCommon.h:242
TArray< FPackedArrayInfo > PackedGlobalArrays
Definition CrossCompilerCommon.h:238
FShaderCompilerResourceTable ShaderResourceTable
Definition CrossCompilerCommon.h:239
uint8 NumUAVs
Definition CrossCompilerCommon.h:244
uint8 NumUniformBuffers
Definition CrossCompilerCommon.h:243
Definition CrossCompilerCommon.h:251
uint16 SourceOffsetInFloats
Definition CrossCompilerCommon.h:252
uint16 SizeInFloats
Definition CrossCompilerCommon.h:258
uint8 DestUBIndex
Definition CrossCompilerCommon.h:254
uint16 DestOffsetInFloats
Definition CrossCompilerCommon.h:257
uint8 DestUBTypeName
Definition CrossCompilerCommon.h:255
uint8 SourceUBIndex
Definition CrossCompilerCommon.h:253
uint8 DestUBTypeIndex
Definition CrossCompilerCommon.h:256
Definition ShaderCompilerCore.h:121