UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ShaderParameterMacros.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 ShaderParameterMacros.h: Macros to builds shader parameter structures and
5 their metadata.
6=============================================================================*/
7
8#pragma once
9
13#include "Algo/Reverse.h"
16#include "Misc/AlignedElement.h"
18#include "RHICommandList.h"
20
22
23class FRDGTexture;
24class FRDGTextureSRV;
25class FRDGTextureUAV;
26class FRDGBuffer;
27class FRDGBufferSRV;
28class FRDGBufferUAV;
32template <typename TUniformStruct> class TRDGUniformBuffer;
33
35template<typename T, int32 Alignment>
37
38#define IMPLEMENT_ALIGNED_TYPE(Alignment) \
39 template<typename T> \
40 class TAlignedTypedef<T,Alignment> \
41 { \
42 public: \
43 typedef MS_ALIGN(Alignment) T Type GCC_ALIGN(Alignment); \
44 };
45
51#undef IMPLEMENT_ALIGNED_TYPE
52
53
54#if PLATFORM_64BITS
55
57template<typename PtrType>
59
60static_assert(sizeof(void*) == 8, "Wrong PLATFORM_64BITS settings.");
61
62#else
63
65template<typename PtrType>
67{
68public:
71
73 : Ref(Other)
74 { }
75
79
80 inline void operator=(const PtrType& Other)
81 {
82 Ref = Other;
83 }
84
85 inline operator PtrType&()
86 {
87 return Ref;
88 }
89
90 inline operator const PtrType&() const
91 {
92 return Ref;
93 }
94
95 inline const PtrType& operator->() const
96 {
97 return Ref;
98 }
99
100private:
101 PtrType Ref;
102 #if !PLATFORM_64BITS
103 uint32 _Padding;
104 static_assert(sizeof(void*) == 4, "Wrong PLATFORM_64BITS settings.");
105 #endif
106
107 static_assert(sizeof(PtrType) == sizeof(void*), "T should be a pointer.");
108};
109
110#endif // !PLATFORM_64BITS
111
113template<class UniformBufferStructType, typename = void>
115{
117 {
118 // This uses ADL rather than templates, because template specializations can't be defined in a different namespace
120 }
121};
122
123template<class UniformBufferStructType>
124struct TUniformBufferMetadataHelper<UniformBufferStructType, typename std::enable_if<!std::is_same<typename UniformBufferStructType::FTypeInfo, void>::value>::type>
125{
127 {
128 return UniformBufferStructType::FTypeInfo::GetStructMetadata();
129 }
130};
131
132
134template<typename TBufferStruct>
136{
137 static_assert(!TIsUECoreVariant<TBufferStruct, double>::Value, "UniformBufferRHIRef cannot be double core variants! Switch to float variant.");
138
139public:
141 TUniformBufferRef() = default;
142
146 {
148 TEXT("Attempted to create a uniform buffer of type '%s' from uniform buffer pointer of type '%s'"),
150 *InRHIRef->GetLayout().Name);
151 }
152
163
164 UE_DEPRECATED(5.3, "UpdateUniformBufferImmediate requires a command list.")
165 void UpdateUniformBufferImmediate(const TBufferStruct& Value)
166 {
168 RHIUpdateUniformBuffer(GetReference(), &Value);
170 }
171
173 {
174 RHICmdList.UpdateUniformBuffer(GetReference(), &Value);
175 }
176
177private:
178
179 template<typename TBufferStruct2>
180 friend class TUniformBuffer;
181
182 friend class TRDGUniformBuffer<TBufferStruct>;
183};
184
186{
187public:
189
191 {
192 return UniformBuffer;
193 }
194
196 {
197 return BindingFlags;
198 }
199
200 inline bool IsStatic() const
201 {
203 }
204
205 inline bool IsShader() const
206 {
208 }
209
210 inline operator bool() const
211 {
212 return UniformBuffer != nullptr;
213 }
214
215protected:
220
221private:
224};
225
226template<typename TBufferStruct>
228 : public FUniformBufferBinding
229{
230public:
232
236
239 {
240#if DO_CHECK
242 checkf(
243 EnumHasAllFlags(StructMetadata->GetBindingFlags(), GetBindingFlags()),
244 TEXT("Uniform buffer binding flags don't match those supported by the uniform buffer layout '%s."),
245 StructMetadata->GetStructTypeName());
246#endif
247 }
248
253
255 {
256 return GetUniformBuffer();
257 }
258};
259
260template <typename TBufferStruct>
265
266template <typename TBufferStruct>
271
273{
274public:
276
278 {
279 return UniformBuffer;
280 }
281
283 {
284 return BindingFlags;
285 }
286
287 inline bool IsStatic() const
288 {
290 }
291
292 inline bool IsShader() const
293 {
295 }
296
297 inline operator bool() const
298 {
299 return UniformBuffer != nullptr;
300 }
301
303 {
304 return UniformBuffer;
305 }
306
307protected:
312
313private:
316};
317
318template <typename TBufferStruct>
321{
322public:
324
328
331 {
332#if DO_CHECK
334 checkf(
335 EnumHasAllFlags(StructMetadata->GetBindingFlags(), GetBindingFlags()),
336 TEXT("RDG uniform buffer binding flags don't match those supported by the uniform buffer layout '%s."),
337 StructMetadata->GetStructTypeName());
338#endif
339 }
340
345
347 {
348 return GetUniformBuffer();
349 }
350};
351
353template <typename TBufferStruct>
358
360template <typename TBufferStruct>
365
367{
368public:
369 FRDGBufferAccess() = default;
376
377 inline FRDGBuffer* GetBuffer() const { return Buffer; }
378 inline ERHIAccess GetAccess() const { return Access; }
379
380 inline operator bool() const
381 {
382 return Buffer != nullptr;
383 }
384
385 inline FRDGBuffer* operator->() const
386 {
387 check(Buffer);
388 return Buffer;
389 }
390
391 inline operator FRDGBuffer*() const
392 {
393 return Buffer;
394 }
395
396 inline bool operator==(const FRDGBufferAccess& RHS) const
397 {
398 return Buffer == RHS.Buffer && Access == RHS.Access;
399 }
400
401 inline bool operator!=(const FRDGBufferAccess& RHS) const
402 {
403 return Buffer != RHS.Buffer || Access != RHS.Access;
404 }
405
406private:
409};
410
411template <ERHIAccess InAccess>
413 : public FRDGBufferAccess
414{
415public:
416 static_assert(IsValidAccess(InAccess), "Buffer access is invalid.");
417
423
427};
428
430{
431public:
432 FRDGTextureAccess() = default;
433
439
443
444 inline FRDGTexture* GetTexture() const { return Texture; }
445 inline FRDGTextureSubresourceRange GetSubresourceRange() const { return SubresourceRange; }
446 inline ERHIAccess GetAccess() const { return Access; }
447
448 inline operator bool() const
449 {
450 return Texture != nullptr;
451 }
452
453 inline FRDGTexture* operator->() const
454 {
455 check(Texture);
456 return Texture;
457 }
458
459 inline operator FRDGTexture*() const
460 {
461 return Texture;
462 }
463
464 inline bool operator==(const FRDGTextureAccess& RHS) const
465 {
466 return Texture == RHS.Texture && Access == RHS.Access;
467 }
468
469 inline bool operator!=(const FRDGTextureAccess& RHS) const
470 {
471 return Texture != RHS.Texture || Access != RHS.Access;
472 }
473
474private:
476 FRDGTextureSubresourceRange SubresourceRange;
478};
479
480template <ERHIAccess InAccess>
505
506template <typename ResourceAccessType>
508 : public TArray<ResourceAccessType, FRDGArrayAllocator>
509{
511public:
512 using Super::Super;
513
514private:
515#if !PLATFORM_64BITS
516 uint32 _Padding;
517#endif
518};
519
522
525{
527
530 , LoadAction(InLoadAction)
531 , MipIndex(InMipIndex)
532 , ArraySlice(InArraySlice)
533 {
534 check(Validate());
535 }
536
539 , ResolveTexture(InResolveTexture)
540 , LoadAction(InLoadAction)
541 , MipIndex(InMipIndex)
542 , ArraySlice(InArraySlice)
543 {
544 check(Validate());
545 }
546
548 {
549 return Texture;
550 }
551
553 {
554 return ResolveTexture;
555 }
556
558 {
559 return LoadAction;
560 }
561
563 {
564 return MipIndex;
565 }
566
568 {
569 return ArraySlice;
570 }
571
573 inline bool CanMergeBefore(const FRenderTargetBinding& Other) const
574 {
575 return
576 Texture == Other.Texture &&
577 ResolveTexture == Other.ResolveTexture &&
579 MipIndex == Other.MipIndex &&
580 ArraySlice == Other.ArraySlice;
581 }
582
584 {
586 check(Validate());
587 }
588
590 {
591 ResolveTexture = InTexture;
592 check(Validate());
593 }
594
596 {
597 LoadAction = InLoadAction;
598 check(Validate());
599 }
600
602 {
603 MipIndex = InMipIndex;
604 check(Validate());
605 }
606
608 {
609 ArraySlice = InArraySlice;
610 check(Validate());
611 }
612
613 UE_DEPRECATED(5.1, "GetMipIndex has been renamed to SetMipIndex.")
614 void GetMipIndex(uint8 InMipIndex) { SetMipIndex(InMipIndex); }
615
616private:
619 TAlignedShaderParameterPtr<FRDGTexture*> ResolveTexture = nullptr;
621 uint8 MipIndex = 0;
622 int16 ArraySlice = -1;
623
624 RENDERCORE_API bool Validate() const;
625};
626
627
630{
632
644 , ResolveTexture(nullptr)
645 , DepthLoadAction(InDepthLoadAction)
646 , StencilLoadAction(InStencilLoadAction)
647 , DepthStencilAccess(InDepthStencilAccess)
648 {
649 check(Validate());
650 }
651
666
672 , ResolveTexture(nullptr)
673 , DepthLoadAction(InDepthLoadAction)
674 , DepthStencilAccess(InDepthStencilAccess)
675 {
676 check(Validate());
677 }
678
685 , ResolveTexture(InResolveTexture)
686 , DepthLoadAction(InDepthLoadAction)
687 , DepthStencilAccess(InDepthStencilAccess)
688 {
689 check(Validate());
690 }
691
692 inline FRDGTexture* GetTexture() const
693 {
694 return Texture;
695 }
697 {
698 return ResolveTexture;
699 }
701 {
702 return DepthLoadAction;
703 }
705 {
706 return StencilLoadAction;
707 }
709 {
710 return DepthStencilAccess;
711 }
712
713 // Whether we can merge a render pass using @ref Other into a render pass using this depth stencil binding.
714 inline bool CanMergeBefore(const FDepthStencilBinding& Other) const
715 {
716 return
717 Texture == Other.Texture &&
718 ResolveTexture == Other.ResolveTexture &&
719 Other.DepthLoadAction != ERenderTargetLoadAction::EClear &&
720 Other.StencilLoadAction != ERenderTargetLoadAction::EClear &&
721 DepthStencilAccess == Other.DepthStencilAccess;
722 }
723
725 {
727 check(Validate());
728 }
729
731 {
732 ResolveTexture = InTexture;
733 check(Validate());
734 }
735
737 {
738 DepthStencilAccess = InAccess;
739 check(Validate());
740 }
741
743 {
744 DepthLoadAction = InAction;
745 check(Validate());
746 }
747
749 {
750 StencilLoadAction = InAction;
751 check(Validate());
752 }
753
754private:
760 TAlignedShaderParameterPtr<FRDGTexture*> ResolveTexture = nullptr;
764
765 RENDERCORE_API bool Validate() const;
766};
767
770{
774 uint32 NumOcclusionQueries = 0;
776 uint8 MultiViewCount = 0;
777 FRDGTexture* ShadingRateTexture = nullptr;
778
789
791 {
792 return Output[Index];
793 }
794
795 template <typename TFunction>
797 {
798 for (int32 Index = 0; Index < Output.Num(); Index++)
799 {
800 if (Output[Index].GetTexture())
801 {
803 }
804 else
805 {
806 break;
807 }
808 }
809 }
810
811 template <typename TFunction>
813 {
814 for (int32 Index = 0; Index < Output.Num(); Index++)
815 {
816 if (Output[Index].GetTexture())
817 {
819 }
820 else
821 {
822 break;
823 }
824 }
825 }
826
828 {
829 uint32 Count = 0;
830 for (; Output[Count].GetTexture() != nullptr; ++Count) {};
831 return Count;
832 }
833
835 {
837 {
838 if (!Output[Index].CanMergeBefore(Other.Output[Index]))
839 {
840 return false;
841 }
842 }
843
844 if (!DepthStencil.CanMergeBefore(Other.DepthStencil))
845 {
846 return false;
847 }
848
849 if (ResolveRect != Other.ResolveRect ||
850 (NumOcclusionQueries != Other.NumOcclusionQueries && Other.NumOcclusionQueries != 0) ||
851 SubpassHint != Other.SubpassHint ||
852 MultiViewCount != Other.MultiViewCount ||
853 ShadingRateTexture != Other.ShadingRateTexture)
854 {
855 return false;
856 }
857
858 return true;
859 }
860
862 {
863 static constexpr int32 NumRows = 1;
864 static constexpr int32 NumColumns = 1;
865 static constexpr int32 NumElements = 0;
866 static constexpr int32 Alignment = SHADER_PARAMETER_STRUCT_ALIGNMENT;
867 static constexpr bool bIsStoredInConstantBuffer = false;
868
870
871 static inline const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
872 };
873};
874
875static_assert(sizeof(FRenderTargetBindingSlots) == 256, "FRenderTargetBindingSlots needs to be same size on all platforms.");
876
878template<typename TElement, uint32 NumElements>
879class alignas(SHADER_PARAMETER_POINTER_ALIGNMENT) TShaderResourceParameterArray : public TStaticArray<std::conditional_t<SHADER_PARAMETER_POINTER_ALIGNMENT == alignof(TElement), TElement, UE::Core::TAlignedElement<TElement, SHADER_PARAMETER_POINTER_ALIGNMENT>>, NumElements>
880{
881public:
883 {
884 for (uint32 i = 0; i < NumElements; i++)
885 {
886 (*this)[i] = nullptr;
887 }
888 }
889};
890
891
893template<typename TypeParameter>
895{
897 static constexpr EUniformBufferBaseType BaseType = UBMT_INVALID;
898
900 static constexpr int32 NumRows = 1;
901 static constexpr int32 NumColumns = 1;
902
906 static constexpr int32 NumElements = 0;
907
909 static constexpr int32 Alignment = alignof(TypeParameter);
910
916 static constexpr bool bIsStoredInConstantBuffer = true;
917
920
923
924 static const FShaderParametersMetadata* GetStructMetadata() { return TypeParameter::FTypeInfo::GetStructMetadata(); }
925};
926
927// Compile SHADER_PARAMETER(bool, MyBool), just to give good error message to programmer why they shouldn't do that.
928template<>
930{
931 static constexpr EUniformBufferBaseType BaseType = UBMT_BOOL;
932 static constexpr int32 NumRows = 1;
933 static constexpr int32 NumColumns = 1;
934 static constexpr int32 NumElements = 0;
935 static constexpr int32 Alignment = 4;
936 static constexpr bool bIsStoredInConstantBuffer = true;
937
940
941 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
942};
943
944template<>
946{
947 static constexpr EUniformBufferBaseType BaseType = UBMT_UINT32;
948 static constexpr int32 NumRows = 1;
949 static constexpr int32 NumColumns = 1;
950 static constexpr int32 NumElements = 0;
951 static constexpr int32 Alignment = 4;
952 static constexpr bool bIsStoredInConstantBuffer = true;
953
956
957 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
958};
959
960
961template<>
963{
964 static constexpr EUniformBufferBaseType BaseType = UBMT_INT32;
965 static constexpr int32 NumRows = 1;
966 static constexpr int32 NumColumns = 1;
967 static constexpr int32 NumElements = 0;
968 static constexpr int32 Alignment = 4;
969 static constexpr bool bIsStoredInConstantBuffer = true;
970
973
974 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
975};
976
977template<>
979{
980 static constexpr EUniformBufferBaseType BaseType = UBMT_FLOAT32;
981 static constexpr int32 NumRows = 1;
982 static constexpr int32 NumColumns = 1;
983 static constexpr int32 NumElements = 0;
984 static constexpr int32 Alignment = 4;
985 static constexpr bool bIsStoredInConstantBuffer = true;
986
989
990 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
991};
992
993template<>
995{
996 static constexpr EUniformBufferBaseType BaseType = UBMT_FLOAT32;
997 static constexpr int32 NumRows = 1;
998 static constexpr int32 NumColumns = 2;
999 static constexpr int32 NumElements = 0;
1000 static constexpr int32 Alignment = 8;
1001 static constexpr bool bIsStoredInConstantBuffer = true;
1002
1005
1006 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1007};
1008
1009template<>
1011{
1012 static constexpr EUniformBufferBaseType BaseType = UBMT_FLOAT32;
1013 static constexpr int32 NumRows = 1;
1014 static constexpr int32 NumColumns = 3;
1015 static constexpr int32 NumElements = 0;
1016 static constexpr int32 Alignment = 16;
1017 static constexpr bool bIsStoredInConstantBuffer = true;
1018
1021
1022 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1023};
1024
1025template<>
1027{
1028 static constexpr EUniformBufferBaseType BaseType = UBMT_FLOAT32;
1029 static constexpr int32 NumRows = 1;
1030 static constexpr int32 NumColumns = 4;
1031 static constexpr int32 NumElements = 0;
1032 static constexpr int32 Alignment = 16;
1033 static constexpr bool bIsStoredInConstantBuffer = true;
1034
1037
1038 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1039};
1040
1041template<>
1043{
1044 static constexpr EUniformBufferBaseType BaseType = UBMT_FLOAT32;
1045 static constexpr int32 NumRows = 1;
1046 static constexpr int32 NumColumns = 4;
1047 static constexpr int32 NumElements = 0;
1048 static constexpr int32 Alignment = 16;
1049 static constexpr bool bIsStoredInConstantBuffer = true;
1050
1053
1054 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1055};
1056
1057template<>
1059{
1060 static constexpr EUniformBufferBaseType BaseType = UBMT_INT32;
1061 static constexpr int32 NumRows = 1;
1062 static constexpr int32 NumColumns = 2;
1063 static constexpr int32 NumElements = 0;
1064 static constexpr int32 Alignment = 8;
1065 static constexpr bool bIsStoredInConstantBuffer = true;
1066
1069
1070 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1071};
1072
1073template<>
1075{
1076 static constexpr EUniformBufferBaseType BaseType = UBMT_UINT32;
1077 static constexpr int32 NumRows = 1;
1078 static constexpr int32 NumColumns = 2;
1079 static constexpr int32 NumElements = 0;
1080 static constexpr int32 Alignment = 8;
1081 static constexpr bool bIsStoredInConstantBuffer = true;
1082
1085
1086 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1087};
1088
1089template<>
1091{
1092 static constexpr EUniformBufferBaseType BaseType = UBMT_INT32;
1093 static constexpr int32 NumRows = 1;
1094 static constexpr int32 NumColumns = 3;
1095 static constexpr int32 NumElements = 0;
1096 static constexpr int32 Alignment = 16;
1097 static constexpr bool bIsStoredInConstantBuffer = true;
1098
1101
1102 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1103};
1104
1105template<>
1107{
1108 static constexpr EUniformBufferBaseType BaseType = UBMT_UINT32;
1109 static constexpr int32 NumRows = 1;
1110 static constexpr int32 NumColumns = 3;
1111 static constexpr int32 NumElements = 0;
1112 static constexpr int32 Alignment = 16;
1113 static constexpr bool bIsStoredInConstantBuffer = true;
1114
1117
1118 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1119};
1120
1121template<>
1123{
1124 static constexpr EUniformBufferBaseType BaseType = UBMT_INT32;
1125 static constexpr int32 NumRows = 1;
1126 static constexpr int32 NumColumns = 4;
1127 static constexpr int32 NumElements = 0;
1128 static constexpr int32 Alignment = 16;
1129 static constexpr bool bIsStoredInConstantBuffer = true;
1130
1133
1134 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1135};
1136
1137template<>
1139{
1140 static constexpr EUniformBufferBaseType BaseType = UBMT_UINT32;
1141 static constexpr int32 NumRows = 1;
1142 static constexpr int32 NumColumns = 4;
1143 static constexpr int32 NumElements = 0;
1144 static constexpr int32 Alignment = 16;
1145 static constexpr bool bIsStoredInConstantBuffer = true;
1146
1149
1150 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1151};
1152
1153template<>
1155{
1156 static constexpr EUniformBufferBaseType BaseType = UBMT_INT32;
1157 static constexpr int32 NumRows = 1;
1158 static constexpr int32 NumColumns = 4;
1159 static constexpr int32 NumElements = 0;
1160 static constexpr int32 Alignment = 16;
1161 static constexpr bool bIsStoredInConstantBuffer = true;
1162
1165
1166 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1167};
1168
1169template<>
1171{
1172 static constexpr EUniformBufferBaseType BaseType = UBMT_FLOAT32;
1173 static constexpr int32 NumRows = 1;
1174 static constexpr int32 NumColumns = 4;
1175 static constexpr int32 NumElements = 0;
1176 static constexpr int32 Alignment = 16;
1177 static constexpr bool bIsStoredInConstantBuffer = true;
1178
1181
1182 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1183};
1184
1185template<>
1187{
1188 static constexpr EUniformBufferBaseType BaseType = UBMT_FLOAT32;
1189 static constexpr int32 NumRows = 4;
1190 static constexpr int32 NumColumns = 4;
1191 static constexpr int32 NumElements = 0;
1192 static constexpr int32 Alignment = 16;
1193 static constexpr bool bIsStoredInConstantBuffer = true;
1194
1197
1198 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1199};
1200
1201template <typename BufferAccessType>
1203{
1204 static constexpr int32 NumRows = 1;
1205 static constexpr int32 NumColumns = 1;
1206 static constexpr int32 NumElements = 0;
1207 static constexpr int32 Alignment = SHADER_PARAMETER_POINTER_ALIGNMENT;
1208 static constexpr bool bIsStoredInConstantBuffer = false;
1209
1211
1212 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1213
1214 static_assert(sizeof(TAlignedType) == SHADER_PARAMETER_POINTER_ALIGNMENT * 2, "Uniform buffer layout must not be platform dependent.");
1215};
1216
1217template <typename TextureAccessType>
1219{
1220 static constexpr int32 NumRows = 1;
1221 static constexpr int32 NumColumns = 1;
1222 static constexpr int32 NumElements = 0;
1223 static constexpr int32 Alignment = SHADER_PARAMETER_POINTER_ALIGNMENT;
1224 static constexpr bool bIsStoredInConstantBuffer = false;
1225
1227
1228 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1229
1230 static_assert(sizeof(TAlignedType) == SHADER_PARAMETER_POINTER_ALIGNMENT * 3, "Uniform buffer layout must not be platform dependent.");
1231};
1232
1233
1234template<typename T, size_t InNumElements>
1236{
1239 static constexpr int32 NumColumns = TShaderParameterTypeInfo<T>::NumColumns;
1240 static constexpr int32 NumElements = InNumElements;
1242 static constexpr bool bIsStoredInConstantBuffer = TShaderParameterTypeInfo<T>::bIsStoredInConstantBuffer;
1243
1244 using TAlignedType = TStaticArray<std::conditional_t<Alignment == alignof(T), T, UE::Core::TAlignedElement<T, Alignment>>, InNumElements>;
1246
1248
1249 static_assert(((sizeof(T) % 16) == 0), "Array element size does not satisfy 16 byte alignment requirements. Try packing it with other values in a vector or using SHADER_PARAMETER_SCALAR_ARRAY.");
1250};
1251
1252template<typename T,size_t InNumElements,uint32 IgnoredAlignment>
1254{
1257 static constexpr int32 NumColumns = TShaderParameterTypeInfo<T>::NumColumns;
1258 static constexpr int32 NumElements = InNumElements;
1260 static constexpr bool bIsStoredInConstantBuffer = TShaderParameterTypeInfo<T>::bIsStoredInConstantBuffer;
1261
1262 using TAlignedType = TStaticArray<std::conditional_t<Alignment == alignof(T), T, UE::Core::TAlignedElement<T, Alignment>>, InNumElements>;
1264
1266
1267 static_assert(((sizeof(T) % 16) == 0), "Array element size does not satisfy 16 byte alignment requirements. Try packing it with other values in a vector or using SHADER_PARAMETER_SCALAR_ARRAY.");
1268};
1269
1270template<typename ShaderResourceType>
1272{
1273 static constexpr int32 NumRows = 1;
1274 static constexpr int32 NumColumns = 1;
1275 static constexpr int32 NumElements = 0;
1276 static constexpr int32 Alignment = SHADER_PARAMETER_POINTER_ALIGNMENT;
1277 static constexpr bool bIsStoredInConstantBuffer = false;
1278
1280
1281 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1282
1283 static_assert(sizeof(TAlignedType) == SHADER_PARAMETER_POINTER_ALIGNMENT, "Uniform buffer layout must not be platform dependent.");
1284};
1285
1286template<typename ShaderResourceType, size_t InNumElements>
1288{
1289 static constexpr int32 NumRows = 1;
1290 static constexpr int32 NumColumns = 1;
1291 static constexpr int32 NumElements = InNumElements;
1292 static constexpr int32 Alignment = SHADER_PARAMETER_POINTER_ALIGNMENT;
1293 static constexpr bool bIsStoredInConstantBuffer = false;
1294
1296
1297 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
1298};
1299
1300template<class UniformBufferStructType>
1302{
1303 static constexpr int32 NumRows = 1;
1304 static constexpr int32 NumColumns = 1;
1305 static constexpr int32 NumElements = 0;
1306 static constexpr int32 Alignment = SHADER_PARAMETER_POINTER_ALIGNMENT;
1307 static constexpr bool bIsStoredInConstantBuffer = false;
1308
1311
1313};
1314
1315template<class UniformBufferStructType>
1317{
1318 static constexpr int32 NumRows = 1;
1319 static constexpr int32 NumColumns = 1;
1320 static constexpr int32 NumElements = 0;
1321 static constexpr int32 Alignment = SHADER_PARAMETER_STRUCT_ALIGNMENT;
1322 static constexpr bool bIsStoredInConstantBuffer = false;
1323
1326
1328};
1329
1330template<class UniformBufferStructType>
1332{
1333 static constexpr int32 NumRows = 1;
1334 static constexpr int32 NumColumns = 1;
1335 static constexpr int32 NumElements = 0;
1336 static constexpr int32 Alignment = SHADER_PARAMETER_STRUCT_ALIGNMENT;
1337 static constexpr bool bIsStoredInConstantBuffer = false;
1338
1341
1343};
1344
1345template<typename StructType>
1347{
1348 static constexpr int32 NumRows = 1;
1349 static constexpr int32 NumColumns = 1;
1350 static constexpr int32 NumElements = 0;
1351 static constexpr int32 Alignment = SHADER_PARAMETER_STRUCT_ALIGNMENT;
1352 static constexpr bool bIsStoredInConstantBuffer = true;
1353
1354 using TAlignedType = StructType;
1355
1356 static const FShaderParametersMetadata* GetStructMetadata() { return StructType::FTypeInfo::GetStructMetadata(); }
1357};
1358
1359template<typename StructType, size_t InNumElements>
1361{
1362 static constexpr int32 NumRows = 1;
1363 static constexpr int32 NumColumns = 1;
1364 static constexpr int32 NumElements = InNumElements;
1365 static constexpr int32 Alignment = SHADER_PARAMETER_STRUCT_ALIGNMENT;
1366 static constexpr bool bIsStoredInConstantBuffer = true;
1367
1369
1370 static const FShaderParametersMetadata* GetStructMetadata() { return StructType::FTypeInfo::GetStructMetadata(); }
1371};
1372
1373#define INTERNAL_BEGIN_UNIFORM_BUFFER_STRUCT(DllStorage) \
1374 static DllStorage const FShaderParametersMetadata* GetStructMetadata();
1375
1376#define INTERNAL_UNIFORM_BUFFER_STRUCT_GET_STRUCT_METADATA(StructTypeName) \
1377 { return StructTypeName::GetStructMetadata(); }
1378
1379#define INTERNAL_SHADER_PARAMETER_GET_STRUCT_METADATA(StructTypeName) \
1380 { \
1381 static FShaderParametersMetadata StaticStructMetadata(\
1382 FShaderParametersMetadata::EUseCase::ShaderParameterStruct, \
1383 EUniformBufferBindingFlags::Shader, \
1384 TEXT(#StructTypeName), \
1385 TEXT(#StructTypeName), \
1386 nullptr, \
1387 nullptr, \
1388 FTypeInfo::FileName, \
1389 FTypeInfo::FileLine, \
1390 sizeof(StructTypeName), \
1391 StructTypeName::zzGetMembers()); \
1392 return &StaticStructMetadata; \
1393 }
1394
1395
1396#define INTERNAL_SHADER_PARAMETER_STRUCT_CREATE_UNIFORM_BUFFER return nullptr;
1397
1398#define INTERNAL_UNIFORM_BUFFER_STRUCT_CREATE_UNIFORM_BUFFER return RHICreateUniformBuffer(&InContents, FTypeInfo::GetStructMetadata()->GetLayoutPtr(), InUsage);
1399
1401#define INTERNAL_SHADER_PARAMETER_STRUCT_BEGIN(StructTypeName,DllStorage,ConstructorSuffix,GetStructMetadataScope,CreateUniformBufferImpl) \
1402 MS_ALIGN(SHADER_PARAMETER_STRUCT_ALIGNMENT) class StructTypeName \
1403 { \
1404 public: \
1405 DllStorage StructTypeName () ConstructorSuffix \
1406 struct FTypeInfo { \
1407 static constexpr int32 NumRows = 1; \
1408 static constexpr int32 NumColumns = 1; \
1409 static constexpr int32 NumElements = 0; \
1410 static constexpr int32 Alignment = SHADER_PARAMETER_STRUCT_ALIGNMENT; \
1411 static constexpr bool bIsStoredInConstantBuffer = true; \
1412 static constexpr const ANSICHAR* const FileName = UE_LOG_SOURCE_FILE(__builtin_FILE()); \
1413 static constexpr int32 FileLine = __builtin_LINE(); \
1414 using TAlignedType = StructTypeName; \
1415 static const FShaderParametersMetadata* GetStructMetadata() GetStructMetadataScope \
1416 }; \
1417 static FUniformBufferRHIRef CreateUniformBuffer(const StructTypeName& InContents, EUniformBufferUsage InUsage) \
1418 { \
1419 CreateUniformBufferImpl \
1420 } \
1421 private: \
1422 typedef StructTypeName zzTThisStruct; \
1423 struct zzFirstMemberId { enum { HasDeclaredResource = 0 }; }; \
1424 typedef void* zzFuncPtr; \
1425 typedef zzFuncPtr(*zzMemberFunc)(zzFirstMemberId, TArray<FShaderParametersMetadata::FMember>*); \
1426 static zzFuncPtr zzAppendMemberGetPrev(zzFirstMemberId, TArray<FShaderParametersMetadata::FMember>*) \
1427 { \
1428 return nullptr; \
1429 } \
1430 typedef zzFirstMemberId
1431
1433#define INTERNAL_SHADER_PARAMETER_EXPLICIT(BaseType,TypeInfo,MemberType,MemberName,ArrayDecl,DefaultValue,Precision,OptionalShaderType,IsMemberStruct) \
1434 zzMemberId##MemberName; \
1435 public: \
1436 alignas(TypeInfo::Alignment) TypeInfo::TAlignedType MemberName DefaultValue; \
1437 static_assert(BaseType != UBMT_INVALID, "Invalid type " #MemberType " of member " #MemberName "."); \
1438 private: \
1439 struct zzNextMemberId##MemberName { enum { HasDeclaredResource = zzMemberId##MemberName::HasDeclaredResource || !TypeInfo::bIsStoredInConstantBuffer }; }; \
1440 static zzFuncPtr zzAppendMemberGetPrev(zzNextMemberId##MemberName, TArray<FShaderParametersMetadata::FMember>* Members) \
1441 { \
1442 static_assert(TypeInfo::bIsStoredInConstantBuffer || TIsArrayOrRefOfTypeByPredicate<decltype(OptionalShaderType), TIsCharEncodingCompatibleWithTCHAR>::Value, "No shader type for " #MemberName "."); \
1443 static_assert(\
1444 (STRUCT_OFFSET(zzTThisStruct, MemberName) & (TypeInfo::Alignment - 1)) == 0, \
1445 "Misaligned uniform buffer struct member " #MemberName "."); \
1446 Members->Add(FShaderParametersMetadata::FMember( \
1447 TEXT(#MemberName), \
1448 (const TCHAR*)OptionalShaderType, \
1449 __LINE__, \
1450 STRUCT_OFFSET(zzTThisStruct,MemberName), \
1451 EUniformBufferBaseType(BaseType), \
1452 Precision, \
1453 TypeInfo::NumRows, \
1454 TypeInfo::NumColumns, \
1455 TypeInfo::NumElements, \
1456 TypeInfo::GetStructMetadata() \
1457 )); \
1458 zzFuncPtr(*PrevFunc)(zzMemberId##MemberName, TArray<FShaderParametersMetadata::FMember>*); \
1459 PrevFunc = zzAppendMemberGetPrev; \
1460 return (zzFuncPtr)PrevFunc; \
1461 } \
1462 typedef zzNextMemberId##MemberName
1463
1467
1470
1472
1475
1482#define BEGIN_SHADER_PARAMETER_STRUCT(StructTypeName, DllStorage) \
1483 INTERNAL_SHADER_PARAMETER_STRUCT_BEGIN(StructTypeName,, {}, INTERNAL_SHADER_PARAMETER_GET_STRUCT_METADATA(StructTypeName), INTERNAL_SHADER_PARAMETER_STRUCT_CREATE_UNIFORM_BUFFER)
1484
1485#define END_SHADER_PARAMETER_STRUCT() \
1486 zzLastMemberId; \
1487 public: \
1488 static TArray<FShaderParametersMetadata::FMember> zzGetMembers() { \
1489 TArray<FShaderParametersMetadata::FMember> Members; \
1490 zzFuncPtr(*LastFunc)(zzLastMemberId, TArray<FShaderParametersMetadata::FMember>*); \
1491 LastFunc = zzAppendMemberGetPrev; \
1492 zzFuncPtr Ptr = (zzFuncPtr)LastFunc; \
1493 do \
1494 { \
1495 Ptr = reinterpret_cast<zzMemberFunc>(Ptr)(zzFirstMemberId(), &Members); \
1496 } while (Ptr); \
1497 Algo::Reverse(Members); \
1498 return Members; \
1499 } \
1500 } GCC_ALIGN(SHADER_PARAMETER_STRUCT_ALIGNMENT);
1501
1512#define BEGIN_UNIFORM_BUFFER_STRUCT(StructTypeName, DllStorage) \
1513 DECLARE_UNIFORM_BUFFER_STRUCT(StructTypeName, DllStorage) \
1514 INTERNAL_SHADER_PARAMETER_STRUCT_BEGIN(StructTypeName,,{} INTERNAL_BEGIN_UNIFORM_BUFFER_STRUCT(DllStorage), INTERNAL_UNIFORM_BUFFER_STRUCT_GET_STRUCT_METADATA(StructTypeName), INTERNAL_UNIFORM_BUFFER_STRUCT_CREATE_UNIFORM_BUFFER)
1515
1516#define BEGIN_UNIFORM_BUFFER_STRUCT_WITH_CONSTRUCTOR(StructTypeName, DllStorage) \
1517 DECLARE_UNIFORM_BUFFER_STRUCT(StructTypeName, DllStorage) \
1518 INTERNAL_SHADER_PARAMETER_STRUCT_BEGIN(StructTypeName,DllStorage,; INTERNAL_BEGIN_UNIFORM_BUFFER_STRUCT(DllStorage), INTERNAL_UNIFORM_BUFFER_STRUCT_GET_STRUCT_METADATA(StructTypeName), INTERNAL_UNIFORM_BUFFER_STRUCT_CREATE_UNIFORM_BUFFER)
1519
1520#define END_UNIFORM_BUFFER_STRUCT() \
1521 END_SHADER_PARAMETER_STRUCT()
1522
1523
1525{
1526public:
1528 : LazyShaderParametersMetadataAccessor(LazyShaderParametersMetadataAccessor)
1529 {
1530 GetInstances().Add(this);
1531 }
1532
1534
1535 // Actually register all the instances and clear the array
1536 static RENDERCORE_API void CommitAll();
1537 static RENDERCORE_API bool IsReadyForRegistration();
1538
1539private:
1540 TFunctionRef<const FShaderParametersMetadata* ()> LazyShaderParametersMetadataAccessor;
1541};
1542
1543#define IMPLEMENT_UNIFORM_BUFFER_STRUCT_EX(StructTypeName,ShaderVariableName,UsageFlags) \
1544 const FShaderParametersMetadata* GetForwardDeclaredShaderParametersStructMetadata(const StructTypeName* DummyPtr) { return StructTypeName::FTypeInfo::GetStructMetadata(); } \
1545 const FShaderParametersMetadata* StructTypeName::GetStructMetadata() \
1546 { \
1547 ensureMsgf(FShaderParametersMetadataRegistration::IsReadyForRegistration(), TEXT("GetStructMetadata should not be called from a static initializer")); \
1548 static const FShaderParametersMetadata StaticStructMetadata( \
1549 FShaderParametersMetadata::EUseCase::UniformBuffer, \
1550 EUniformBufferBindingFlags::Shader, \
1551 TEXT(#StructTypeName), \
1552 TEXT(#StructTypeName), \
1553 TEXT(ShaderVariableName), \
1554 nullptr, \
1555 StructTypeName::FTypeInfo::FileName, \
1556 StructTypeName::FTypeInfo::FileLine, \
1557 sizeof(StructTypeName), \
1558 StructTypeName::zzGetMembers(), \
1559 false, \
1560 nullptr, \
1561 UsageFlags); \
1562 return &StaticStructMetadata; \
1563 } \
1564 FShaderParametersMetadataRegistration StructTypeName##MetadataRegistration { TFunctionRef<const ::FShaderParametersMetadata* ()>{StructTypeName::GetStructMetadata} };
1565
1566#define IMPLEMENT_UNIFORM_BUFFER_STRUCT(StructTypeName,ShaderVariableName) \
1567 IMPLEMENT_UNIFORM_BUFFER_STRUCT_EX(StructTypeName,ShaderVariableName,FShaderParametersMetadata::EUsageFlags::None)
1568
1569#define IMPLEMENT_UNIFORM_BUFFER_ALIAS_STRUCT(StructTypeName, UniformBufferAlias) \
1570 static const FShaderParametersMetadata UniformBufferAlias( \
1571 FShaderParametersMetadata::EUseCase::UniformBuffer, \
1572 EUniformBufferBindingFlags::Shader, \
1573 TEXT(#StructTypeName), \
1574 TEXT(#StructTypeName), \
1575 TEXT(#UniformBufferAlias), \
1576 nullptr, \
1577 StructTypeName::FTypeInfo::FileName, \
1578 StructTypeName::FTypeInfo::FileLine, \
1579 sizeof(StructTypeName), \
1580 StructTypeName::zzGetMembers())
1581
1582#define IMPLEMENT_STATIC_UNIFORM_BUFFER_STRUCT_EX(StructTypeName,ShaderVariableName,StaticSlotName,BindingFlagsEnum) \
1583 static_assert(EnumHasAnyFlags(EUniformBufferBindingFlags::BindingFlagsEnum, EUniformBufferBindingFlags::Static), "Shader bindings must include 'Static'."); \
1584 const FShaderParametersMetadata* GetForwardDeclaredShaderParametersStructMetadata(const StructTypeName* DummyPtr) { return StructTypeName::FTypeInfo::GetStructMetadata(); } \
1585 const FShaderParametersMetadata* StructTypeName::GetStructMetadata() \
1586 { \
1587 ensureMsgf(FShaderParametersMetadataRegistration::IsReadyForRegistration(), TEXT("GetStructMetadata should not be called from a static initializer")); \
1588 static const FShaderParametersMetadata StaticStructMetadata( \
1589 FShaderParametersMetadata::EUseCase::UniformBuffer, \
1590 EUniformBufferBindingFlags::BindingFlagsEnum, \
1591 TEXT(#StructTypeName), \
1592 TEXT(#StructTypeName), \
1593 TEXT(ShaderVariableName), \
1594 TEXT(#StaticSlotName), \
1595 StructTypeName::FTypeInfo::FileName, \
1596 StructTypeName::FTypeInfo::FileLine, \
1597 sizeof(StructTypeName), \
1598 StructTypeName::zzGetMembers()); \
1599 return &StaticStructMetadata; \
1600 } \
1601 FShaderParametersMetadataRegistration StructTypeName##MetadataRegistration { TFunctionRef<const ::FShaderParametersMetadata* ()>{StructTypeName::GetStructMetadata} };
1602
1603#define IMPLEMENT_STATIC_UNIFORM_BUFFER_STRUCT_EX2(StructTypeName,ShaderVariableName,StaticSlotName,BindingFlagsEnum,UsageFlags) \
1604 static_assert(EnumHasAnyFlags(EUniformBufferBindingFlags::BindingFlagsEnum, EUniformBufferBindingFlags::Static), "Shader bindings must include 'Static'."); \
1605 const FShaderParametersMetadata* GetForwardDeclaredShaderParametersStructMetadata(const StructTypeName* DummyPtr) { return StructTypeName::FTypeInfo::GetStructMetadata(); } \
1606 const FShaderParametersMetadata* StructTypeName::GetStructMetadata() \
1607 { \
1608 ensureMsgf(FShaderParametersMetadataRegistration::IsReadyForRegistration(), TEXT("GetStructMetadata should not be called from a static initializer")); \
1609 static const FShaderParametersMetadata StaticStructMetadata( \
1610 FShaderParametersMetadata::EUseCase::UniformBuffer, \
1611 EUniformBufferBindingFlags::BindingFlagsEnum, \
1612 TEXT(#StructTypeName), \
1613 TEXT(#StructTypeName), \
1614 TEXT(ShaderVariableName), \
1615 TEXT(#StaticSlotName), \
1616 StructTypeName::FTypeInfo::FileName, \
1617 StructTypeName::FTypeInfo::FileLine, \
1618 sizeof(StructTypeName), \
1619 StructTypeName::zzGetMembers(), \
1620 false, \
1621 nullptr, \
1622 UsageFlags); \
1623 return &StaticStructMetadata; \
1624 } \
1625 FShaderParametersMetadataRegistration StructTypeName##MetadataRegistration { TFunctionRef<const ::FShaderParametersMetadata* ()>{StructTypeName::GetStructMetadata} };
1626
1633#define IMPLEMENT_STATIC_AND_SHADER_UNIFORM_BUFFER_STRUCT(StructTypeName,ShaderVariableName,StaticSlotName) \
1634 IMPLEMENT_STATIC_UNIFORM_BUFFER_STRUCT_EX(StructTypeName, ShaderVariableName, StaticSlotName, StaticAndShader)
1635
1636#define IMPLEMENT_STATIC_AND_SHADER_UNIFORM_BUFFER_STRUCT_EX(StructTypeName,ShaderVariableName,StaticSlotName,UsageFlags) \
1637 IMPLEMENT_STATIC_UNIFORM_BUFFER_STRUCT_EX2(StructTypeName, ShaderVariableName, StaticSlotName, StaticAndShader, UsageFlags)
1638
1655#define IMPLEMENT_STATIC_UNIFORM_BUFFER_STRUCT(StructTypeName,ShaderVariableName,StaticSlotName) \
1656 IMPLEMENT_STATIC_UNIFORM_BUFFER_STRUCT_EX(StructTypeName, ShaderVariableName, StaticSlotName, Static)
1657
1659#define IMPLEMENT_STATIC_UNIFORM_BUFFER_SLOT(SlotName) \
1660 static FUniformBufferStaticSlotRegistrar UniformBufferStaticSlot_##SlotName(TEXT(#SlotName));
1661
1663#define BEGIN_GLOBAL_SHADER_PARAMETER_STRUCT \
1664 BEGIN_UNIFORM_BUFFER_STRUCT
1665
1666#define BEGIN_GLOBAL_SHADER_PARAMETER_STRUCT_WITH_CONSTRUCTOR \
1667 BEGIN_UNIFORM_BUFFER_STRUCT_WITH_CONSTRUCTOR
1668
1669#define END_GLOBAL_SHADER_PARAMETER_STRUCT \
1670 END_UNIFORM_BUFFER_STRUCT
1671
1672#define IMPLEMENT_GLOBAL_SHADER_PARAMETER_STRUCT \
1673 IMPLEMENT_UNIFORM_BUFFER_STRUCT
1674
1675#define IMPLEMENT_GLOBAL_SHADER_PARAMETER_ALIAS_STRUCT \
1676 IMPLEMENT_UNIFORM_BUFFER_ALIAS_STRUCT
1677
1684#define SHADER_PARAMETER(MemberType,MemberName) \
1685 SHADER_PARAMETER_EX(MemberType,MemberName,EShaderPrecisionModifier::Float)
1686
1687#define SHADER_PARAMETER_EX(MemberType,MemberName,Precision) \
1688 INTERNAL_SHADER_PARAMETER_EXPLICIT(TShaderParameterTypeInfo<MemberType>::BaseType, TShaderParameterTypeInfo<MemberType>, MemberType,MemberName,,,Precision,TEXT(""),false)
1689
1696#define SHADER_PARAMETER_ARRAY(MemberType,MemberName,ArrayDecl) \
1697 SHADER_PARAMETER_ARRAY_EX(MemberType,MemberName,ArrayDecl,EShaderPrecisionModifier::Float)
1698
1699#define SHADER_PARAMETER_ARRAY_EX(MemberType,MemberName,ArrayDecl,Precision) \
1700 INTERNAL_SHADER_PARAMETER_EXPLICIT(TShaderParameterTypeInfo<MemberType ArrayDecl>::BaseType, TShaderParameterTypeInfo<MemberType ArrayDecl>, MemberType,MemberName,ArrayDecl,,Precision,TEXT(""),false)
1701
1708#define SHADER_PARAMETER_TEXTURE(ShaderType,MemberName) \
1709 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_TEXTURE, TShaderResourceParameterTypeInfo<FRHITexture*>, FRHITexture*,MemberName,, = nullptr,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1710
1711#define SHADER_PARAMETER_TEXTURE_ARRAY(ShaderType,MemberName, ArrayDecl) \
1712 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_TEXTURE, TShaderResourceParameterTypeInfo<FRHITexture* ArrayDecl>, FRHITexture*,MemberName,ArrayDecl,,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1713
1720#define SHADER_PARAMETER_SRV(ShaderType,MemberName) \
1721 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_SRV, TShaderResourceParameterTypeInfo<FRHIShaderResourceView*>, FRHIShaderResourceView*,MemberName,, = nullptr,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1722
1723#define SHADER_PARAMETER_SRV_ARRAY(ShaderType,MemberName, ArrayDecl) \
1724 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_SRV, TShaderResourceParameterTypeInfo<FRHIShaderResourceView* ArrayDecl>, FRHIShaderResourceView*,MemberName,ArrayDecl,,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1725
1731#define SHADER_PARAMETER_UAV(ShaderType,MemberName) \
1732 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_UAV, TShaderResourceParameterTypeInfo<FRHIUnorderedAccessView*>, FRHIUnorderedAccessView*,MemberName,, = nullptr,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1733
1740#define SHADER_PARAMETER_SAMPLER(ShaderType,MemberName) \
1741 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_SAMPLER, TShaderResourceParameterTypeInfo<FRHISamplerState*>, FRHISamplerState*,MemberName,, = nullptr,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1742
1743#define SHADER_PARAMETER_SAMPLER_ARRAY(ShaderType,MemberName, ArrayDecl) \
1744 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_SAMPLER, TShaderResourceParameterTypeInfo<FRHISamplerState* ArrayDecl>, FRHISamplerState*,MemberName,ArrayDecl,,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1745
1752#define SHADER_PARAMETER_RDG_TEXTURE(ShaderType,MemberName) \
1753 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_TEXTURE, TShaderResourceParameterTypeInfo<FRDGTexture*>, FRDGTexture*,MemberName,, = nullptr,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1754
1755#define SHADER_PARAMETER_RDG_TEXTURE_ARRAY(ShaderType,MemberName, ArrayDecl) \
1756 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_TEXTURE, TShaderResourceParameterTypeInfo<FRDGTexture* ArrayDecl>, FRDGTexture*,MemberName,ArrayDecl,,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1757
1764#define SHADER_PARAMETER_RDG_TEXTURE_SRV(ShaderType,MemberName) \
1765 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_TEXTURE_SRV, TShaderResourceParameterTypeInfo<FRDGTextureSRV*>, FRDGTextureSRV*,MemberName,, = nullptr,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1766
1767#define SHADER_PARAMETER_RDG_TEXTURE_SRV_ARRAY(ShaderType,MemberName, ArrayDecl) \
1768 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_TEXTURE_SRV, TShaderResourceParameterTypeInfo<FRDGTextureSRV* ArrayDecl>, FRDGTextureSRV*,MemberName,ArrayDecl,,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1769
1776#define SHADER_PARAMETER_RDG_TEXTURE_NON_PIXEL_SRV(ShaderType,MemberName) \
1777 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_TEXTURE_NON_PIXEL_SRV, TShaderResourceParameterTypeInfo<FRDGTextureSRV*>, FRDGTextureSRV*,MemberName,, = nullptr,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1778
1779#define SHADER_PARAMETER_RDG_TEXTURE_NON_PIXEL_SRV_ARRAY(ShaderType,MemberName, ArrayDecl) \
1780 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_TEXTURE_NON_PIXEL_SRV, TShaderResourceParameterTypeInfo<FRDGTextureSRV* ArrayDecl>, FRDGTextureSRV*,MemberName,ArrayDecl,,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1781
1788#define SHADER_PARAMETER_RDG_TEXTURE_UAV(ShaderType,MemberName) \
1789 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_TEXTURE_UAV, TShaderResourceParameterTypeInfo<FRDGTextureUAV*>, FRDGTextureUAV*,MemberName,, = nullptr,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1790
1791#define SHADER_PARAMETER_RDG_TEXTURE_UAV_ARRAY(ShaderType,MemberName, ArrayDecl) \
1792 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_TEXTURE_UAV, TShaderResourceParameterTypeInfo<FRDGTextureUAV* ArrayDecl>, FRDGTextureUAV*,MemberName,ArrayDecl,,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1793
1800#define SHADER_PARAMETER_RDG_BUFFER_SRV(ShaderType,MemberName) \
1801 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_BUFFER_SRV, TShaderResourceParameterTypeInfo<FRDGBufferSRV*>, FRDGBufferSRV*,MemberName,, = nullptr,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1802
1803#define SHADER_PARAMETER_RDG_BUFFER_SRV_ARRAY(ShaderType,MemberName, ArrayDecl) \
1804 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_BUFFER_SRV, TShaderResourceParameterTypeInfo<FRDGBufferSRV* ArrayDecl>, FRDGBufferSRV*,MemberName,ArrayDecl,,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1805
1812#define SHADER_PARAMETER_RDG_BUFFER_UAV(ShaderType,MemberName) \
1813 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_BUFFER_UAV, TShaderResourceParameterTypeInfo<FRDGBufferUAV*>, FRDGBufferUAV*,MemberName,, = nullptr,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1814
1815#define SHADER_PARAMETER_RDG_BUFFER_UAV_ARRAY(ShaderType,MemberName, ArrayDecl) \
1816 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_BUFFER_UAV, TShaderResourceParameterTypeInfo<FRDGBufferUAV* ArrayDecl>, FRDGBufferUAV*,MemberName,ArrayDecl,,EShaderPrecisionModifier::Float,TEXT(#ShaderType),false)
1817
1823#define SHADER_PARAMETER_RDG_UNIFORM_BUFFER(StructType, MemberName) \
1824 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_UNIFORM_BUFFER, TShaderParameterTypeInfo<TRDGUniformBufferBinding<StructType>>, TRDGUniformBufferBinding<StructType>,MemberName,,,EShaderPrecisionModifier::Float,TEXT(#StructType),false)
1825
1847#define SHADER_PARAMETER_STRUCT(StructType,MemberName) \
1848 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_NESTED_STRUCT, StructType::FTypeInfo, StructType, MemberName,,,EShaderPrecisionModifier::Float,TEXT(#StructType),true)
1849
1871#define SHADER_PARAMETER_STRUCT_ARRAY(StructType,MemberName, ArrayDecl) \
1872 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_NESTED_STRUCT, TShaderParameterStructTypeInfo<StructType ArrayDecl>, StructType, MemberName,ArrayDecl,,EShaderPrecisionModifier::Float,TEXT(#StructType),true)
1873
1895#define SHADER_PARAMETER_STRUCT_INCLUDE(StructType,MemberName) \
1896 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_INCLUDED_STRUCT, StructType::FTypeInfo, StructType, MemberName,,,EShaderPrecisionModifier::Float,TEXT(#StructType),true)
1897
1909#define SHADER_PARAMETER_STRUCT_REF(StructType,MemberName) \
1910 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_REFERENCED_STRUCT, TShaderParameterTypeInfo<TUniformBufferBinding<StructType>>, TUniformBufferBinding<StructType>,MemberName,,,EShaderPrecisionModifier::Float,TEXT(#StructType),false)
1911
1923#define RDG_BUFFER_ACCESS(MemberName, Access) \
1924 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_BUFFER_ACCESS, TRDGResourceAccessTypeInfo<TRDGBufferAccess<Access>>, TRDGBufferAccess<Access>,MemberName,,,EShaderPrecisionModifier::Float,TEXT(""),false)
1925
1926#define RDG_BUFFER_ACCESS_DYNAMIC(MemberName) \
1927 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_BUFFER_ACCESS, TRDGResourceAccessTypeInfo<FRDGBufferAccess>, FRDGBufferAccess,MemberName,,,EShaderPrecisionModifier::Float,TEXT(""),false)
1928
1929#define RDG_BUFFER_ACCESS_ARRAY(MemberName) \
1930 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_BUFFER_ACCESS_ARRAY, TRDGResourceAccessTypeInfo<FRDGBufferAccessArray>, FRDGBufferAccessArray,MemberName,,,EShaderPrecisionModifier::Float,TEXT(""),false)
1931
1933#define RDG_TEXTURE_ACCESS(MemberName, Access) \
1934 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_TEXTURE_ACCESS, TRDGTextureAccessTypeInfo<TRDGTextureAccess<Access>>, TRDGTextureAccess<Access>,MemberName,,,EShaderPrecisionModifier::Float,TEXT(""),false)
1935
1936#define RDG_TEXTURE_ACCESS_DYNAMIC(MemberName) \
1937 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_TEXTURE_ACCESS, TRDGTextureAccessTypeInfo<FRDGTextureAccess>, FRDGTextureAccess,MemberName,,,EShaderPrecisionModifier::Float,TEXT(""),false)
1938
1939#define RDG_TEXTURE_ACCESS_ARRAY(MemberName) \
1940 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RDG_TEXTURE_ACCESS_ARRAY, TRDGResourceAccessTypeInfo<FRDGTextureAccessArray>, FRDGTextureAccessArray,MemberName,,,EShaderPrecisionModifier::Float,TEXT(""),false)
1941
1955#define RENDER_TARGET_BINDING_SLOTS() \
1956 INTERNAL_SHADER_PARAMETER_EXPLICIT(UBMT_RENDER_TARGET_BINDING_SLOTS, FRenderTargetBindingSlots::FTypeInfo, FRenderTargetBindingSlots,RenderTargets,,,EShaderPrecisionModifier::Float,TEXT(""),false)
1957
1961
1962
1971
1974
1976#define SHADER_PARAMETER_RDG_BUFFER_UPLOAD(MemberName) \
1977 UE_DEPRECATED_MACRO(5.0, "SHADER_PARAMETER_RDG_BUFFER_UPLOAD has been deprecated. Use RDG_BUFFER_ACCESS(Buffer, ERHIAccess::CopyDest) instead.") \
1978 RDG_BUFFER_ACCESS(MemberName, ERHIAccess::CopyDest)
1979
1980#define SHADER_PARAMETER_RDG_BUFFER(ShaderType,MemberName) \
1981 UE_DEPRECATED_MACRO(5.0, "SHADER_PARAMETER_RDG_BUFFER has been deprecated. Use RDG_BUFFER_ACCESS with an explicit RHI state instead.") \
1982 RDG_BUFFER_ACCESS(MemberName, ERHIAccess::SRVMask | ERHIAccess::IndirectArgs)
1983
1984#define SHADER_PARAMETER_RDG_BUFFER_ARRAY(ShaderType,MemberName, ArrayDecl) \
1985 UE_DEPRECATED_MACRO(5.0, "SHADER_PARAMETER_RDG_BUFFER_ARRAY has been deprecated. Use RDG_BUFFER_ACCESS_ARRAY instead.")
1986
1987
1988
1989
1992template<typename TypeParameter>
1994{
1995 static_assert(sizeof(TypeParameter) == 0, "This type is not supported for automatic packing.");
1997};
1998
1999template<>
2004
2005template<>
2010
2011template<>
2016
2017constexpr uint32 CalcPackedArraySize(uint32 NumElements) { return (NumElements + 3) / 4; }
2018constexpr uint32 CalcPackedArrayIndex(uint32 ElementIndex) { return (ElementIndex >> 2); }
2019constexpr uint32 CalcPackedComponentIndex(uint32 ElementIndex) { return (ElementIndex & 3); }
2020
2026#define SHADER_PARAMETER_SCALAR_ARRAY(MemberType,MemberName,ArrayDecl) \
2027 SHADER_PARAMETER_ARRAY(TShaderParameterScalarArrayTypeInfo<MemberType>::PackedArrayType, MemberName, [CalcPackedArraySize(TShaderParameterTypeInfo<TShaderParameterScalarArrayTypeInfo<MemberType>::PackedArrayType ArrayDecl>::NumElements)])
2028
2029#define GET_SCALAR_ARRAY_ELEMENT(PackedArray, ElementIndex) \
2030 PackedArray[CalcPackedArrayIndex(ElementIndex)][CalcPackedComponentIndex(ElementIndex)]
2031
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int16 int16
A 16-bit signed integer.
Definition Platform.h:1123
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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
constexpr bool IsValidAccess(ED3D12Access InD3D12Access)
Definition D3D12Access.h:78
FUniformBufferRHIRef RHICreateUniformBuffer(const void *Contents, const FRHIUniformBufferLayout *Layout, EUniformBufferUsage Usage, EUniformBufferValidation Validation=EUniformBufferValidation::ValidateResources)
Definition DynamicRHI.h:1231
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
constexpr bool EnumHasAllFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:28
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PGO_LINK_DISABLE_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:71
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
#define PGO_LINK_ENABLE_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:75
UE::Math::TIntRect< int32 > FIntRect
Definition MathFwd.h:133
UE::Math::TIntVector4< uint32 > FUintVector4
Definition MathFwd.h:105
UE::Math::TQuat< float > FQuat4f
Definition MathFwd.h:76
UE::Math::TIntVector4< int32 > FIntVector4
Definition MathFwd.h:93
UE::Math::TVector4< float > FVector4f
Definition MathFwd.h:75
UE::Math::TMatrix< float > FMatrix44f
Definition MathFwd.h:77
const bool
Definition NetworkReplayStreaming.h:178
ERHIAccess
Definition RHIAccess.h:11
@ MaxSimultaneousRenderTargets
Definition RHIDefinitions.h:287
EUniformBufferUsage
Definition RHIDefinitions.h:536
#define SHADER_PARAMETER_ARRAY_ELEMENT_ALIGNMENT
Definition RHIDefinitions.h:28
#define SHADER_PARAMETER_STRUCT_ALIGNMENT
Definition RHIDefinitions.h:25
EUniformBufferBaseType
Definition RHIDefinitions.h:634
@ UBMT_BOOL
Definition RHIDefinitions.h:639
@ UBMT_FLOAT32
Definition RHIDefinitions.h:644
@ UBMT_UINT32
Definition RHIDefinitions.h:643
@ UBMT_INVALID
Definition RHIDefinitions.h:635
@ UBMT_INT32
Definition RHIDefinitions.h:642
EUniformBufferBindingFlags
Definition RHIDefinitions.h:686
EUniformBufferValidation
Definition RHIDefinitions.h:546
ERenderTargetLoadAction
Definition RHIDefinitions.h:1253
#define SHADER_PARAMETER_POINTER_ALIGNMENT
Definition RHIDefinitions.h:35
ESubpassHint
Definition RHIResources.h:4526
EShaderBindingLayoutFlags
Definition RHIShaderBindingLayout.h:53
constexpr uint32 CalcPackedArrayIndex(uint32 ElementIndex)
Definition ShaderParameterMacros.h:2018
constexpr uint32 CalcPackedComponentIndex(uint32 ElementIndex)
Definition ShaderParameterMacros.h:2019
#define BEGIN_SHADER_PARAMETER_STRUCT(StructTypeName, DllStorage)
Definition ShaderParameterMacros.h:1482
RENDERCORE_API FShaderParametersMetadata * FindUniformBufferStructByShaderVariableName(const FHashedName &Name)
TUniformBufferBinding< TBufferStruct > GetShaderBinding(const TUniformBufferRef< TBufferStruct > &InUniformBuffer)
Definition ShaderParameterMacros.h:267
#define RENDER_TARGET_BINDING_SLOTS()
Definition ShaderParameterMacros.h:1955
#define END_SHADER_PARAMETER_STRUCT()
Definition ShaderParameterMacros.h:1485
#define IMPLEMENT_ALIGNED_TYPE(Alignment)
Definition ShaderParameterMacros.h:38
constexpr uint32 CalcPackedArraySize(uint32 NumElements)
Definition ShaderParameterMacros.h:2017
TUniformBufferBinding< TBufferStruct > GetStaticBinding(const TUniformBufferRef< TBufferStruct > &InUniformBuffer)
Definition ShaderParameterMacros.h:261
const TCHAR * GetShaderParameterMacroName(EUniformBufferBaseType ShaderParameterBaseType)
Definition ShaderParameterMetadata.cpp:305
FShaderParametersMetadata * FindUniformBufferStructByLayoutHash(uint32 Hash)
Definition ShaderParameterMetadata.cpp:147
FShaderParametersMetadata * FindUniformBufferStructByName(const TCHAR *StructName)
Definition ShaderParameterMetadata.cpp:137
FShaderParametersMetadata * FindUniformBufferStructByFName(FName StructName)
Definition ShaderParameterMetadata.cpp:142
void BuildShaderBindingLayout(TConstArrayView< FShaderParametersMetadata * > UniformBuffers, EShaderBindingLayoutFlags BaseShaderBindingLayoutFlags, FShaderBindingLayoutContainer &OutShaderBindingLayoutContainer)
Definition ShaderParameterMetadata.cpp:152
const FShaderParametersMetadata * GetForwardDeclaredShaderParametersStructMetadata(const T *)
Definition ShaderParameterStructDeclaration.h:19
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RHIResources.h:409
@ DepthNop_StencilNop
Definition RHIResources.h:425
Definition MemoryImage.h:858
Definition NameTypes.h:617
Definition ShaderParameterMacros.h:367
FRDGBufferAccess(FRDGBuffer *InBuffer, ERHIAccess InAccess)
Definition ShaderParameterMacros.h:370
bool operator!=(const FRDGBufferAccess &RHS) const
Definition ShaderParameterMacros.h:401
bool operator==(const FRDGBufferAccess &RHS) const
Definition ShaderParameterMacros.h:396
FRDGBufferAccess()=default
FRDGBuffer * operator->() const
Definition ShaderParameterMacros.h:385
FRDGBuffer * GetBuffer() const
Definition ShaderParameterMacros.h:377
ERHIAccess GetAccess() const
Definition ShaderParameterMacros.h:378
Definition RenderGraphResources.h:1426
Definition RenderGraphResources.h:1452
Definition RenderGraphResources.h:1321
Definition ShaderParameterMacros.h:430
FRDGTexture * GetTexture() const
Definition ShaderParameterMacros.h:444
FRDGTexture * operator->() const
Definition ShaderParameterMacros.h:453
bool operator==(const FRDGTextureAccess &RHS) const
Definition ShaderParameterMacros.h:464
ERHIAccess GetAccess() const
Definition ShaderParameterMacros.h:446
bool operator!=(const FRDGTextureAccess &RHS) const
Definition ShaderParameterMacros.h:469
FRDGTextureAccess()=default
FRDGTextureSubresourceRange GetSubresourceRange() const
Definition ShaderParameterMacros.h:445
FRDGTextureAccess(FRDGTexture *InTexture, FRDGTextureSubresourceRange InSubresourceRange, ERHIAccess InAccess)
Definition ShaderParameterMacros.h:434
Definition RenderGraphResources.h:839
Definition RenderGraphResources.h:905
Definition RenderGraphResources.h:571
Definition ShaderParameterMacros.h:273
bool IsStatic() const
Definition ShaderParameterMacros.h:287
FRDGUniformBufferBinding(FRDGUniformBuffer *InUniformBuffer, EUniformBufferBindingFlags InBindingFlags)
Definition ShaderParameterMacros.h:308
bool IsShader() const
Definition ShaderParameterMacros.h:292
FRDGUniformBuffer * operator->() const
Definition ShaderParameterMacros.h:302
FRDGUniformBuffer * GetUniformBuffer() const
Definition ShaderParameterMacros.h:277
FRDGUniformBufferBinding()=default
EUniformBufferBindingFlags GetBindingFlags() const
Definition ShaderParameterMacros.h:282
Definition RenderGraphResources.h:193
Definition RHICommandList.h:455
PRAGMA_ENABLE_DEPRECATION_WARNINGS void UpdateUniformBuffer(FRHIUniformBuffer *UniformBufferRHI, const void *Contents)
Definition RHICommandList.h:891
Definition RHIResources.h:1232
Definition ShaderCore.h:487
Definition ShaderParameterMacros.h:1525
FShaderParametersMetadataRegistration(TFunctionRef< const FShaderParametersMetadata *()> LazyShaderParametersMetadataAccessor)
Definition ShaderParameterMacros.h:1527
Definition ShaderParameterMetadata.h:136
Definition ShaderParameterMacros.h:186
FUniformBufferBinding(const FUniformBufferRHIRef &InUniformBuffer, EUniformBufferBindingFlags InBindingFlags)
Definition ShaderParameterMacros.h:216
bool IsShader() const
Definition ShaderParameterMacros.h:205
FUniformBufferBinding()=default
FRHIUniformBuffer * GetUniformBuffer() const
Definition ShaderParameterMacros.h:190
EUniformBufferBindingFlags GetBindingFlags() const
Definition ShaderParameterMacros.h:195
bool IsStatic() const
Definition ShaderParameterMacros.h:200
PLATFORM_64BITS.
Definition ShaderParameterMacros.h:67
const PtrType & operator->() const
Definition ShaderParameterMacros.h:95
TAlignedShaderParameterPtr(const TAlignedShaderParameterPtr< PtrType > &Other)
Definition ShaderParameterMacros.h:76
TAlignedShaderParameterPtr(const PtrType &Other)
Definition ShaderParameterMacros.h:72
TAlignedShaderParameterPtr()
Definition ShaderParameterMacros.h:69
void operator=(const PtrType &Other)
Definition ShaderParameterMacros.h:80
Definition ShaderParameterMacros.h:36
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition ShaderParameterMacros.h:414
TRDGBufferAccess(FRDGBuffer *InBuffer)
Definition ShaderParameterMacros.h:424
TRDGBufferAccess()
Definition ShaderParameterMacros.h:418
Definition ShaderParameterMacros.h:509
Definition ShaderParameterMacros.h:483
TRDGTextureAccess(FRDGTexture *InTexture, FRDGTextureSubresourceRange InSubresourceRange)
Definition ShaderParameterMacros.h:489
TRDGTextureAccess(FRDGTextureSRV *InTextureSRV)
Definition ShaderParameterMacros.h:497
TRDGTextureAccess(FRDGTexture *InTexture)
Definition ShaderParameterMacros.h:493
TRDGTextureAccess(FRDGTextureUAV *InTextureUAV)
Definition ShaderParameterMacros.h:501
TRDGTextureAccess()=default
Definition ShaderParameterMacros.h:321
TRDGUniformBufferBinding(TRDGUniformBuffer< TBufferStruct > *InUniformBuffer, EUniformBufferBindingFlags InBindingFlags)
Definition ShaderParameterMacros.h:329
TRDGUniformBufferBinding(TRDGUniformBuffer< TBufferStruct > *InUniformBuffer)
Definition ShaderParameterMacros.h:325
TRDGUniformBuffer< TBufferStruct > * GetUniformBuffer() const
Definition ShaderParameterMacros.h:341
TRDGUniformBuffer< TBufferStruct > * operator->() const
Definition ShaderParameterMacros.h:346
TRDGUniformBufferBinding()=default
Definition RenderGraphResources.h:251
Definition ShaderParameterMacros.h:880
TShaderResourceParameterArray()
Definition ShaderParameterMacros.h:882
Definition StaticArray.h:26
Definition ShaderParameterMacros.h:229
TUniformBufferRef< TBufferStruct > GetUniformBufferRef() const
Definition ShaderParameterMacros.h:249
TUniformBufferBinding()=default
TRDGUniformBuffer< TBufferStruct > * operator->() const
Definition ShaderParameterMacros.h:254
TUniformBufferBinding(const TUniformBufferRef< TBufferStruct > &InUniformBuffer)
Definition ShaderParameterMacros.h:233
TUniformBufferBinding(const TUniformBufferRef< TBufferStruct > &InUniformBuffer, EUniformBufferBindingFlags InBindingFlags)
Definition ShaderParameterMacros.h:237
Definition ShaderParameterMacros.h:136
TUniformBufferRef()=default
static TUniformBufferRef< TBufferStruct > CreateUniformBufferImmediate(const TBufferStruct &Value, EUniformBufferUsage Usage, EUniformBufferValidation Validation=EUniformBufferValidation::ValidateResources)
Definition ShaderParameterMacros.h:154
static TUniformBufferRef< TBufferStruct > CreateEmptyUniformBufferImmediate(EUniformBufferUsage Usage)
Definition ShaderParameterMacros.h:159
void UpdateUniformBufferImmediate(FRHICommandListBase &RHICmdList, const TBufferStruct &Value)
Definition ShaderParameterMacros.h:172
TUniformBufferRef(FRHIUniformBuffer *InRHIRef)
Definition ShaderParameterMacros.h:144
Definition UniformBuffer.h:29
U16 Index
Definition radfft.cpp:71
Definition ShaderParameterMacros.h:630
FExclusiveDepthStencil GetDepthStencilAccess() const
Definition ShaderParameterMacros.h:708
void SetDepthLoadAction(ERenderTargetLoadAction InAction)
Definition ShaderParameterMacros.h:742
ERenderTargetLoadAction GetDepthLoadAction() const
Definition ShaderParameterMacros.h:700
FDepthStencilBinding(FRDGTexture *InTexture, FRDGTexture *InResolveTexture, ERenderTargetLoadAction InDepthLoadAction, FExclusiveDepthStencil InDepthStencilAccess)
Definition ShaderParameterMacros.h:679
FDepthStencilBinding(FRDGTexture *InTexture, ERenderTargetLoadAction InDepthLoadAction, FExclusiveDepthStencil InDepthStencilAccess)
Definition ShaderParameterMacros.h:667
FRDGTexture * GetTexture() const
Definition ShaderParameterMacros.h:692
FDepthStencilBinding()=default
FDepthStencilBinding(FRDGTexture *InTexture, ERenderTargetLoadAction InDepthLoadAction, ERenderTargetLoadAction InStencilLoadAction, FExclusiveDepthStencil InDepthStencilAccess)
Definition ShaderParameterMacros.h:638
void SetResolveTexture(FRDGTexture *InTexture)
Definition ShaderParameterMacros.h:730
FDepthStencilBinding(FRDGTexture *InTexture, FRDGTexture *InResolveTexture, ERenderTargetLoadAction InDepthLoadAction, ERenderTargetLoadAction InStencilLoadAction, FExclusiveDepthStencil InDepthStencilAccess)
Definition ShaderParameterMacros.h:652
ERenderTargetLoadAction GetStencilLoadAction() const
Definition ShaderParameterMacros.h:704
void SetTexture(FRDGTexture *InTexture)
Definition ShaderParameterMacros.h:724
void SetStencilLoadAction(ERenderTargetLoadAction InAction)
Definition ShaderParameterMacros.h:748
bool CanMergeBefore(const FDepthStencilBinding &Other) const
Definition ShaderParameterMacros.h:714
FRDGTexture * GetResolveTexture() const
Definition ShaderParameterMacros.h:696
void SetDepthStencilAccess(FExclusiveDepthStencil InAccess)
Definition ShaderParameterMacros.h:736
Definition Color.h:48
Definition RenderGraphTextureSubresource.h:130
Definition ShaderParameterMacros.h:862
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:871
Definition ShaderParameterMacros.h:770
TStaticArray< FRenderTargetBinding, MaxSimultaneousRenderTargets > Output
Definition ShaderParameterMacros.h:771
const FRenderTargetBinding & operator[](uint32 Index) const
Definition ShaderParameterMacros.h:790
uint32 GetActiveCount() const
Definition ShaderParameterMacros.h:827
FRenderTargetBinding & operator[](uint32 Index)
Definition ShaderParameterMacros.h:785
FDepthStencilBinding DepthStencil
Definition ShaderParameterMacros.h:772
bool CanMergeBefore(const FRenderTargetBindingSlots &Other) const
Definition ShaderParameterMacros.h:834
void Enumerate(TFunction Function)
Definition ShaderParameterMacros.h:796
void Enumerate(TFunction Function) const
Definition ShaderParameterMacros.h:812
FResolveRect ResolveRect
Definition ShaderParameterMacros.h:773
Definition ShaderParameterMacros.h:525
void SetTexture(FRDGTexture *InTexture)
Definition ShaderParameterMacros.h:583
void SetArraySlice(int16 InArraySlice)
Definition ShaderParameterMacros.h:607
void SetResolveTexture(FRDGTexture *InTexture)
Definition ShaderParameterMacros.h:589
bool CanMergeBefore(const FRenderTargetBinding &Other) const
Definition ShaderParameterMacros.h:573
uint8 GetMipIndex() const
Definition ShaderParameterMacros.h:562
ERenderTargetLoadAction GetLoadAction() const
Definition ShaderParameterMacros.h:557
FRenderTargetBinding()=default
FRenderTargetBinding(FRDGTexture *InTexture, ERenderTargetLoadAction InLoadAction, uint8 InMipIndex=0, int16 InArraySlice=-1)
Definition ShaderParameterMacros.h:528
int16 GetArraySlice() const
Definition ShaderParameterMacros.h:567
FRenderTargetBinding(FRDGTexture *InTexture, FRDGTexture *InResolveTexture, ERenderTargetLoadAction InLoadAction, uint8 InMipIndex=0, int16 InArraySlice=-1)
Definition ShaderParameterMacros.h:537
void SetLoadAction(ERenderTargetLoadAction InLoadAction)
Definition ShaderParameterMacros.h:595
FRDGTexture * GetTexture() const
Definition ShaderParameterMacros.h:547
FRDGTexture * GetResolveTexture() const
Definition ShaderParameterMacros.h:552
void SetMipIndex(uint8 InMipIndex)
Definition ShaderParameterMacros.h:601
Definition RHIResources.h:5209
Definition IsUECoreType.h:19
Definition ShaderParameterMacros.h:1203
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1212
BufferAccessType TAlignedType
Definition ShaderParameterMacros.h:1210
Definition ShaderParameterMacros.h:1219
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1228
TextureAccessType TAlignedType
Definition ShaderParameterMacros.h:1226
Definition ShaderParameterMacros.h:1994
void PackedArrayType
Definition ShaderParameterMacros.h:1996
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1370
Definition ShaderParameterMacros.h:1347
StructType TAlignedType
Definition ShaderParameterMacros.h:1354
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1356
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1070
TAlignedTypedef< FIntPoint, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1067
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1166
TAlignedTypedef< FIntRect, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1163
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1134
TAlignedTypedef< FIntVector4, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1131
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1102
TAlignedTypedef< FIntVector, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1099
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1054
TAlignedTypedef< FLinearColor, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1051
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1198
TAlignedTypedef< FMatrix44f, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1195
TAlignedTypedef< FQuat4f, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1179
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1182
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1086
TAlignedTypedef< FUintVector2, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1083
TAlignedTypedef< FUintVector3, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1115
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1118
TAlignedTypedef< FUintVector4, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1147
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1150
TAlignedTypedef< FVector2f, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1003
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1006
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1022
TAlignedTypedef< FVector3f, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1019
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1038
TAlignedTypedef< FVector4f, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:1035
UniformBufferStructType TInstancedType
Definition ShaderParameterMacros.h:1340
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1342
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1265
UniformBufferStructType TInstancedType
Definition ShaderParameterMacros.h:1325
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1327
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1312
UniformBufferStructType TInstancedType
Definition ShaderParameterMacros.h:1310
T TInstancedType
Definition ShaderParameterMacros.h:1245
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1247
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:941
TAlignedTypedef< bool, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:938
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:990
TAlignedTypedef< float, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:987
TAlignedTypedef< int32, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:971
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:974
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:957
TAlignedTypedef< uint32, Alignment >::Type TAlignedType
Definition ShaderParameterMacros.h:954
Definition ShaderParameterMacros.h:895
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:924
TypeParameter TInstancedType
Definition ShaderParameterMacros.h:922
TypeParameter TAlignedType
Definition ShaderParameterMacros.h:919
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1297
Definition ShaderParameterMacros.h:1272
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:1281
Definition ShaderParameterMacros.h:115
static const FShaderParametersMetadata * GetStructMetadata()
Definition ShaderParameterMacros.h:116
Definition AlignedElement.h:13
Definition IntPoint.h:25