UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MaterialShared.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 MaterialShared.h: Shared material definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
12#include "Misc/Guid.h"
13#include "Engine/EngineTypes.h"
15#include "Templates/UniquePtr.h"
16#include "Misc/SecureHash.h"
17#include "RHIDefinitions.h"
19#include "RenderResource.h"
21#include "UniformBuffer.h"
22#include "Shader.h"
23#include "VertexFactory.h"
24#include "SceneTypes.h"
25#include "StaticParameterSet.h"
26#include "Misc/Optional.h"
33#include "MaterialValueType.h"
34#include "VirtualTexturing.h"
36#include "ShaderCompilerCore.h"
37#include "PSOPrecache.h"
40#include "Shader/Preshader.h"
41#include "Shader/ShaderTypes.h"
42#include "RenderUtils.h"
43
44#include <atomic>
45
46#include "MaterialShared.generated.h"
47
48struct FExpressionInput;
50class FCbFieldView;
51class FCbWriter;
52class FMaterial;
62class FSceneView;
68class UMaterial;
76class UTexture;
77class UTexture2D;
82struct FMaterialShaders;
86#if WITH_EDITOR
88#endif
89
90enum EMaterialDomain : int;
91
92namespace UE
93{
94 class FEmitter;
95}
96
97namespace UE::Cook
98{
99 class FODSCClientData;
100}
101
102template <class ElementType> class TLinkedList;
103
104#define ME_CAPTION_HEIGHT 18
105#define ME_STD_VPADDING 16
106#define ME_STD_HPADDING 32
107#define ME_STD_BORDER 8
108#define ME_STD_THUMBNAIL_SZ 96
109#define ME_PREV_THUMBNAIL_SZ 256
110#define ME_STD_LABEL_PAD 16
111#define ME_STD_TAB_HEIGHT 21
112
113// disallow debug data in shipping or on non-desktop Test
114#define ALLOW_SHADERMAP_DEBUG_DATA (!(UE_BUILD_SHIPPING || (UE_BUILD_TEST && !PLATFORM_DESKTOP)))
115
116// Adds various checks to track FMaterial lifetime, may add some overhead
117#define UE_CHECK_FMATERIAL_LIFETIME PLATFORM_WINDOWS
118
120
124
126{
127 return ShadingModel.HasShadingModel(MSM_Subsurface) || ShadingModel.HasShadingModel(MSM_PreintegratedSkin) ||
128 ShadingModel.HasShadingModel(MSM_SubsurfaceProfile) || ShadingModel.HasShadingModel(MSM_TwoSidedFoliage) ||
129 ShadingModel.HasShadingModel(MSM_Cloth) || ShadingModel.HasShadingModel(MSM_Eye);
130}
131
133{
134 return ShadingModel.HasShadingModel(MSM_SubsurfaceProfile) || ShadingModel.HasShadingModel(MSM_Eye);
135}
136
141
142UE_DEPRECATED(5.7, "Please use AllowDitheredLODTransition with a EShaderPlatform argument")
144
147
153
158
163
168
173
178
183
188
193
195
196#if WITH_EDITOR
197
199
207
208#endif
209
212{
213 switch (Type)
214 {
215 case MCT_UInt:
216 case MCT_UInt1:
217 case MCT_Float:
218 case MCT_Float1: return 1;
219 case MCT_UInt2:
220 case MCT_Float2: return 2;
221 case MCT_UInt3:
222 case MCT_Float3: return 3;
223 case MCT_UInt4:
224 case MCT_Float4: return 4;
225 case MCT_LWCScalar: return 1;
226 case MCT_LWCVector2: return 2;
227 case MCT_LWCVector3: return 3;
228 case MCT_LWCVector4: return 4;
229 case MCT_StaticBool: return 1;
230 case MCT_Bool: return 1;
231 default: return 0;
232 }
233}
234
239
244
249
254
256{
257 // 'ShadingModel' is considered an 'int'
259}
260
262{
263 // 'ShadingModel' is considered an 'int'
265}
266
268{
269 switch (Type)
270 {
271 case MCT_LWCScalar: return MCT_Float1;
272 case MCT_LWCVector2: return MCT_Float2;
273 case MCT_LWCVector3: return MCT_Float3;
274 case MCT_LWCVector4: return MCT_Float4;
275 default: return Type;
276 }
277}
278
280{
281 switch (Type)
282 {
283 case MCT_Float: return MCT_LWCScalar;
284 case MCT_Float1: return MCT_LWCScalar;
285 case MCT_Float2: return MCT_LWCVector2;
286 case MCT_Float3: return MCT_LWCVector3;
287 case MCT_Float4: return MCT_LWCVector4;
288 default: return Type;
289 }
290}
291
292UENUM()
307
325
326//when setting deferred scene resources whether to throw warnings when we fall back to defaults.
328{
329 ELoose, // no warnings
330 EStrict, // throw warnings
331};
332
344
381
383{
385public:
389
395 inline uint32 GetNumLayers() const { return NumLayers; }
397 inline bool AreLayersFull() const { return NumLayers == VIRTUALTEXTURE_SPACE_MAXLAYERS; }
400
404 void GetTextureValues(const FMaterialRenderContext& Context, const FUniformExpressionSet& UniformExpressionSet, UTexture const** OutValues) const;
406 void GetTextureValue(const FMaterialRenderContext& Context, const FUniformExpressionSet& UniformExpressionSet, const URuntimeVirtualTexture*& OutValue) const;
408 void GetTextureValue(const FMaterialRenderContext& Context, const FUniformExpressionSet& UniformExpressionSet, const USparseVolumeTexture * &OutValue) const;
409
410 void Serialize(FArchive& Ar);
411
413 {
414 Stack.Serialize(Ar);
415 return Ar;
416 }
417
419 {
420 if (Lhs.PreallocatedStackTextureIndex != Rhs.PreallocatedStackTextureIndex || Lhs.NumLayers != Rhs.NumLayers)
421 {
422 return false;
423 }
424 for (uint32 i = 0u; i < Lhs.NumLayers; ++i)
425 {
426 if (Lhs.LayerUniformExpressionIndices[i] != Rhs.LayerUniformExpressionIndices[i])
427 {
428 return false;
429 }
430 }
431 return true;
432 }
433
435 {
436 return !operator==(Lhs, Rhs);
437 }
438
440 LAYOUT_FIELD(uint32, NumLayers);
445};
446
448{
450
451public:
452 friend bool operator==(const FMaterialCacheTagStack& Lhs, const FMaterialCacheTagStack& Rhs)
453 {
454 return Lhs.TagGuid != Rhs.TagGuid;
455 }
456
457 friend inline bool operator!=(const FMaterialCacheTagStack& Lhs, const FMaterialCacheTagStack& Rhs)
458 {
459 return !operator==(Lhs, Rhs);
460 }
461
463};
464
477
486
488{
490public:
492 {
493 return Lhs.OpcodeOffset == Rhs.OpcodeOffset &&
494 Lhs.OpcodeSize == Rhs.OpcodeSize &&
495 Lhs.FieldIndex == Rhs.FieldIndex &&
496 Lhs.NumFields == Rhs.NumFields;
497 }
499 {
500 return !operator==(Lhs, Rhs);
501 }
502
505 LAYOUT_FIELD(uint32, FieldIndex);
507};
508
510{
512public:
513
515 {
516 return Lhs.ParameterInfo == Rhs.ParameterInfo && Lhs.ParameterType == Rhs.ParameterType && Lhs.DefaultValueOffset == Rhs.DefaultValueOffset;
517 }
519 {
520 return !operator==(Lhs, Rhs);
521 }
522
526};
527
530{
532 Cube,
533 Array2D,
534 ArrayCube,
535 Volume,
536 Virtual,
538
539 Count,
540};
542
544{
546public:
548 {
549 return Lhs.ParameterInfo == Rhs.ParameterInfo && Lhs.TextureIndex == Rhs.TextureIndex && Lhs.SamplerSource == Rhs.SamplerSource && Lhs.VirtualTextureLayerIndex == Rhs.VirtualTextureLayerIndex;
550 }
552 {
553 return !operator==(Lhs, Rhs);
554 }
555
556 inline FName GetParameterName() const { return ScriptNameToName(ParameterInfo.Name); }
557
558 ENGINE_API void GetGameThreadTextureValue(const UMaterialInterface* MaterialInterface, const FMaterial& Material, UTexture*& OutValue) const;
560
565};
566
568{
570public:
572 {
573 return Lhs.ParameterInfo == Rhs.ParameterInfo && Lhs.TextureCollectionIndex == Rhs.TextureCollectionIndex && Lhs.bIsVirtualCollection == Rhs.bIsVirtualCollection;
574 }
576 {
577 return !operator==(Lhs, Rhs);
578 }
579
582
584 LAYOUT_FIELD(int32, TextureCollectionIndex);
585 LAYOUT_FIELD(bool, bIsVirtualCollection);
586};
587
589{
591public:
593 {
594 return Lhs.SourceTextureIndex == Rhs.SourceTextureIndex && Lhs.ExternalTextureGuid == Rhs.ExternalTextureGuid && Lhs.ParameterName == Rhs.ParameterName;
595 }
597 {
598 return !operator==(Lhs, Rhs);
599 }
600
602
603 LAYOUT_FIELD(FScriptName, ParameterName);
604 LAYOUT_FIELD(FGuid, ExternalTextureGuid);
605 LAYOUT_FIELD(int32, SourceTextureIndex);
606};
607
609{
610public:
614
618
619private:
620 struct FNumericParameterKey
621 {
622 FHashedMaterialParameterInfo ParameterInfo;
623 EMaterialParameterType ParameterType;
624
625 friend inline bool operator==(const FNumericParameterKey& Lhs, const FNumericParameterKey& Rhs)
626 {
627 return Lhs.ParameterInfo == Rhs.ParameterInfo && Lhs.ParameterType == Rhs.ParameterType;
628 }
629 friend inline bool operator!=(const FNumericParameterKey& Lhs, const FNumericParameterKey& Rhs)
630 {
631 return !operator==(Lhs, Rhs);
632 }
633 friend inline uint32 GetTypeHash(const FNumericParameterKey& Value)
634 {
635 return HashCombine(GetTypeHash(Value.ParameterInfo), GetTypeHash(Value.ParameterType));
636 }
637 };
638
640
641 struct FTextureParameterKey
642 {
643 FHashedMaterialParameterInfo ParameterInfo;
644 int32 TextureIndex;
645
646 friend inline bool operator==(const FTextureParameterKey& Lhs, const FTextureParameterKey& Rhs)
647 {
648 return Lhs.ParameterInfo == Rhs.ParameterInfo && Lhs.TextureIndex == Rhs.TextureIndex;
649 }
650 friend inline bool operator!=(const FTextureParameterKey& Lhs, const FTextureParameterKey& Rhs)
651 {
652 return !operator==(Lhs, Rhs);
653 }
654 friend inline uint32 GetTypeHash(const FTextureParameterKey& Value)
655 {
656 return HashCombine(GetTypeHash(Value.ParameterInfo), GetTypeHash(Value.TextureIndex));
657 }
658 };
659
662};
663
666{
668public:
670
671 bool IsEmpty() const;
673 ENGINE_API FString GetSummaryString() const;
674
676
678
679 ENGINE_API void FillUniformBuffer(const FMaterialRenderContext& MaterialRenderContext, const FUniformExpressionCache& UniformExpressionCache, const FRHIUniformBufferLayout* UniformBufferLayout, uint8* TempBuffer, int TempBufferSize) const;
680
681 ENGINE_API void FillUniformBuffer(const FMaterialRenderContext& MaterialRenderContext, TConstArrayView<IAllocatedVirtualTexture*> AllocatedVTs, const FRHIUniformBufferLayout* UniformBufferLayout, uint8* TempBuffer, int TempBufferSize) const;
682
683 // Get a combined hash of all referenced Texture2D's underlying RHI textures, going through TextureReferences. Can be used to tell if any texture has gone through texture streaming mip changes recently.
685
687 {
688 return UniformExternalTextureParameters.Num() > 0;
689 }
690
695
700
702 {
703 return DefaultValues.GetData() + Offset;
704 }
705
709
711 ENGINE_API void GetGameThreadTextureValue(EMaterialTextureParameterType Type, int32 Index, const UMaterialInterface* MaterialInterface, const FMaterial& Material, UTexture*& OutValue, bool bAllowOverride = true) const;
715
719
725
728 void AddNumericParameterEvaluation(uint32 ParameterIndex, uint32 BufferOffset);
729
732
737
739
743 int32 AddVTLayer(int32 StackIndex, int32 TextureIndex);
744 void SetVTLayer(int32 StackIndex, int32 VTLayerIndex, int32 TextureIndex);
745
751
753
754protected:
766
767 FVTPackedStackAndLayerIndex GetVTStackAndLayerIndex(int32 UniformExpressionIndex) const;
768
769 friend class FMaterial;
771 friend class FMaterialShaderMap;
772 friend class FMaterialShader;
776
785
788
791
794
795
796 LAYOUT_FIELD(TMemoryImageArray<FGuid>, ParameterCollections);
797
799};
800
806{
808public:
813 EstimatedNumTextureSamplesVS(0),
814 EstimatedNumTextureSamplesPS(0),
819#endif
827 bUsesWorldPositionOffset(false),
828 bUsesTemporalResponsiveness(false),
829 bUsesMotionVectorWorldOffset(false),
830 bUsesGlobalDistanceField(false),
831 bUsesPixelDepthOffset(false),
832 bUsesDistanceCullFade(false),
834 bUsesVertexInterpolator(false),
836 bUsesAnisotropy(false),
837 bIsLightFunctionAtlasCompatible(false),
838 bUsesDisplacement(false),
839 bUsedWithNeuralNetworks(false),
840 bUsesCustomizedUVs(false)
841 {
842#if WITH_EDITOR
846#endif
847 }
848
849 bool IsSceneTextureUsed(ESceneTextureId TexId) const { return (UsedSceneTextures & (1 << TexId)) != 0; }
850
852 {
853 // User scene textures aren't added to used bits -- those are stored separately in UserSceneTextureInputs
855 {
856 UsedSceneTextures |= (1 << TexId);
857 }
858 }
859
860#if WITH_EDITOR
861 // Returns Id for a user scene texture input, or INDEX_NONE if allocation fails.
862 int32 FindOrAddUserSceneTexture(FName UserSceneTexture);
863
864 // Returns Id for a user scene texture input, or INDEX_NONE if not found.
865 int32 FindUserSceneTexture(FName UserSceneTexture) const;
866
867 // Returns number of post process inputs used, between PostProcessInput SceneTexture nodes and UserSceneTexture nodes. If this exceeds
868 // kPostProcessMaterialInputCountMax, compile should be failed (number is returned rather than bool for error reporting purposes).
870#endif // WITH_EDITOR
871
872 void SetIsDBufferTextureUsed(int32 TextureIndex) { UsedDBufferTextures |= (1 << TextureIndex); }
874
876
878 bool RequiresSceneColorCopy() const { return IsSceneTextureUsed(PPI_SceneColor); }
879
882 {
883 return
884 (1u << PPI_DiffuseColor) |
885 (1u << PPI_SpecularColor) |
886 (1u << PPI_SubsurfaceColor) |
887 (1u << PPI_BaseColor) |
888 (1u << PPI_Specular) |
889 (1u << PPI_Metallic) |
890 (1u << PPI_WorldNormal) |
891 (1u << PPI_WorldTangent) |
892 (1u << PPI_Opacity) |
893 (1u << PPI_Roughness) |
894 (1u << PPI_Anisotropy) |
895 (1u << PPI_MaterialAO) |
896 (1u << PPI_DecalMask) |
897 (1u << PPI_ShadingModelColor) |
898 (1u << PPI_ShadingModelID) |
899 (1u << PPI_StoredBaseColor) |
900 (1u << PPI_StoredSpecular) |
901 (1u << PPI_Velocity) |
902 (1u << PPI_IsFirstPerson);
903 }
904
906 bool NeedsGBuffer() const
907 {
908 return UsedSceneTextures & GetGBufferMask();
909 }
910
912 bool UsesSceneDepthLookup() const { return IsSceneTextureUsed(PPI_SceneDepth); }
913
915 bool UsesVelocitySceneTexture() const { return IsSceneTextureUsed(PPI_Velocity); }
916
917 LAYOUT_FIELD(FUniformExpressionSet, UniformExpressionSet);
918
921
924
927
929 LAYOUT_FIELD_EDITORONLY(uint16, EstimatedNumTextureSamplesVS);
930 LAYOUT_FIELD_EDITORONLY(uint16, EstimatedNumTextureSamplesPS);
931
936
937
939
942
945
948
951
954
957
960
963
966
969
971 LAYOUT_BITFIELD(uint8, bUsesWorldPositionOffset, 1);
972
974 LAYOUT_BITFIELD(uint8, bUsesTemporalResponsiveness, 1);
975
977 LAYOUT_BITFIELD(uint8, bUsesMotionVectorWorldOffset, 1);
978
980 LAYOUT_BITFIELD(uint8, bUsesGlobalDistanceField, 1);
981
983 LAYOUT_BITFIELD(uint8, bUsesPixelDepthOffset, 1);
984
986 LAYOUT_BITFIELD(uint8, bUsesDistanceCullFade, 1);
987
990
992 LAYOUT_BITFIELD(uint8, bUsesVertexInterpolator, 1);
993
996
998 LAYOUT_BITFIELD(uint8, bUsesAnisotropy, 1);
999
1001 LAYOUT_BITFIELD(uint8, bIsLightFunctionAtlasCompatible, 1);
1002
1004 LAYOUT_BITFIELD(uint8, bUsesDisplacement, 1);
1005
1007 LAYOUT_BITFIELD(uint8, bUsedWithNeuralNetworks, 1);
1008
1010 LAYOUT_BITFIELD(uint8, bUsesCustomizedUVs, 1);
1011};
1012
1018
1025
1061
1063{
1066 union
1067 {
1068 // Room for up to 16 flags in previous padding space
1070 struct
1071 {
1078 };
1079 };
1088 union
1089 {
1090 // These flags are full, add more flags above
1092 struct
1093 {
1160 };
1161 };
1162
1164
1165private:
1166#if WITH_EDITOR
1167 // Compact binary API with hidden friend operator<<
1168 ENGINE_API void Save(FCbWriter& Writer) const;
1169 bool TryLoad(FCbFieldView Field);
1170 friend inline FCbWriter& operator<<(FCbWriter& Writer, const FMaterialShaderParametersBase& Value)
1171 {
1172 Value.Save(Writer);
1173 return Writer;
1174 }
1176#endif
1177};
1178
1179// FMaterialShaderParametersBase split out to ease serializing of raw data
1181{
1183
1184public:
1185#if WITH_EDITOR
1187#endif
1188
1190};
1191
1194{
1195public:
1197
1198#if WITH_EDITOR
1205#endif
1206
1212
1215
1216#if WITH_EDITOR
1223
1227 FString UsageCustomOutput;
1228
1229private:
1231 bool bIsCookedId;
1232
1234 TArray<FStaticSwitchParameter> StaticSwitchParameters;
1235 TArray<FStaticComponentMaskParameter> StaticComponentMaskParameters;
1236 TArray<FStaticTerrainLayerWeightParameter> TerrainLayerWeightParameters;
1238public:
1241
1244
1247
1249 TArray<FShaderPipelineTypeDependency> ShaderPipelineTypeDependencies;
1250
1253
1260
1263
1266
1269
1272
1277 FName PreferredShaderCodeFormat;
1278
1280 FSubstrateCompilationConfig SubstrateCompilationConfig;
1281
1282#endif // WITH_EDITOR
1283
1284 /*
1285 * Type layout parameters of the memory image
1286 */
1288
1290 : QualityLevel(EMaterialQualityLevel::High)
1291 , FeatureLevel(ERHIFeatureLevel::SM5)
1296 , SubstrateCompilationConfig()
1297#endif
1298 { }
1299
1302
1303#if WITH_EDITOR
1305#endif
1306
1307 void Serialize(FArchive& Ar, bool bLoadingCooked);
1308
1309 bool IsCookedId() const
1310 {
1311#if WITH_EDITOR
1312 return bIsCookedId;
1313#else
1314 return true;
1315#endif
1316 }
1317
1318 bool IsValid() const
1319 {
1320#if WITH_EDITOR
1321 return !IsCookedId() ? BaseMaterialId.IsValid() : (CookedShaderMapIdHash != FSHAHash());
1322#else
1323 return (CookedShaderMapIdHash != FSHAHash());
1324#endif
1325 }
1326
1328 {
1329#if WITH_EDITOR
1330 return !Ref.IsCookedId() ? Ref.BaseMaterialId.A : (*(uint32*)&Ref.CookedShaderMapIdHash.Hash[0]);
1331#else
1332 // Using the hash value directly instead of FSHAHash CRC as fairly uniform distribution
1333 return *(uint32*)&Ref.CookedShaderMapIdHash.Hash[0];
1334#endif
1335 }
1336
1338 {
1339 return sizeof(*this)
1340#if WITH_EDITOR
1341 + ReferencedFunctions.GetAllocatedSize()
1342 + ReferencedParameterCollections.GetAllocatedSize()
1343 + ShaderTypeDependencies.GetAllocatedSize()
1344 + ShaderPipelineTypeDependencies.GetAllocatedSize()
1345 + VertexFactoryTypeDependencies.GetAllocatedSize()
1346#endif
1347 ;
1348 }
1349
1350#if WITH_EDITOR
1353
1354 void GetMaterialHash(FSHAHash& OutHash) const
1355 {
1356 GetMaterialHash(OutHash, true);
1357 }
1358#endif
1359
1361
1369 {
1370 return Equals(ReferenceSet, true);
1371 }
1372
1374 {
1375 return !Equals(ReferenceSet, true);
1376 }
1377
1379 bool IsContentValid() const;
1380
1382
1383#if WITH_EDITOR
1385 void UpdateFromParameterSet(const FStaticParameterSet& StaticParameters);
1386
1388 void AppendKeyString(FString& KeyString, bool bIncludeSourceAndMaterialState = true,
1389 bool bIncludeKeyStringShaderDependencies = true) const;
1391
1392 const TArray<FStaticSwitchParameter> &GetStaticSwitchParameters() const { return StaticSwitchParameters; }
1393 const TArray<FStaticComponentMaskParameter> &GetStaticComponentMaskParameters() const { return StaticComponentMaskParameters; }
1394 const TArray<FStaticTerrainLayerWeightParameter> &GetTerrainLayerWeightParameters() const { return TerrainLayerWeightParameters; }
1396
1398 bool ContainsShaderType(const FShaderType* ShaderType, int32 PermutationId) const;
1399
1402
1404 bool ContainsVertexFactoryType(const FVertexFactoryType* VFType) const;
1405#endif // WITH_EDITOR
1406
1407private:
1408#if WITH_EDITOR
1409 void AppendStaticParameters(FShaderKeyGenerator& KeyGen) const;
1410#endif
1411};
1412
1417{
1419public:
1424
1425#if WITH_EDITOR
1427 const FSHAHash& MaterialShaderMapHash,
1428 const FMaterial* Material,
1430#endif
1431
1432 // Accessors.
1433 inline const FHashedName& GetVertexFactoryTypeName() const { return VertexFactoryTypeName; }
1434
1435private:
1437 LAYOUT_FIELD(FHashedName, VertexFactoryTypeName);
1438};
1439
1450
1452{
1455public:
1457
1460
1461 inline uint32 GetNumShaders() const
1462 {
1463 uint32 NumShaders = Super::GetNumShaders();
1465 {
1466 NumShaders += MeshShaderMap->GetNumShaders();
1467 }
1468 return NumShaders;
1469 }
1470
1472 {
1473 uint32 NumPipelines = Super::GetNumShaderPipelines();
1475 {
1476 NumPipelines += MeshShaderMap->GetNumShaderPipelines();
1477 }
1478 return NumPipelines;
1479 }
1480
1481 void Finalize(const FShaderMapResourceCode* Code);
1482
1483private:
1484 struct FProjectMeshShaderMapToKey
1485 {
1486 inline const FHashedName& operator()(const FMeshMaterialShaderMap* InShaderMap) { return InShaderMap->GetVertexFactoryTypeName(); }
1487 };
1488
1489 ENGINE_API const FMeshMaterialShaderMap* GetMeshShaderMap(const FHashedName& VertexFactoryTypeName) const;
1490 ENGINE_API FMeshMaterialShaderMap* AcquireMeshShaderMap(const FHashedName& VertexFactoryTypeName);
1491
1492 void AddMeshShaderMap(const FHashedName& VertexFactoryTypeName, FMeshMaterialShaderMap* MeshShaderMap);
1493 void RemoveMeshShaderMap(const FHashedName& VertexFactoryTypeName);
1494
1497
1500
1502
1506 LAYOUT_FIELD(FScriptName, ResolutionRelativeToInput);
1507
1512};
1513
1517class FMaterialShaderMap : public TShaderMap<FMaterialShaderMapContent, FShaderMapPointerTable>, public FDeferredCleanupInterface
1518{
1519public:
1521
1529
1530#if WITH_EDITOR
1532
1535
1542
1544 struct FAsyncLoadContext
1545 {
1546 virtual ~FAsyncLoadContext() { };
1547 virtual bool IsReady() const = 0;
1548 virtual TRefCountPtr<FMaterialShaderMap> Get() = 0;
1549 };
1550
1557#endif
1558
1560 virtual ~FMaterialShaderMap();
1561
1562#if WITH_EDITOR
1565#endif // WITH_EDITOR
1566
1567 // ShaderMap interface
1568 TShaderRef<FShader> GetShader(FShaderType* ShaderType, int32 PermutationId = 0) const
1569 {
1570 FShader* Shader = GetContent()->GetShader(ShaderType, PermutationId);
1572 }
1573 template<typename ShaderType> TShaderRef<ShaderType> GetShader(int32 PermutationId = 0) const
1574 {
1575 return TShaderRef<ShaderType>::Cast(GetShader(&ShaderType::GetStaticType(), PermutationId));
1576 }
1577 template<typename ShaderType> TShaderRef<ShaderType> GetShader(const typename ShaderType::FPermutationDomain& PermutationVector) const
1578 {
1579 return TShaderRef<ShaderType>::Cast(GetShader(&ShaderType::GetStaticType(), PermutationVector.ToDimensionValueId()));
1580 }
1581
1582 uint32 GetMaxNumInstructionsForShader(FShaderType* ShaderType) const { return GetContent()->GetMaxNumInstructionsForShader(*this, ShaderType); }
1583
1584#if WITH_EDITOR
1585
1588 const FMaterial* Material,
1591
1598 void Compile(
1600 const FMaterialShaderMapId& ShaderMapId,
1605 );
1606
1609#endif
1610
1616 bool IsComplete(const FMaterial* Material, bool bSilent);
1617
1621 FPSOPrecacheDataArray CollectPSOPrecacheData(const FMaterialPSOPrecacheParams& PrecacheParams);
1622
1623#if WITH_EDITOR
1626#endif
1627
1628#if WITH_EDITOR
1629 ENGINE_API const FMemoryImageString* GetShaderSource(const FVertexFactoryType* VertexFactoryType, const FShaderType* ShaderType, int32 PermutationId) const;
1630#endif
1631
1633 ENGINE_API void GetShaderList(TMap<FShaderId, TShaderRef<FShader>>& OutShaders) const;
1634
1636 ENGINE_API virtual void GetShaderList(TMap<FHashedName, TShaderRef<FShader>>& OutShaders) const override;
1637
1638#if !UE_BUILD_SHIPPING
1639 virtual void DumpShaderList(FShaderListReport& Out) const;
1640#endif // !UE_BUILD_SHIPPING
1641
1643 ENGINE_API virtual void GetShaderPipelineList(TArray<FShaderPipelineRef>& OutShaderPipelines) const override;
1644
1645
1647 ENGINE_API uint32 GetShaderNum() const;
1648
1651
1655 void RegisterForODSC(EShaderPlatform InShaderPlatform);
1656
1657 // Reference counting.
1658 ENGINE_API void AddRef();
1659 ENGINE_API void Release();
1660
1663
1664#if WITH_EDITOR
1666 void SaveToDerivedDataCache(const FMaterialShaderParameters& ShaderParameters);
1667#endif
1668
1670 ENGINE_API static void SaveForRemoteRecompile(FArchive& Ar, const TMap<FString, TArray<TRefCountPtr<FMaterialShaderMap> > >& CompiledShaderMaps);
1671 ENGINE_API static void LoadForRemoteRecompile(FArchive& Ar, EShaderPlatform ShaderPlatform, TArray<UMaterialInterface*>& OutLoadedMaterials);
1672
1673#if WITH_EDITOR
1676
1678 void SaveShaderStableKeys(EShaderPlatform TargetShaderPlatform, const struct FStableShaderKeyAndValue& SaveKeyVal);
1679#endif
1680
1681 // Accessors.
1682 const FMeshMaterialShaderMap* GetMeshShaderMap(const FVertexFactoryType* VertexFactoryType) const { return GetContent()->GetMeshShaderMap(VertexFactoryType->GetHashedName()); }
1683 const FMeshMaterialShaderMap* GetMeshShaderMap(const FHashedName& VertexFactoryTypeName) const { return GetContent()->GetMeshShaderMap(VertexFactoryTypeName); }
1684 FMeshMaterialShaderMap* AcquireMeshShaderMap(const FVertexFactoryType* VertexFactoryType) { return GetMutableContent()->AcquireMeshShaderMap(VertexFactoryType->GetHashedName()); }
1685 FMeshMaterialShaderMap* AcquireMeshShaderMap(const FHashedName& VertexFactoryTypeName) { return GetMutableContent()->AcquireMeshShaderMap(VertexFactoryTypeName); }
1686 const FMaterialShaderMapId& GetShaderMapId() const { return ShaderMapId; }
1687 const FSHAHash& GetShaderContentHash() const { return GetContent()->ShaderContentHash; }
1688
1689#if WITH_EDITOR
1691 void ReleaseCompilingId();
1692 uint32 GetCompilingId() const { return CompilingId; }
1694#endif // WITH_EDITOR
1695
1696 bool IsCompilationFinalized() const { return bCompilationFinalized; }
1697 bool CompiledSuccessfully() const { return bCompiledSuccessfully; }
1698#if WITH_EDITOR
1699 void SetCompiledSuccessfully(bool bSuccess) { bCompiledSuccessfully = bSuccess; }
1702#endif // WITH_EDITOR
1703
1704#if WITH_ODSC
1705 bool IsFromODSC() const { return bIsFromODSC; }
1706 void SetIsFromODSC(bool bInIsFromODSC) { bIsFromODSC = bInIsFromODSC; }
1707#endif
1708
1709#if WITH_EDITORONLY_DATA
1710 const TCHAR* GetFriendlyName() const { return *GetContent()->FriendlyName; }
1711 const TCHAR* GetDebugDescription() const { return *GetContent()->DebugDescription; }
1712 const TCHAR* GetMaterialPath() const { return *GetContent()->MaterialPath; }
1713#else
1714 const TCHAR* GetFriendlyName() const { return TEXT(""); }
1715 const TCHAR* GetDebugDescription() const { return TEXT(""); }
1716 const TCHAR* GetMaterialPath() const { return TEXT(""); }
1717#endif
1718 bool RequiresSceneColorCopy() const { return GetContent()->MaterialCompilationOutput.RequiresSceneColorCopy(); }
1719 bool NeedsSceneTextures() const { return GetContent()->MaterialCompilationOutput.bNeedsSceneTextures; }
1720 bool UsesGlobalDistanceField() const { return GetContent()->MaterialCompilationOutput.bUsesGlobalDistanceField; }
1721 bool UsesWorldPositionOffset() const { return GetContent()->MaterialCompilationOutput.bUsesWorldPositionOffset; }
1722 bool UsesTemporalResponsiveness() const { return GetContent()->MaterialCompilationOutput.bUsesTemporalResponsiveness; }
1723 bool UsesMotionVectorWorldOffset() const { return GetContent()->MaterialCompilationOutput.bUsesMotionVectorWorldOffset; }
1724 bool UsesDisplacement() const { return GetContent()->MaterialCompilationOutput.bUsesDisplacement; }
1725 bool NeedsGBuffer() const { return GetContent()->MaterialCompilationOutput.NeedsGBuffer(); }
1726 bool UsesEyeAdaptation() const { return GetContent()->MaterialCompilationOutput.bUsesEyeAdaptation; }
1727 bool ModifiesMeshPosition() const { return GetContent()->MaterialCompilationOutput.bModifiesMeshPosition; }
1728 bool UsesPixelDepthOffset() const { return GetContent()->MaterialCompilationOutput.bUsesPixelDepthOffset; }
1729 bool UsesSceneDepthLookup() const { return GetContent()->MaterialCompilationOutput.UsesSceneDepthLookup(); }
1730 bool UsesVelocitySceneTexture() const { return GetContent()->MaterialCompilationOutput.UsesVelocitySceneTexture(); }
1731 bool UsesDistanceCullFade() const { return GetContent()->MaterialCompilationOutput.bUsesDistanceCullFade; }
1732 bool UsesAnisotropy() const { return GetContent()->MaterialCompilationOutput.bUsesAnisotropy; }
1733 bool IsLightFunctionAtlasCompatible() const { return GetContent()->MaterialCompilationOutput.bIsLightFunctionAtlasCompatible; }
1734
1735 const FSubstrateMaterialCompilationOutput& GetSubstrateMaterialCompilationOutput() const { return GetContent()->MaterialCompilationOutput.SubstrateMaterialCompilationOutput; }
1736 uint8 GetSubstrateMaterialType() const { return GetSubstrateMaterialCompilationOutput().SubstrateMaterialType; }
1737 uint8 GetSubstrateClosureCount() const { return GetSubstrateMaterialCompilationOutput().SubstrateClosureCount; }
1738 uint8 GetSubstrateUintPerPixel() const { return GetSubstrateMaterialCompilationOutput().SubstrateUintPerPixel; }
1740 ESubstrateTileType GetSubstrateTileType() const { return GetSubstrateTileTypeFromMaterialType(GetSubstrateMaterialCompilationOutput().SubstrateMaterialType); }
1741
1742#if WITH_EDITOR
1743 uint32 GetNumUsedUVScalars() const { return GetContent()->MaterialCompilationOutput.NumUsedUVScalars; }
1744 uint32 GetNumUsedCustomInterpolatorScalars() const { return GetContent()->MaterialCompilationOutput.NumUsedCustomInterpolatorScalars; }
1745 void GetEstimatedNumTextureSamples(uint32& VSSamples, uint32& PSSamples) const { VSSamples = GetContent()->MaterialCompilationOutput.EstimatedNumTextureSamplesVS; PSSamples = GetContent()->MaterialCompilationOutput.EstimatedNumTextureSamplesPS; }
1746 uint32 GetEstimatedNumVirtualTextureLookups() const { return GetContent()->MaterialCompilationOutput.EstimatedNumVirtualTextureLookups; }
1749 {
1750 CopyAssignItems(UsagesVS.GetData(), GetContent()->MaterialCompilationOutput.EstimatedLWCFuncUsagesVS, (int)ELWCFunctionKind::Max);
1751 CopyAssignItems(UsagesPS.GetData(), GetContent()->MaterialCompilationOutput.EstimatedLWCFuncUsagesPS, (int)ELWCFunctionKind::Max);
1752 CopyAssignItems(UsagesCS.GetData(), GetContent()->MaterialCompilationOutput.EstimatedLWCFuncUsagesCS, (int)ELWCFunctionKind::Max);
1753 }
1755 uint32 GetNumPreshaders() const { return GetContent()->MaterialCompilationOutput.UniformExpressionSet.UniformPreshaders.Num(); }
1756#endif
1757 uint32 GetNumVirtualTextureStacks() const { return GetContent()->MaterialCompilationOutput.UniformExpressionSet.VTStacks.Num(); }
1758 uint8 GetRuntimeVirtualTextureOutputAttributeMask() const { return GetContent()->MaterialCompilationOutput.RuntimeVirtualTextureOutputAttributeMask; }
1759 bool UsesSceneTexture(uint32 TexId) const { return (GetContent()->MaterialCompilationOutput.UsedSceneTextures & (1ull << TexId)) != 0; }
1760 TConstArrayView<FScriptName> GetUserSceneTextureInputs() const { return GetContent()->MaterialCompilationOutput.UserSceneTextureInputs; }
1761 FScriptName GetUserSceneTextureOutput() const { return GetContent()->UserSceneTextureOutput; }
1762 FIntPoint GetUserTextureDivisor() const { return FIntPoint(GetContent()->UserTextureDivisorX, GetContent()->UserTextureDivisorY); }
1763 FScriptName GetResolutionRelativeToInput() const { return GetContent()->ResolutionRelativeToInput; }
1764
1765 bool UsesPathTracingBufferTexture(uint32 TexId) const { return (GetContent()->MaterialCompilationOutput.UsedPathTracingBufferTextures & (1ull << TexId)) != 0;}
1766
1767 bool IsValidForRendering(bool bFailOnInvalid = false) const
1768 {
1769#if 0
1770 // Any material being used for rendering should be frozen, and successfully compiled
1771 // Compiliation may not be finalized yet, if the shader map is still compiling
1772 const bool bValid = bCompiledSuccessfully && GetFrozenContentSize() > 0u;
1773 // && !bDeletedThroughDeferredCleanup; //deferred actually deletion will prevent the material to go away before we finish rendering
1774#endif
1775 const bool bValid = GetFrozenContentSize() > 0u;
1776
1777 checkf(bValid || !bFailOnInvalid, TEXT("FMaterialShaderMap %s invalid for rendering: bCompilationFinalized: %i, bCompiledSuccessfully: %i, bDeletedThroughDeferredCleanup: %i, FrozenContentSize: %d"), GetFriendlyName(),
1778 bCompilationFinalized, bCompiledSuccessfully, bDeletedThroughDeferredCleanup ? 1 : 0, GetFrozenContentSize());
1779 return bValid;
1780 }
1781
1782 const FUniformExpressionSet& GetUniformExpressionSet() const { return GetContent()->MaterialCompilationOutput.UniformExpressionSet; }
1783 const FRHIUniformBufferLayout* GetUniformBufferLayout() const { return UniformBufferLayout; }
1784
1785 int32 GetNumRefs() const { return NumRefs; }
1786 int32 GetRefCount() const { return NumRefs; }
1787
1788 void CountNumShaders(int32& NumShaders, int32& NumPipelines) const
1789 {
1790 NumShaders = GetContent()->GetNumShaders();
1791 NumPipelines = GetContent()->GetNumShaderPipelines();
1792
1793 for (FMeshMaterialShaderMap* MeshShaderMap : GetContent()->OrderedMeshShaderMaps)
1794 {
1795 if (MeshShaderMap)
1796 {
1797 NumShaders += MeshShaderMap->GetNumShaders();
1798 NumPipelines += MeshShaderMap->GetNumShaderPipelines();
1799 }
1800 }
1801 }
1802 void DumpDebugInfo(FOutputDevice& OutputDevice) const;
1803
1804#if WITH_EDITOR
1806
1808#endif
1809
1810protected:
1811#if WITH_EDITOR
1815#endif
1816
1817 void PostFinalizeContent() override;
1818
1819private:
1826 static FCriticalSection GIdToMaterialShaderMapCS;
1827
1828#if ALLOW_SHADERMAP_DEBUG_DATA
1833 static TArray<FMaterialShaderMap*> AllMaterialShaderMaps;
1834
1836 static FCriticalSection AllMaterialShaderMapsGuard;
1837#endif
1838
1839#if WITH_EDITOR
1844#endif // WITH_EDITOR
1845
1846 FUniformBufferLayoutRHIRef UniformBufferLayout;
1847
1848#if ALLOW_SHADERMAP_DEBUG_DATA
1849 float CompileTime;
1850#endif
1851
1853 FMaterialShaderMapId ShaderMapId;
1854
1856 //static TMap<TRefCountPtr<FMaterialShaderMap>, TArray<FMaterial*> > ShaderMapsBeingCompiled;
1857
1858#if WITH_EDITOR
1860 uint32 CompilingId = 0;
1861#endif // WITH_EDITOR
1862
1863 mutable int32 NumRefs;
1864
1866 bool bDeletedThroughDeferredCleanup;
1867
1869 uint32 bRegistered : 1;
1870
1875 uint32 bCompilationFinalized : 1;
1876
1877 uint32 bCompiledSuccessfully : 1;
1878
1880 uint32 bIsPersistent : 1;
1881
1883 uint32 bIsFromODSC : 1;
1884
1885#if WITH_EDITOR
1886 FShader* ProcessCompilationResultsForSingleJob(class FShaderCompileJob* SingleJob, const FShaderPipelineType* ShaderPipeline, const FSHAHash& MaterialShaderMapHash);
1887#endif
1888
1889#if WITH_EDITOR && ALLOW_SHADERMAP_DEBUG_DATA
1890 // InFlightJobs is only populated during cooking as its current use is to track cook hangs.
1891 // if we need to generalize this later threadsafety will need to be added to make this work with ODSC
1892 // where the same shadermap can be accessed simultaneously both on GT and RT
1894#endif
1895
1897 static void ShaderMapResourceExplicitRelease(const FShaderMapResource* ShaderMapResource);
1898
1901 friend class UE::Cook::FODSCClientData;
1902};
1903
1906{
1907 None = 0,
1909};
1911
1912
1925
1937
1943{
1944public:
1949 // Expressions are different (e.g. ResolvedView.PrevWorldViewOrigin) when using previous frame's values, value if from FHLSLMaterialTranslator::bCompilingPreviousFrame
1951
1953 Expression(InExpression),
1954 OutputIndex(InOutputIndex),
1955 MaterialAttributeID(FGuid(0,0,0,0)),
1956 bCompilingPreviousFrameKey(false)
1957 {}
1958
1960 Expression(InExpression),
1961 OutputIndex(InOutputIndex),
1962 MaterialAttributeID(InMaterialAttributeID),
1963 bCompilingPreviousFrameKey(bInCompilingPreviousFrameKey)
1964 {}
1965
1966
1968 {
1969 return X.Expression == Y.Expression && X.OutputIndex == Y.OutputIndex && X.MaterialAttributeID == Y.MaterialAttributeID && X.bCompilingPreviousFrameKey == Y.bCompilingPreviousFrameKey;
1970 }
1971
1973 {
1974 return PointerHash(ExpressionKey.Expression);
1975 }
1976};
1977
1980{
1981public:
1985
1987 {
1988 ClearSharedFunctionStates();
1989 }
1990
1999
2001 {
2002 for (auto SavedStateIt = SharedFunctionStates.CreateIterator(); SavedStateIt; ++SavedStateIt)
2003 {
2006 delete SavedState;
2007 }
2008 SharedFunctionStates.Empty();
2009 }
2010
2011 void Reset()
2012 {
2013 ExpressionStack.Empty();
2014 ExpressionCodeMap.Empty();
2015 ClearSharedFunctionStates();
2016 }
2017
2019
2020 // Stack used to avoid re-entry within this function
2022
2025
2027
2028private:
2031};
2032
2034UE_DEPRECATED(5.8, "Should call UMaterialExpression::IsAllowedIn on the Class' DefaultObject")
2036
2039
2044
2047extern ENGINE_API bool CanConnectMaterialValueTypes(const uint32 InputType, const uint32 OutputType);
2049
2058{
2059public:
2060#if UE_CHECK_FMATERIAL_LIFETIME
2061 ENGINE_API uint32 AddRef() const;
2062 ENGINE_API uint32 Release() const;
2063 inline uint32 GetRefCount() const { return uint32(NumDebugRefs.GetValue()); }
2064
2066#else
2067 inline uint32 AddRef() const { return 0u; }
2068 inline uint32 Release() const { return 0u; }
2069 inline uint32 GetRefCount() const { return 0u; }
2070#endif
2071
2073 ENGINE_API static void SetShaderMapsOnMaterialResources(const TMap<TRefCountPtr<FMaterial>, TRefCountPtr<FMaterialShaderMap>>& MaterialsToUpdate);
2074
2076
2077 ENGINE_API static void DeleteMaterialsOnRenderThread(TArray<TRefCountPtr<FMaterial>>& MaterialsRenderThread);
2078
2079 template<typename TMaterial>
2081 {
2082 if (Materials.Num() > 0)
2083 {
2086 {
2087 FMaterial* MaterialToDestroy = Material.GetReference();
2090 }
2091
2092 Materials.Empty();
2093 DeleteMaterialsOnRenderThread(MaterialsRenderThread);
2094 }
2095 }
2096
2097 template<typename TMaterial>
2099 {
2100 if (Materials.Num() > 0)
2101 {
2104 {
2105 Material->PrepareDestroy_GameThread();
2107 }
2108
2109 Materials.Empty();
2110 DeleteMaterialsOnRenderThread(MaterialsRenderThread);
2111 }
2112 }
2113
2118 RenderingThreadShaderMap(NULL),
2119 QualityLevel(EMaterialQualityLevel::Num),
2120 FeatureLevel(ERHIFeatureLevel::Num),
2122 ShaderPlatform(EShaderPlatform::SP_NumPlatforms),
2123#endif
2124 bContainsInlineShaders(false),
2125 bLoadedCookedShaderMapId(false),
2126 bAllowPixelDepthOffset(true)
2127 {
2128#if UE_CHECK_FMATERIAL_LIFETIME
2129 bOwnerBeginDestroyed = false;
2130#endif
2131 }
2132
2136 ENGINE_API virtual ~FMaterial();
2137
2142 ENGINE_API virtual bool PrepareDestroy_GameThread();
2143
2147 ENGINE_API virtual void PrepareDestroy_RenderThread();
2148
2153 UE_DEPRECATED(5.7, "Call CacheShaders without EShaderPlatform as its now cached inside the FMaterial")
2156
2161 UE_DEPRECATED(5.7, "Call CacheShaders without EShaderPlatform as its now cached inside the FMaterial")
2163 ENGINE_API bool CacheShaders(const FMaterialShaderMapId& ShaderMapId, EMaterialShaderPrecompileMode PrecompileMode = EMaterialShaderPrecompileMode::Default, const ITargetPlatform* TargetPlatform = nullptr);
2164
2165#if WITH_EDITOR
2166
2171 UE_DEPRECATED(5.7, "Call BeginCacheShaders without EShaderPlatform as its now cached inside the FMaterial")
2173 ENGINE_API void BeginCacheShaders(EMaterialShaderPrecompileMode PrecompileMode = EMaterialShaderPrecompileMode::Default, const ITargetPlatform* TargetPlatform = nullptr, TUniqueFunction<void(bool bSuccess)>&& CompletionCallback = nullptr);
2174
2180 ENGINE_API void BeginCacheShaders(const FMaterialShaderMapId& ShaderMapId, EShaderPlatform Platform, EMaterialShaderPrecompileMode PrecompileMode = EMaterialShaderPrecompileMode::Default, const ITargetPlatform* TargetPlatform = nullptr, TUniqueFunction<void(bool bSuccess)>&& CompletionCallback = nullptr);
2181 ENGINE_API void BeginCacheShaders(const FMaterialShaderMapId& ShaderMapId, EMaterialShaderPrecompileMode PrecompileMode = EMaterialShaderPrecompileMode::Default, const ITargetPlatform* TargetPlatform = nullptr, TUniqueFunction<void(bool bSuccess)>&& CompletionCallback = nullptr);
2182
2186 ENGINE_API bool IsCachingShaders() const;
2187
2191 ENGINE_API bool FinishCacheShaders() const;
2192
2200 UE_DEPRECATED(5.7, "Call CacheShaders without EShaderPlatform as its now cached inside the FMaterial")
2201 ENGINE_API void CacheGivenTypes(EShaderPlatform ShaderPlatform, const TArray<const FVertexFactoryType*>& VFTypes, const TArray<const FShaderPipelineType*>& PipelineTypes, const TArray<const FShaderType*>& ShaderTypes);
2202 ENGINE_API void CacheGivenTypes(const TArray<const FVertexFactoryType*>& VFTypes, const TArray<const FShaderPipelineType*>& PipelineTypes, const TArray<const FShaderType*>& ShaderTypes);
2203
2205#endif
2206
2210 UE_DEPRECATED(5.7, "Call CollectPSOs without ERHIFeatureLevel::Type as its now cached inside the FMaterial")
2213
2217 ENGINE_API TArray<FMaterialPSOPrecacheRequestID> GetMaterialPSOPrecacheRequestIDs() const;
2218
2222 void ClearPrecachedPSORequestIDs();
2223
2233 UE_DEPRECATED(5.7, "Call ShouldCachePipeline without EShaderPlatform as its now cached inside the FMaterial")
2234 ENGINE_API virtual bool ShouldCache(EShaderPlatform Platform, const FShaderType* ShaderType, const FVertexFactoryType* VertexFactoryType) const final;
2235 ENGINE_API virtual bool ShouldCache(const FShaderType* ShaderType, const FVertexFactoryType* VertexFactoryType) const;
2236
2237 UE_DEPRECATED(5.7, "Call ShouldCachePipeline without EShaderPlatform as its now cached inside the FMaterial")
2238 ENGINE_API bool ShouldCachePipeline(EShaderPlatform Platform, const FShaderPipelineType* PipelineType, const FVertexFactoryType* VertexFactoryType) const;
2239 ENGINE_API bool ShouldCachePipeline(const FShaderPipelineType* PipelineType, const FVertexFactoryType* VertexFactoryType) const;
2240
2242 ENGINE_API virtual void LegacySerialize(FArchive& Ar);
2243
2245 void SerializeInlineShaderMap(FArchive& Ar, const FName& SerializingAsset = NAME_None);
2246
2248 void RegisterInlineShaderMap(bool bLoadingCooked);
2249
2251 void ReleaseShaderMap();
2252
2254 void DiscardShaderMap();
2255
2256 // Material properties.
2257
2259 {
2260 FMaterialShaderMapId* OutId = nullptr; // Guaranteed non-null in BuildShaderMapIdOverride
2261
2263 const ITargetPlatform* TargetPlatform = nullptr;
2265 };
2266
2267 UE_DEPRECATED(5.7, "Call BuildShaderMapId instead")
2268 virtual void GetShaderMapId(EShaderPlatform Platform, const ITargetPlatform* TargetPlatform,
2269 FMaterialShaderMapId& OutId) const
2270 {
2271 BuildShaderMapId(OutId, TargetPlatform);
2272 }
2273
2275 UE_DEPRECATED(5.7, "Call BuildShaderMapId without EShaderPlatform as its now cached inside the FMaterial")
2276 void BuildShaderMapId(FMaterialShaderMapId& OutId, EShaderPlatform Platform, const ITargetPlatform* TargetPlatform,
2277 EMaterialKeyInclude IncludeFlags = EMaterialKeyInclude::All) const
2278 {
2279 BuildShaderMapId(OutId, TargetPlatform, IncludeFlags);
2280 }
2281
2282 void BuildShaderMapId(FMaterialShaderMapId& OutId, const ITargetPlatform* TargetPlatform,
2283 EMaterialKeyInclude IncludeFlags = EMaterialKeyInclude::All) const
2284 {
2285 BuildShaderMapIdOverride({
2286 .OutId = &OutId, .Platform = GetShaderPlatform(), .TargetPlatform = TargetPlatform, .IncludeFlags = IncludeFlags }
2287 );
2288 }
2289
2290protected:
2294 ENGINE_API virtual void BuildShaderMapIdOverride(const FBuildShaderMapIdArgs& Args) const;
2295
2296public:
2297
2298#if WITH_EDITORONLY_DATA
2299 UE_DEPRECATED(5.7, "Call GetStaticParameterSet without EShaderPlatform as its now cached inside the FMaterial")
2302#endif // WITH_EDITORONLY_DATA
2303 virtual EMaterialDomain GetMaterialDomain() const = 0; // See EMaterialDomain.
2304 virtual bool IsTwoSided() const = 0;
2305 virtual bool IsThinSurface() const = 0;
2306 virtual bool IsDitheredLODTransition() const = 0;
2307 virtual bool IsTranslucencyWritingCustomDepth() const { return false; }
2308 virtual bool IsTranslucencyWritingVelocity() const { return false; }
2309 virtual bool IsTranslucencyVelocityFromDepth() const{ return false; }
2310 virtual bool IsTranslucencyWritingFrontLayerTransparency() const { return false; }
2311 virtual bool IsTangentSpaceNormal() const { return false; }
2312 virtual bool ShouldGenerateSphericalParticleNormals() const { return false; }
2313 virtual bool ShouldDisableDepthTest() const { return false; }
2314 virtual bool ShouldWriteOnlyAlpha() const { return false; }
2315 virtual bool ShouldEnableResponsiveAA() const { return false; }
2316 virtual bool ShouldDoSSR() const { return false; }
2317 virtual bool ShouldDoContactShadows() const { return false; }
2318 virtual bool HasPixelAnimation() const { return false; }
2319 virtual bool UsesTemporalResponsiveness() const { return false; }
2320 virtual bool UsesMotionVectorWorldOffset() const { return false; }
2321 virtual bool IsLightFunction() const = 0;
2322 virtual bool IsUsedWithEditorCompositing() const { return false; }
2323 virtual bool IsDeferredDecal() const = 0;
2324 virtual bool IsUIMaterial() const = 0;
2325 virtual bool IsVolumetricPrimitive() const = 0;
2326 virtual bool IsWireframe() const = 0;
2327 virtual bool IsPostProcessMaterial() const { return false; }
2328 virtual bool IsSpecialEngineMaterial() const = 0;
2329 virtual bool IsUsedWithSkeletalMesh() const { return false; }
2330 virtual bool IsUsedWithLandscape() const { return false; }
2331 virtual bool IsUsedWithParticleSystem() const { return false; }
2332 virtual bool IsUsedWithParticleSprites() const { return false; }
2333 virtual bool IsUsedWithBeamTrails() const { return false; }
2334 virtual bool IsUsedWithMeshParticles() const { return false; }
2335 virtual bool IsUsedWithNiagaraSprites() const { return false; }
2336 virtual bool IsUsedWithNiagaraRibbons() const { return false; }
2337 virtual bool IsUsedWithNiagaraMeshParticles() const { return false; }
2338 virtual bool IsUsedWithStaticLighting() const { return false; }
2339 virtual bool IsUsedWithMorphTargets() const { return false; }
2340 virtual bool IsUsedWithSplineMeshes() const { return false; }
2341 virtual bool IsUsedWithInstancedStaticMeshes() const { return false; }
2342 virtual bool IsUsedWithGeometryCollections() const { return false; }
2343 virtual bool IsUsedWithAPEXCloth() const { return false; }
2344 virtual bool IsUsedWithNanite() const { return false; }
2345 virtual bool IsUsedWithVoxels() const { return false; }
2346 virtual bool IsUsedWithVolumetricCloud() const { return false; }
2347 virtual bool IsUsedWithHeterogeneousVolumes() const { return false; }
2348 virtual bool SamplesMaterialCache() const { return false; }
2349 virtual bool HasMaterialCacheOutput() const { return false; }
2350 virtual bool IsUsedWithUI() const { return false; }
2351 virtual bool IsUsedWithGeometryCache() const { return false; }
2352 virtual bool IsUsedWithWater() const { return false; }
2353 virtual bool IsUsedWithHairStrands() const { return false; }
2354 virtual bool IsUsedWithLidarPointCloud() const { return false; }
2355 virtual bool IsUsedWithVirtualHeightfieldMesh() const { return false; }
2356 virtual bool IsUsedWithNeuralNetworks() const { return false; }
2357 virtual bool IsUsedWithStaticMesh() const { return true; }
2358 virtual bool IsFullyRough() const { return false; }
2359 virtual bool GetForceCompatibleWithLightFunctionAtlas() const { return false; }
2360 virtual bool UseNormalCurvatureToRoughness() const { return false; }
2361 virtual enum EMaterialFloatPrecisionMode GetMaterialFloatPrecisionMode() const { return EMaterialFloatPrecisionMode::MFPM_Default; };
2362 virtual bool IsUsingAlphaToCoverage() const { return false; }
2363 virtual bool IsUsingPreintegratedGFForSimpleIBL() const { return false; }
2364 virtual bool IsUsingHQForwardReflections() const { return false; }
2365 virtual bool GetForwardBlendsSkyLightCubemaps() const { return false; }
2366 virtual bool IsUsingPlanarForwardReflections() const { return false; }
2367 virtual bool IsNonmetal() const { return false; }
2368 virtual bool UseLmDirectionality() const { return true; }
2369 virtual bool IsMasked() const = 0;
2370 virtual bool IsDitherMasked() const { return false; }
2371 virtual bool AllowNegativeEmissiveColor() const { return false; }
2372 virtual enum EBlendMode GetBlendMode() const = 0;
2373 ENGINE_API virtual enum ERefractionMode GetRefractionMode() const;
2374 UE_DEPRECATED(5.7, "This is not longer valid since even when not plugged in, the default value on the root node can be used")
2375 virtual bool GetRootNodeOverridesDefaultRefraction() const = 0;
2376 virtual FMaterialShadingModelField GetShadingModels() const = 0;
2377 virtual bool IsShadingModelFromMaterialExpression() const = 0;
2378 virtual enum ETranslucencyLightingMode GetTranslucencyLightingMode() const { return TLM_VolumetricNonDirectional; };
2379 virtual float GetOpacityMaskClipValue() const = 0;
2380 virtual bool GetCastDynamicShadowAsMasked() const = 0;
2381 virtual bool IsDistorted() const { return false; };
2384 virtual float GetTranslucencyDirectionalLightingIntensity() const { return 1.0f; }
2385 virtual float GetTranslucentShadowDensityScale() const { return 1.0f; }
2386 virtual float GetTranslucentSelfShadowDensityScale() const { return 1.0f; }
2387 virtual float GetTranslucentSelfShadowSecondDensityScale() const { return 1.0f; }
2388 virtual float GetTranslucentSelfShadowSecondOpacity() const { return 1.0f; }
2389 virtual float GetTranslucentBackscatteringExponent() const { return 1.0f; }
2391 virtual bool IsDisplacementFadeEnabled() const { return false; }
2393 virtual bool IsTranslucencyAfterDOFEnabled() const { return false; }
2394 virtual bool IsTranslucencyAfterMotionBlurEnabled() const { return false; }
2395 UE_DEPRECATED(5.7, "Call IsDualBlendingEnabled without EShaderPlatform as its now cached inside the FMaterial")
2396 virtual bool IsDualBlendingEnabled(EShaderPlatform Platform) const final { return false; }
2397 virtual bool IsDualBlendingEnabled() const { return false; }
2398 virtual bool IsMobileSeparateTranslucencyEnabled() const { return false; }
2400 virtual float GetTranslucentShadowStartOffset() const { return 0.0f; }
2401 virtual float GetRefractionDepthBiasValue() const { return 0.0f; }
2402 virtual bool ShouldApplyFogging() const { return false; }
2403 virtual bool ShouldApplyCloudFogging() const { return false; }
2404 virtual bool ShouldAlwaysEvaluateWorldPositionOffset() const { return false; }
2405 virtual bool ComputeFogPerPixel() const { return false; }
2406 virtual bool IsSky() const { return false; }
2407 virtual bool HasSubstrateRoughnessTracking() const { return true; }
2408 virtual bool AllowTranslucentLocalLightShadow() const { return false; }
2409 virtual float GetTranslucentLocalLightShadowQuality() const { return 0.f; }
2410 virtual float GetTranslucentDirectionalLightShadowQuality() const { return 0.f; }
2411 virtual FString GetFriendlyName() const = 0;
2413 virtual FString GetAssetName() const { return GetFriendlyName(); }
2414
2415#if WITH_EDITOR
2418 UE_DEPRECATED(5.7, "Call GetUniqueAssetName without EShaderPlatform as its now cached inside the FMaterial")
2419 ENGINE_API FString GetUniqueAssetName(EShaderPlatform Platform, const FMaterialShaderMapId& ShaderMapId) const;
2420 ENGINE_API FString GetUniqueAssetName(const FMaterialShaderMapId& ShaderMapId) const;
2421#else
2423 UE_DEPRECATED(5.7, "Call GetUniqueAssetName without EShaderPlatform as its now cached inside the FMaterial")
2424 FString GetUniqueAssetName(EShaderPlatform Platform, const FMaterialShaderMapId& ShaderMapId) const { return GetAssetName(); }
2425 FString GetUniqueAssetName(const FMaterialShaderMapId& ShaderMapId) const { return GetAssetName(); }
2426#endif
2427 virtual bool HasVertexPositionOffsetConnected() const { return false; }
2428 virtual bool HasPixelDepthOffsetConnected() const { return false; }
2429 virtual uint32 GetMaterialDecalResponse() const { return 0; }
2430 virtual bool HasBaseColorConnected() const { return false; }
2431 virtual bool HasNormalConnected() const { return false; }
2432 virtual bool HasRoughnessConnected() const { return false; }
2433 virtual bool HasSpecularConnected() const { return false; }
2434 virtual bool HasMetallicConnected() const { return false; }
2435 virtual bool HasEmissiveColorConnected() const { return false; }
2436 virtual bool HasAnisotropyConnected() const { return false; }
2437 virtual bool HasAmbientOcclusionConnected() const { return false; }
2438 virtual bool HasMaterialPropertyConnected(EMaterialProperty In) const { return false; }
2439 virtual bool HasDisplacementConnected() const { return false; }
2440 virtual bool IsSubstrateMaterial() const { return false; }
2441 virtual bool RequiresSynchronousCompilation() const { return false; };
2442 virtual bool IsDefaultMaterial() const { return false; };
2443 virtual int32 GetNumCustomizedUVs() const { return 0; }
2444 virtual int32 GetNumMaterialCacheTags() const { return 0; }
2445 virtual int32 GetBlendableLocation() const { return 0; }
2446 virtual int32 GetBlendablePriority() const { return 0; }
2447 virtual bool GetBlendableOutputAlpha() const { return false; }
2448 virtual bool GetDisablePreExposureScale() const { return false; }
2449 virtual bool IsStencilTestEnabled() const { return false; }
2450 virtual uint32 GetStencilRefValue() const { return 0; }
2451 virtual uint32 GetStencilCompare() const { return 0; }
2452 virtual bool HasPerInstanceCustomData() const { return false; }
2453 virtual bool HasPerInstanceRandom() const { return false; }
2454 virtual bool HasVertexInterpolator() const { return false; }
2455 virtual bool HasRuntimeVirtualTextureOutput() const { return false; }
2456 virtual bool HasFirstPersonOutput() const { return false; }
2457 virtual bool CastsRayTracedShadows() const { return true; }
2458 virtual bool IsTessellationEnabled() const { return false; }
2459 virtual bool HasRenderTracePhysicalMaterialOutputs() const { return false; }
2460 virtual uint16 GetPreshaderGap() const { return 0; }
2461 virtual EMaterialShadingRate GetShadingRate() const { return MSR_1x1; }
2462 virtual int32 GetNeuralProfileId() const { return INDEX_NONE; }
2463 virtual bool IsVariableRateShadingAllowed() const { return true; }
2466
2470 virtual bool IsPersistent() const = 0;
2471 virtual UMaterialInterface* GetMaterialInterface() const { return NULL; }
2473 FName GetOwnerFName() const;
2474
2475 virtual bool IsPreview() const { return false; }
2476
2477 ENGINE_API const FMaterialCachedExpressionData& GetCachedExpressionData() const;
2478
2480 ENGINE_API bool IsRequiredComplete() const;
2481
2482#if WITH_EDITOR
2486 virtual void NotifyCompilationFinished() { }
2487
2491 ENGINE_API void CancelCompilation();
2492
2497
2501 ENGINE_API static void FinishCompilation(const TCHAR* MaterialName, const TArray<FMaterial*>& MaterialsToCompile);
2502
2508 ENGINE_API bool IsCompilationFinished() const;
2509
2511 ENGINE_API virtual bool IsUsingNewHLSLGenerator() const;
2512
2514 ENGINE_API virtual const FSubstrateCompilationConfig& GetSubstrateCompilationConfig() const;
2516 ENGINE_API virtual void SetSubstrateCompilationConfig(FSubstrateCompilationConfig& SubstrateCompilationConfig);
2517
2518#endif // WITH_EDITOR
2519
2525 ENGINE_API bool HasValidGameThreadShaderMap() const;
2526
2528 inline bool ShouldCastDynamicShadows() const
2529 {
2530 const EBlendMode BlendMode = GetBlendMode();
2531 return !GetShadingModels().HasOnlyShadingModel(MSM_SingleLayerWater) &&
2532 (IsOpaqueBlendMode(BlendMode)
2533 || IsMaskedBlendMode(BlendMode)
2534 || (IsTranslucentOnlyBlendMode(BlendMode) && GetCastDynamicShadowAsMasked()));
2535 }
2536
2537
2539 {
2540 return QualityLevel;
2541 }
2542
2543#if WITH_EDITOR
2545#endif // WITH_EDITOR
2546
2547 // Accessors.
2548 ENGINE_API const FUniformExpressionSet& GetUniformExpressions() const;
2550 ENGINE_API TConstArrayView<FMaterialTextureCollectionParameterInfo> GetUniformTextureCollectionExpressions() const;
2551 ENGINE_API TArrayView<const FMaterialNumericParameterInfo> GetUniformNumericParameterExpressions() const;
2552
2559
2560#if WITH_EDITOR
2561 const TArray<FString>& GetCompileErrors() const { return CompileErrors; }
2564 const FGuid& GetLegacyId() const { return Id_DEPRECATED; }
2565 const FString& GetDebugGroupName() const { return DebugGroupName; }
2566#endif // WITH_EDITOR
2567
2568 inline const FStaticFeatureLevel GetFeatureLevel() const { checkSlow(FeatureLevel != ERHIFeatureLevel::Num); return FeatureLevel; }
2570 {
2571#if WITH_EDITOR
2572 checkSlow(ShaderPlatform != EShaderPlatform::SP_NumPlatforms); return ShaderPlatform;
2573#else
2574 return GMaxRHIShaderPlatform;
2575#endif
2576 }
2578 {
2579 //@todo - remove non-dynamic parameter particle VF and always support dynamic parameter
2580 return true;
2581 }
2582 ENGINE_API bool RequiresSceneColorCopy_GameThread() const;
2583 ENGINE_API bool RequiresSceneColorCopy_RenderThread() const;
2584 ENGINE_API bool NeedsSceneTextures() const;
2585 ENGINE_API bool NeedsGBuffer() const;
2586 ENGINE_API bool UsesEyeAdaptation() const;
2587 ENGINE_API bool UsesGlobalDistanceField_GameThread() const;
2588
2590 ENGINE_API bool MaterialUsesWorldPositionOffset_RenderThread() const;
2591 ENGINE_API bool MaterialUsesWorldPositionOffset_GameThread() const;
2592
2594 ENGINE_API bool MaterialUsesDisplacement_RenderThread() const;
2595 ENGINE_API bool MaterialUsesDisplacement_GameThread() const;
2596
2598 ENGINE_API bool MaterialUsesPixelDepthOffset_RenderThread() const;
2599 ENGINE_API bool MaterialUsesPixelDepthOffset_GameThread() const;
2600
2602 ENGINE_API bool MaterialUsesTemporalResponsiveness_RenderThread() const;
2603 ENGINE_API bool MaterialUsesTemporalResponsiveness_GameThread() const;
2604
2606 ENGINE_API bool MaterialUsesMotionVectorWorldOffset_RenderThread() const;
2607 ENGINE_API bool MaterialUsesMotionVectorWorldOffset_GameThread() const;
2608
2610 ENGINE_API bool MaterialModifiesMeshPosition_RenderThread() const;
2611 ENGINE_API bool MaterialModifiesMeshPosition_GameThread() const;
2612
2614 ENGINE_API bool MaterialUsesDistanceCullFade_GameThread() const;
2615
2617 ENGINE_API bool MaterialUsesSceneDepthLookup_RenderThread() const;
2618 ENGINE_API bool MaterialUsesSceneDepthLookup_GameThread() const;
2619
2621 ENGINE_API uint8 GetCustomDepthStencilUsageMask_GameThread() const;
2622
2624 ENGINE_API bool MaterialMayModifyMeshPosition() const;
2625
2627 ENGINE_API uint8 GetRuntimeVirtualTextureOutputAttibuteMask_GameThread() const;
2628 ENGINE_API uint8 GetRuntimeVirtualTextureOutputAttibuteMask_RenderThread() const;
2629
2630 ENGINE_API bool MaterialUsesAnisotropy_GameThread() const;
2631 ENGINE_API bool MaterialUsesAnisotropy_RenderThread() const;
2632
2634 ENGINE_API bool MaterialIsLightFunctionAtlasCompatible_GameThread() const;
2635 ENGINE_API bool MaterialIsLightFunctionAtlasCompatible_RenderThread() const;
2636
2638 ENGINE_API uint8 MaterialGetSubstrateMaterialType_GameThread() const;
2639 ENGINE_API uint8 MaterialGetSubstrateMaterialType_RenderThread() const;
2640
2642 ENGINE_API uint8 MaterialGetSubstrateClosureCount_GameThread() const;
2643 ENGINE_API uint8 MaterialGetSubstrateClosureCount_RenderThread() const;
2644
2646 ENGINE_API uint8 MaterialGetSubstrateUintPerPixel_GameThread() const;
2647 ENGINE_API uint8 MaterialGetSubstrateUintPerPixel_RenderThread() const;
2648
2650 ENGINE_API ESubstrateTileType MaterialGetSubstrateTileType_GameThread() const;
2651 ENGINE_API ESubstrateTileType MaterialGetSubstrateTileType_RenderThread() const;
2652
2654 ENGINE_API ESubstrateBsdfFeature MaterialGetSubstrateMaterialBsdfFeatures_GameThread() const;
2655 ENGINE_API ESubstrateBsdfFeature MaterialGetSubstrateMaterialBsdfFeatures_RenderThread() const;
2656
2658 {
2660 return GameThreadShaderMap;
2661 }
2662
2663 ENGINE_API void SetGameThreadShaderMap(FMaterialShaderMap* InMaterialShaderMap);
2664 ENGINE_API void SetInlineShaderMap(FMaterialShaderMap* InMaterialShaderMap);
2665 ENGINE_API void UpdateInlineShaderMapIsComplete();
2666
2667 ENGINE_API class FMaterialShaderMap* GetRenderingThreadShaderMap() const;
2668
2670 {
2672 return bGameThreadShaderMapIsComplete.load(std::memory_order_relaxed);
2673 }
2674
2676 {
2678 return bRenderingThreadShaderMapIsComplete.load(std::memory_order_relaxed);
2679 }
2680
2681 ENGINE_API void SetRenderingThreadShaderMap(TRefCountPtr<FMaterialShaderMap>& InMaterialShaderMap);
2682
2683 ENGINE_API virtual void AddReferencedObjects(FReferenceCollector& Collector);
2684
2687
2692 template<typename ShaderType>
2693 TShaderRef<ShaderType> GetShader(FVertexFactoryType* VertexFactoryType, const typename ShaderType::FPermutationDomain& PermutationVector, bool bFatalIfMissing = true) const
2694 {
2695 return GetShader<ShaderType>(VertexFactoryType, PermutationVector.ToDimensionValueId(), bFatalIfMissing);
2696 }
2697
2698 template <typename ShaderType>
2699 TShaderRef<ShaderType> GetShader(FVertexFactoryType* VertexFactoryType, int32 PermutationId = 0, bool bFatalIfMissing = true) const
2700 {
2701 return TShaderRef<ShaderType>::Cast(GetShader(&ShaderType::GetStaticType(), VertexFactoryType, PermutationId, bFatalIfMissing));
2702 }
2703
2704 ENGINE_API FShaderPipelineRef GetShaderPipeline(class FShaderPipelineType* ShaderPipelineType, FVertexFactoryType* VertexFactoryType, bool bFatalIfNotFound = true) const;
2705
2707
2709
2710 UE_DEPRECATED(5.7, "Call ShouldCacheShaders without EShaderPlatform as its now cached inside the FMaterial")
2711 ENGINE_API bool ShouldCacheShaders(const EShaderPlatform ShaderPlatform, const FMaterialShaderTypes& InTypes, const FVertexFactoryType* InVertexFactoryType) const;
2712 ENGINE_API bool ShouldCacheShaders(const FMaterialShaderTypes& InTypes, const FVertexFactoryType* InVertexFactoryType) const;
2713
2714#if WITH_EDITOR
2717#endif // WITH_EDITOR
2718
2720 virtual FString GetMaterialUsageDescription() const = 0;
2721
2723 virtual bool GetAllowDevelopmentShaderCompile()const{ return true; }
2724
2727
2734 ENGINE_API bool GetMaterialExpressionSource(FString& OutSource);
2735
2737 ENGINE_API void GetPreshaderStats(uint32& TotalParameters, uint32& TotalOps) const;
2738
2739 /* Helper function to look at both IsMasked and IsDitheredLODTransition to determine if it writes every pixel */
2740 ENGINE_API bool WritesEveryPixel(bool bShadowPass = false) const;
2741 ENGINE_API bool WritesEveryPixel(bool bShadowPass, bool bVFTypeSupportsNullPixelShader) const;
2742
2744 UE_DEPRECATED(5.7, "Call SetupExtraCompilationSettings without EShaderPlatform as its now cached inside the FMaterial")
2745 virtual void SetupExtraCompilationSettings(const EShaderPlatform Platform, FExtraShaderCompilerSettings& Settings) const final { SetupExtraCompilationSettings(Settings); }
2747
2748 void DumpDebugInfo(FOutputDevice& OutputDevice);
2749 UE_DEPRECATED(5.7, "Call SaveShaderStableKeys without EShaderPlatform as its now cached inside the FMaterial")
2750 void SaveShaderStableKeys(EShaderPlatform TargetShaderPlatform, struct FStableShaderKeyAndValue& SaveKeyVal); // arg is non-const, we modify it as we go
2751 void SaveShaderStableKeys(struct FStableShaderKeyAndValue& SaveKeyVal); // arg is non-const, we modify it as we go
2752
2753#if WITH_EDITOR
2762 UE_DEPRECATED(5.7, "Call GetShaderTypes without EShaderPlatform as its now cached inside the FMaterial")
2765
2769#endif // WITH_EDITOR
2770
2771#if WITH_EDITOR
2777 {
2779 }
2780
2783
2785 virtual FName GetAssetPath() const { return NAME_None; };
2786
2787#endif // WITH_EDITOR
2788
2789 virtual FString GetFullPath() const { return TEXT(""); };
2790
2791#if WITH_EDITOR
2793 virtual void EndAllowCachingStaticParameterValues() {};
2794#endif // WITH_EDITOR
2795
2796#if UE_CHECK_FMATERIAL_LIFETIME
2797 void SetOwnerBeginDestroyed() { bOwnerBeginDestroyed = true; }
2798 bool IsOwnerBeginDestroyed() const { return bOwnerBeginDestroyed; }
2799#else
2800 inline void SetOwnerBeginDestroyed() {}
2801 inline bool IsOwnerBeginDestroyed() const { return false; }
2802#endif
2803
2804#if WITH_EDITORONLY_DATA
2805 /* Gather any UMaterialExpressionCustomOutput expressions they can be compiled in turn */
2807
2808 /* Gather any UMaterialExpressionCustomOutput expressions in the material and referenced function calls */
2810#endif // WITH_EDITORONLY_DATA
2811
2812#if WITH_ODSC
2813 uint8 GetODSCMetaData() const { return ODSCMetaData.load(std::memory_order_relaxed); };
2814 void SetODSCMetaData(uint8 InODSCMetaData) const { ODSCMetaData.store(InODSCMetaData, std::memory_order_relaxed); };
2815#endif
2816
2818 virtual const FMaterialLayersFunctions* GetMaterialLayers() const { return nullptr; }
2819
2820protected:
2821 // shared code needed for GetUniformScalarParameterExpressions, GetUniformVectorParameterExpressions, GetUniformCubeTextureExpressions..
2822 // @return can be 0
2823 const FMaterialShaderMap* GetShaderMapToUse() const;
2824
2825#if WITH_EDITOR
2830
2832
2837 virtual bool CheckInValidStateForCompilation(class FMaterialCompiler* Compiler) const { return true; }
2838#endif // WITH_EDITOR
2839
2846
2848 virtual int32 CompileCustomAttribute(const FGuid& AttributeID, class FMaterialCompiler* Compiler) const {return INDEX_NONE;}
2849
2851 virtual FString GetBaseMaterialPathName() const { return TEXT(""); }
2852 virtual FString GetDebugName() const { return GetBaseMaterialPathName(); }
2853
2854 UE_DEPRECATED(5.7, "Please use SetQualityLevelProperties with EShaderPlatform argument and not ERHIFeatureLevel::Type")
2859
2861 {
2862 QualityLevel = InQualityLevel;
2863
2864#if WITH_EDITOR
2866 ShaderPlatform = InShaderPlatform;
2867#else
2868 FeatureLevel = GMaxRHIFeatureLevel;
2869#endif
2870 }
2871
2878
2880 virtual FGuid GetMaterialId() const = 0;
2881
2883 UE_DEPRECATED(5.7, "Call GetDependentShaderAndVFTypes without EShaderPlatform as its now cached inside the FMaterial")
2886
2887 bool GetLoadedCookedShaderMapId() const { return bLoadedCookedShaderMapId; }
2888
2889#if WITH_EDITOR
2891
2897 virtual UMaterialExpression* GetMaterialGraphNodePreviewExpression() const { return nullptr; }
2898#endif
2899
2900 void SetAllowPixelDepthOffset(bool bEnable) { bAllowPixelDepthOffset = bEnable; }
2901 bool AllowPixelDepthOffset() const { return bAllowPixelDepthOffset; }
2902
2903private:
2904#if WITH_EDITOR
2906#endif
2907 void ReleaseRenderThreadCompilingShaderMap();
2908
2909#if WITH_EDITOR
2916
2918
2921
2924
2927
2930
2931 FString DebugGroupName;
2932#endif // WITH_EDITOR
2933
2937 mutable std::atomic<int8> RenderingThreadShaderMapSubmittedPriority { -1 };
2938
2942 EShaderCompileJobPriority GameThreadShaderMapSubmittedPriority = EShaderCompileJobPriority::None;
2943
2950 TRefCountPtr<FMaterialShaderMap> GameThreadShaderMap;
2951
2956 TRefCountPtr<FMaterialShaderMap> RenderingThreadShaderMap;
2957
2958#if WITH_EDITOR
2964
2969 //TArray<int32, TInlineAllocator<1> > OutstandingCompileShaderMapIds;
2970#endif // WITH_EDITOR
2971
2973 EMaterialQualityLevel::Type QualityLevel;
2974
2975#if WITH_ODSC
2976 mutable std::atomic<uint8> ODSCMetaData = {};
2977#endif
2978
2980 ERHIFeatureLevel::Type FeatureLevel;
2981
2982#if WITH_EDITOR
2984 EShaderPlatform ShaderPlatform;
2985#endif
2986
2991 uint32 bContainsInlineShaders : 1;
2992 uint32 bLoadedCookedShaderMapId : 1;
2993
2994 uint32 bAllowPixelDepthOffset : 1;
2995
2996#if UE_CHECK_FMATERIAL_LIFETIME
2999#endif // UE_CHECK_FMATERIAL_LIFETIME
3000
3001 // These are touched by different threads and need to be outside the bitfield above.
3002 std::atomic<bool> bGameThreadShaderMapIsComplete{ false };
3003 std::atomic<bool> bRenderingThreadShaderMapIsComplete{ false };
3004
3006 TArray<FMaterialPSOPrecacheRequestID> PrecachedPSORequestIDs;
3007
3009 static FCriticalSection PrecachedPSORequestIDsCS;
3010
3011#if WITH_EDITOR
3016 const FMaterialShaderMapId& ShaderMapId,
3019 const ITargetPlatform* TargetPlatform = nullptr);
3020
3026
3032
3038
3044 ) const;
3045#endif // WITH_EDITOR
3046
3048 static void GetOutputPrecision(EMaterialFloatPrecisionMode FloatPrecisionMode, bool& bFullPrecisionInPS, bool& bFullPrecisionInMaterial);
3049
3053 ENGINE_API TShaderRef<FShader> GetShader(class FMeshMaterialShaderType* ShaderType, FVertexFactoryType* VertexFactoryType, int32 PermutationId, bool bFatalIfMissing = true) const;
3054
3055#if WITH_EDITOR
3057
3059
3060 void GetExternalCodeReferencesHash(FSHAHash& OutHash) const;
3061#endif // WITH_EDITOR
3062
3066 friend class FMaterialHLSLErrorHandler;
3067 friend class UE::Cook::FODSCClientData;
3068};
3069
3070
3071
3076{
3077public:
3078
3081
3088
3089#if WITH_EDITOR
3092#endif
3093
3094#if WITH_EDITOR
3100#endif
3101 ENGINE_API uint32 GetNumVirtualTextureStacks() const;
3102
3103 ENGINE_API virtual FString GetMaterialUsageDescription() const override;
3104
3105 // FMaterial interface.
3106protected:
3107 ENGINE_API virtual void BuildShaderMapIdOverride(const FBuildShaderMapIdArgs& Args) const override;
3108public:
3109#if WITH_EDITORONLY_DATA
3110 ENGINE_API virtual void GetStaticParameterSet(FStaticParameterSet& OutSet) const override;
3111#endif
3112#if WITH_EDITOR
3113 ENGINE_API virtual void BeginAllowCachingStaticParameterValues() override;
3114 ENGINE_API virtual void EndAllowCachingStaticParameterValues() override;
3115#endif // WITH_EDITOR
3116 ENGINE_API virtual EMaterialDomain GetMaterialDomain() const override;
3117 ENGINE_API virtual bool IsTwoSided() const override;
3118 ENGINE_API virtual bool IsThinSurface() const override;
3119 ENGINE_API virtual bool IsDitheredLODTransition() const override;
3120 ENGINE_API virtual bool IsTranslucencyWritingCustomDepth() const override;
3121 ENGINE_API virtual bool IsTranslucencyWritingVelocity() const override;
3122 ENGINE_API virtual bool IsTranslucencyVelocityFromDepth() const override;
3123 ENGINE_API virtual bool IsTranslucencyWritingFrontLayerTransparency() const override;
3124 ENGINE_API virtual bool IsTangentSpaceNormal() const override;
3125 ENGINE_API virtual bool ShouldGenerateSphericalParticleNormals() const override;
3126 ENGINE_API virtual bool ShouldDisableDepthTest() const override;
3127 ENGINE_API virtual bool ShouldWriteOnlyAlpha() const override;
3128 ENGINE_API virtual bool ShouldEnableResponsiveAA() const override;
3129 ENGINE_API virtual bool ShouldDoSSR() const override;
3130 ENGINE_API virtual bool ShouldDoContactShadows() const override;
3131 ENGINE_API virtual bool HasPixelAnimation() const override;
3132 ENGINE_API virtual bool UsesTemporalResponsiveness() const override;
3133 ENGINE_API virtual bool UsesMotionVectorWorldOffset() const override;
3134 ENGINE_API virtual bool IsLightFunction() const override;
3135 ENGINE_API virtual bool IsUsedWithEditorCompositing() const override;
3136 ENGINE_API virtual bool IsDeferredDecal() const override;
3137 ENGINE_API virtual bool IsVolumetricPrimitive() const override;
3138 ENGINE_API virtual bool IsWireframe() const override;
3139 ENGINE_API virtual bool IsVariableRateShadingAllowed() const override;
3140 ENGINE_API virtual EMaterialShadingRate GetShadingRate() const override;
3141 ENGINE_API virtual bool IsUIMaterial() const override;
3142 ENGINE_API virtual bool IsPostProcessMaterial() const override;
3143 ENGINE_API virtual bool IsSpecialEngineMaterial() const override;
3144 ENGINE_API virtual bool IsUsedWithSkeletalMesh() const override;
3145 ENGINE_API virtual bool IsUsedWithLandscape() const override;
3146 ENGINE_API virtual bool IsUsedWithParticleSystem() const override;
3147 ENGINE_API virtual bool IsUsedWithParticleSprites() const override;
3148 ENGINE_API virtual bool IsUsedWithBeamTrails() const override;
3149 ENGINE_API virtual bool IsUsedWithMeshParticles() const override;
3150 ENGINE_API virtual bool IsUsedWithNiagaraSprites() const override;
3151 ENGINE_API virtual bool IsUsedWithNiagaraRibbons() const override;
3152 ENGINE_API virtual bool IsUsedWithNiagaraMeshParticles() const override;
3153 ENGINE_API virtual bool IsUsedWithStaticLighting() const override;
3154 ENGINE_API virtual bool IsUsedWithMorphTargets() const override;
3155 ENGINE_API virtual bool IsUsedWithSplineMeshes() const override;
3156 ENGINE_API virtual bool IsUsedWithInstancedStaticMeshes() const override;
3157 ENGINE_API virtual bool IsUsedWithGeometryCollections() const override;
3158 ENGINE_API virtual bool IsUsedWithAPEXCloth() const override;
3159 ENGINE_API virtual bool IsUsedWithGeometryCache() const override;
3160 ENGINE_API virtual bool IsUsedWithWater() const override;
3161 ENGINE_API virtual bool IsUsedWithHairStrands() const override;
3162 ENGINE_API virtual bool IsUsedWithLidarPointCloud() const override;
3163 ENGINE_API virtual bool IsUsedWithVirtualHeightfieldMesh() const override;
3164 ENGINE_API virtual bool IsUsedWithNeuralNetworks() const override;
3165 ENGINE_API virtual bool IsUsedWithNanite() const override;
3166 ENGINE_API virtual bool IsUsedWithVoxels() const override;
3167 ENGINE_API virtual bool IsUsedWithVolumetricCloud() const override;
3168 ENGINE_API virtual bool IsUsedWithHeterogeneousVolumes() const override;
3169 ENGINE_API virtual bool IsUsedWithStaticMesh() const override;
3170 ENGINE_API virtual bool SamplesMaterialCache() const override;
3171 ENGINE_API virtual bool HasMaterialCacheOutput() const override;
3172 ENGINE_API virtual bool IsFullyRough() const override;
3173 ENGINE_API virtual bool GetForceCompatibleWithLightFunctionAtlas() const override;
3174 ENGINE_API virtual bool UseNormalCurvatureToRoughness() const override;
3175 ENGINE_API virtual enum EMaterialFloatPrecisionMode GetMaterialFloatPrecisionMode() const override;
3176 ENGINE_API virtual bool IsUsingAlphaToCoverage() const override;
3177 ENGINE_API virtual bool IsUsingPreintegratedGFForSimpleIBL() const override;
3178 ENGINE_API virtual bool IsUsingHQForwardReflections() const override;
3179 ENGINE_API virtual bool GetForwardBlendsSkyLightCubemaps() const override;
3180 ENGINE_API virtual bool IsUsingPlanarForwardReflections() const override;
3181 ENGINE_API virtual bool IsNonmetal() const override;
3182 ENGINE_API virtual bool UseLmDirectionality() const override;
3183 ENGINE_API virtual enum EBlendMode GetBlendMode() const override;
3184 ENGINE_API virtual enum ERefractionMode GetRefractionMode() const override;
3185 UE_DEPRECATED(5.7, "This is not longer valid since even when not plugged in, the default value on the root node can be used")
3186 ENGINE_API virtual bool GetRootNodeOverridesDefaultRefraction() const override;
3187 ENGINE_API virtual uint32 GetMaterialDecalResponse() const override;
3188 ENGINE_API virtual bool HasBaseColorConnected() const override;
3189 ENGINE_API virtual bool HasNormalConnected() const override;
3190 ENGINE_API virtual bool HasRoughnessConnected() const override;
3191 ENGINE_API virtual bool HasSpecularConnected() const override;
3192 ENGINE_API virtual bool HasMetallicConnected() const override;
3193 ENGINE_API virtual bool HasEmissiveColorConnected() const override;
3194 ENGINE_API virtual bool HasAnisotropyConnected() const override;
3195 ENGINE_API virtual bool HasAmbientOcclusionConnected() const override;
3196 ENGINE_API virtual bool HasDisplacementConnected() const override;
3197 ENGINE_API virtual bool IsSubstrateMaterial() const override;
3198 ENGINE_API virtual bool HasMaterialPropertyConnected(EMaterialProperty In) const override;
3199 ENGINE_API virtual FMaterialShadingModelField GetShadingModels() const override;
3200 ENGINE_API virtual bool IsShadingModelFromMaterialExpression() const override;
3201 ENGINE_API virtual enum ETranslucencyLightingMode GetTranslucencyLightingMode() const override;
3202 ENGINE_API virtual float GetOpacityMaskClipValue() const override;
3203 ENGINE_API virtual bool GetCastDynamicShadowAsMasked() const override;
3204 ENGINE_API virtual bool IsDistorted() const override;
3205 ENGINE_API virtual ERefractionCoverageMode GetRefractionCoverageMode() const override;
3206 ENGINE_API virtual EPixelDepthOffsetMode GetPixelDepthOffsetMode() const override;
3207 ENGINE_API virtual float GetTranslucencyDirectionalLightingIntensity() const override;
3208 ENGINE_API virtual float GetTranslucentShadowDensityScale() const override;
3209 ENGINE_API virtual float GetTranslucentSelfShadowDensityScale() const override;
3210 ENGINE_API virtual float GetTranslucentSelfShadowSecondDensityScale() const override;
3211 ENGINE_API virtual float GetTranslucentSelfShadowSecondOpacity() const override;
3212 ENGINE_API virtual float GetTranslucentBackscatteringExponent() const override;
3213 ENGINE_API virtual bool IsTranslucencyAfterDOFEnabled() const override;
3214 ENGINE_API virtual bool IsTranslucencyAfterMotionBlurEnabled() const override;
3215 ENGINE_API virtual bool IsDualBlendingEnabled() const override;
3216 ENGINE_API virtual bool IsMobileSeparateTranslucencyEnabled() const override;
3217 ENGINE_API virtual FDisplacementScaling GetDisplacementScaling() const override;
3218 ENGINE_API virtual bool IsDisplacementFadeEnabled() const override;
3219 ENGINE_API virtual FDisplacementFadeRange GetDisplacementFadeRange() const override;
3220 ENGINE_API virtual FLinearColor GetTranslucentMultipleScatteringExtinction() const override;
3221 ENGINE_API virtual float GetTranslucentShadowStartOffset() const override;
3222 ENGINE_API virtual bool IsMasked() const override;
3223 ENGINE_API virtual bool IsDitherMasked() const override;
3224 ENGINE_API virtual bool AllowNegativeEmissiveColor() const override;
3225 ENGINE_API virtual FString GetFriendlyName() const override;
3226 ENGINE_API virtual FString GetAssetName() const override;
3227 ENGINE_API virtual bool RequiresSynchronousCompilation() const override;
3228 ENGINE_API virtual bool IsDefaultMaterial() const override;
3229 ENGINE_API virtual int32 GetNumCustomizedUVs() const override;
3230 ENGINE_API virtual int32 GetNumMaterialCacheTags() const override;
3231 ENGINE_API virtual int32 GetBlendableLocation() const override;
3232 ENGINE_API virtual int32 GetBlendablePriority() const override;
3233 ENGINE_API virtual bool GetBlendableOutputAlpha() const override;
3234 ENGINE_API virtual bool GetDisablePreExposureScale() const override;
3235 ENGINE_API virtual bool IsStencilTestEnabled() const override;
3236 ENGINE_API virtual uint32 GetStencilRefValue() const override;
3237 ENGINE_API virtual uint32 GetStencilCompare() const override;
3238 ENGINE_API virtual float GetRefractionDepthBiasValue() const override;
3239 ENGINE_API virtual bool ShouldApplyFogging() const override;
3240 ENGINE_API virtual bool ShouldApplyCloudFogging() const override;
3241 ENGINE_API virtual bool ShouldAlwaysEvaluateWorldPositionOffset() const override;
3242 ENGINE_API virtual bool IsSky() const override;
3243 ENGINE_API virtual bool ComputeFogPerPixel() const override;
3244 ENGINE_API virtual bool HasPerInstanceCustomData() const override;
3245 ENGINE_API virtual bool HasPerInstanceRandom() const override;
3246 ENGINE_API virtual bool HasVertexInterpolator() const override;
3247 ENGINE_API virtual bool HasRuntimeVirtualTextureOutput() const override;
3248 ENGINE_API virtual bool HasFirstPersonOutput() const override;
3249 ENGINE_API virtual bool CastsRayTracedShadows() const override;
3250 ENGINE_API virtual bool IsTessellationEnabled() const override;
3251 ENGINE_API virtual bool HasRenderTracePhysicalMaterialOutputs() const override;
3252 ENGINE_API virtual uint16 GetPreshaderGap() const override;
3253 ENGINE_API virtual UMaterialInterface* GetMaterialInterface() const override;
3254 ENGINE_API virtual int32 GetNeuralProfileId() const override;
3255 ENGINE_API virtual bool HasSubstrateRoughnessTracking() const override;
3256 ENGINE_API virtual bool AllowTranslucentLocalLightShadow() const override;
3257 ENGINE_API virtual float GetTranslucentLocalLightShadowQuality() const override;
3258 ENGINE_API virtual float GetTranslucentDirectionalLightShadowQuality() const override;
3259
3263 ENGINE_API virtual bool IsPersistent() const override;
3264 ENGINE_API virtual FGuid GetMaterialId() const override;
3265
3266#if WITH_EDITOR
3267 ENGINE_API void GetShaderTags(TArray<FName>& OutShaderTags) const override;
3268 ENGINE_API EMaterialTranslateValidationFlags GetMaterialTranslateValidationFlags() const override;
3269 ENGINE_API virtual void NotifyCompilationFinished() override;
3271 ENGINE_API virtual FName GetAssetPath() const override;
3272 ENGINE_API virtual bool IsUsingNewHLSLGenerator() const override;
3273 ENGINE_API virtual bool CheckInValidStateForCompilation(FMaterialCompiler* Compiler) const override;
3274#endif // WITH_EDITOR
3275
3276 ENGINE_API virtual FString GetFullPath() const override;
3277
3278 ENGINE_API void GetResourceSizeEx(FResourceSizeEx& CumulativeResourceSize);
3279
3280 ENGINE_API virtual void LegacySerialize(FArchive& Ar) override;
3281
3282 ENGINE_API virtual TArrayView<const TObjectPtr<UObject>> GetReferencedTextures() const override;
3283 ENGINE_API virtual TConstArrayView<TObjectPtr<UTextureCollection>> GetReferencedTextureCollections() const override;
3284
3285 ENGINE_API virtual void AddReferencedObjects(FReferenceCollector& Collector) override;
3286
3287 ENGINE_API virtual bool GetAllowDevelopmentShaderCompile() const override;
3288
3289 inline const UMaterial* GetMaterial() const { return Material; }
3293
3294 ENGINE_API virtual void FeedbackMaterialLayersInstancedGraphFromCompilation(const FMaterialLayersFunctions* InLayers) override;
3295 ENGINE_API virtual const FMaterialLayersFunctions* GetMaterialLayers() const override;
3296protected:
3299
3301
3303 ENGINE_API virtual int32 CompilePropertyAndSetMaterialProperty(EMaterialProperty Property, class FMaterialCompiler* Compiler, EShaderFrequency OverrideShaderFrequency, bool bUsePreviousFrameTime) const override;
3305 ENGINE_API virtual int32 CompileCustomAttribute(const FGuid& AttributeID, FMaterialCompiler* Compiler) const override;
3306
3307#if WITH_EDITORONLY_DATA
3308 /* Gives the material a chance to compile any custom output nodes it has added */
3311#endif // WITH_EDITORONLY_DATA
3312
3313 ENGINE_API virtual bool HasVertexPositionOffsetConnected() const override;
3314 ENGINE_API virtual bool HasPixelDepthOffsetConnected() const override;
3315
3317 ENGINE_API virtual FString GetBaseMaterialPathName() const override;
3318 ENGINE_API virtual FString GetDebugName() const override;
3319};
3320
3326{
3328 TSet<UMaterial*> UpdatedMaterials;
3330 TSet<UMaterialInterface*> UpdatedMaterialInterfaces;
3332 TUniquePtr<class FGlobalComponentReregisterContext> ComponentReregisterContext;
3334 TUniquePtr<class FGlobalComponentRecreateRenderStateContext> ComponentRecreateRenderStateContext;
3336 EShaderPlatform ShaderPlatform;
3338 bool bSyncWithRenderingThread;
3339
3340public:
3341
3344 {
3345 enum Type
3346 {
3348 ReregisterComponents = 0x1,
3354 SyncWithRenderingThread = 0x2,
3355 /* Recreates only the render state for all components (mutually exclusive with ReregisterComponents) */
3356 RecreateRenderStates = 0x4,
3358 Default = RecreateRenderStates | SyncWithRenderingThread,
3359 };
3360 };
3361
3364
3367
3369 ENGINE_API void AddMaterial(UMaterial* Material);
3370
3372 ENGINE_API void AddMaterialInstance(UMaterialInstance* Instance);
3373
3375 ENGINE_API void AddMaterialInterface(UMaterialInterface* Instance);
3376
3377 inline const TSet<UMaterialInterface*>& GetUpdatedMaterials() const { return UpdatedMaterialInterfaces; }
3378};
3379
3386
3387#if WITH_EDITORONLY_DATA
3390#endif // WITH_EDITORONLY_DATA
3391
3393{
3394 // Relative offset to package (uasset/umap + uexp) beginning
3396 // ERHIFeatureLevel::Type
3398 // EMaterialQualityLevel::Type
3400};
3401
3403{
3404 Ar << Loc.Offset;
3405 Ar << Loc.FeatureLevel;
3406 Ar << Loc.QualityLevel;
3407 return Ar;
3408}
3409
3411{
3412public:
3414
3416
3421
3422 virtual FArchive& operator<<(class FName& Name) override;
3423
3424 virtual const FCustomVersionContainer& GetCustomVersions() const override { return ParentAr->GetCustomVersions(); }
3425
3426 virtual FString GetArchiveName() const override { return TEXT("FMaterialResourceMemoryWriter"); }
3427
3429 {
3430 Locs.AddUninitialized();
3431 int64 ResourceOffset = this->Tell();
3432 Locs.Last().Offset = IntCastChecked<uint32>(ResourceOffset);
3433 }
3434
3436 {
3437 static_assert(ERHIFeatureLevel::Num <= 256, "ERHIFeatureLevel doesn't fit into a byte");
3438 static_assert(EMaterialQualityLevel::Num <= 256, "EMaterialQualityLevel doesn't fit into a byte");
3439 check(Resource.GetMaterialInterface());
3440 Locs.Last().FeatureLevel = uint8(Resource.GetFeatureLevel());
3441 Locs.Last().QualityLevel = uint8(Resource.GetQualityLevel());
3442 }
3443
3444private:
3447 TMap<FNameEntryId, int32> Name2Indices;
3448 FArchive* ParentAr;
3449
3450 void SerializeToParentArchive();
3451};
3452
3454{
3455public:
3459 Ar(InAr),
3460 Resource(InResource)
3461 {
3462 check(Ar);
3463 Ar->BeginSerializingMaterialResource();
3464 }
3465
3467 {
3468 Ar->EndSerializingMaterialResource(Resource);
3469 }
3470
3471private:
3473 const FMaterialResource& Resource;
3474};
3475
3476class FMaterialResourceProxyReader final : private TUniquePtr<FArchive>, public FArchiveProxy
3477{
3478public:
3480 FArchive& Ar,
3483
3485 const TCHAR* Filename,
3489
3491
3496
3497 virtual int64 Tell() override
3498 {
3499 return InnerArchive.Tell() - OffsetToFirstResource;
3500 }
3501
3502 virtual void Seek(int64 InPos) override
3503 {
3504 InnerArchive.Seek(OffsetToFirstResource + InPos);
3505 }
3506
3507 virtual FArchive& operator<<(class FName& Name) override;
3508
3509 virtual FString GetArchiveName() const override { return TEXT("FMaterialResourceProxyReader"); }
3510
3511private:
3513 int64 OffsetToFirstResource;
3514 int64 OffsetToEnd;
3515
3516 void Initialize(
3517 ERHIFeatureLevel::Type FeatureLevel,
3518 EMaterialQualityLevel::Type QualityLevel,
3519 bool bSeekToEnd = false);
3520};
3521
3523
3524//
3525
3526#if WITH_EDITOR
3529{
3532};
3533#endif
3534
3536{
3537 return !Material.IsSky()
3538 && !Material.GetShadingModels().HasShadingModel(MSM_SingleLayerWater);
3539}
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define NULL
Definition oodle2base.h:134
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
bool LoadFromCompactBinary(FCbFieldView Field, FAssetDependency &Dependency)
Definition AssetRegistry.cpp:10420
#define WITH_EDITOR
Definition Build.h:67
bool bSuccess
Definition ConvexDecomposition3.cpp:819
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
FORCEINLINE void CopyAssignItems(ElementType *Dest, const ElementType *Source, SizeType Count)
Definition MemoryOps.h:137
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
D3D12_DESCRIPTOR_HEAP_TYPE Translate(ERHIDescriptorHeapType InHeapType)
Definition D3D12Descriptors.h:19
ERefractionMode
Definition EngineTypes.h:359
EMaterialFloatPrecisionMode
Definition EngineTypes.h:266
EMaterialShadingRate
Definition EngineTypes.h:981
EBlendMode
Definition EngineTypes.h:245
ERefractionCoverageMode
Definition EngineTypes.h:398
ETranslucencyLightingMode
Definition EngineTypes.h:314
EPixelDepthOffsetMode
Definition EngineTypes.h:416
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
FArchive & operator<<(FArchive &Ar, FEnvQueryDebugProfileData::FStep &Data)
Definition EnvQueryTypes.cpp:489
return true
Definition ExternalRpcRegistry.cpp:601
#define X(Name, Desc)
Definition FormatStringSan.h:47
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
EMaterialDomain
Definition MaterialDomain.h:13
EMaterialKeyInclude
Definition MaterialKeyIncludeEnum.h:14
EMaterialParameterType
Definition MaterialParameters.h:187
ESceneTextureId
Definition MaterialSceneTextureId.h:13
@ PPI_UserSceneTexture0
Definition MaterialSceneTextureId.h:80
EMaterialShaderPrecompileMode
Definition MaterialShaderPrecompileMode.h:7
void DumpMaterialStats(EShaderPlatform Platform)
Definition MaterialShader.cpp:4159
UE::Shader::FType GetShaderValueType(EMaterialParameterType Type)
Definition MaterialShared.cpp:5654
bool ShouldIncludeMaterialInDefaultOpaquePass(const FMaterial &Material)
Definition MaterialShared.h:3535
ENGINE_API bool DoesMaterialUseTexture(const UMaterialInterface *Material, const UTexture *CheckTexture)
Definition MaterialInterface.cpp:1455
ECompiledMaterialProperty
Definition MaterialShared.h:1920
@ CompiledMP_EmissiveColorCS
Definition MaterialShared.h:1921
@ CompiledMP_PrevWorldPositionOffset
Definition MaterialShared.h:1922
@ CompiledMP_MAX
Definition MaterialShared.h:1923
EMaterialValueType MakeNonLWCType(EMaterialValueType Type)
Definition MaterialShared.h:267
bool IsMaterialValueType(EMaterialValueType InType, EMaterialValueType InCompare)
Definition MaterialShared.h:235
EMaterialCommonBasis
Definition MaterialShared.h:312
@ MCB_Instance
Definition MaterialShared.h:320
@ MCB_Tangent
Definition MaterialShared.h:313
@ MCB_View
Definition MaterialShared.h:317
@ MCB_FirstPerson
Definition MaterialShared.h:322
@ MCB_Camera
Definition MaterialShared.h:318
@ MCB_TranslatedWorld
Definition MaterialShared.h:315
@ MCB_Local
Definition MaterialShared.h:314
@ MCB_MeshParticle
Definition MaterialShared.h:319
@ MCB_World
Definition MaterialShared.h:316
@ MCB_PeriodicWorld
Definition MaterialShared.h:321
@ MCB_MAX
Definition MaterialShared.h:323
ENGINE_API bool IsUsingNewMaterialTranslatorPrototype()
Definition MaterialShared.cpp:112
ENGINE_API bool IsMaskedBlendMode(EBlendMode BlendMode)
ENGINE_API bool CanConnectMaterialValueTypes(const uint32 InputType, const uint32 OutputType)
Definition MaterialExpressions.cpp:531
uint32 GetUseSubsurfaceProfileShadingModelMask()
Definition MaterialShared.h:137
ENGINE_API void GetMaterialValueTypeDescriptions(const uint32 MaterialValueType, TArray< FText > &OutDescriptions)
Definition MaterialExpressions.cpp:450
uint32 GetNumComponents(EMaterialValueType Type)
Definition MaterialShared.h:211
ELWCFunctionKind
Definition MaterialShared.h:294
bool IsSubsurfaceShadingModel(FMaterialShadingModelField ShadingModel)
Definition MaterialShared.h:125
EDeferredParamStrictness
Definition MaterialShared.h:328
bool IsUIntNumericType(EMaterialValueType InType)
Definition MaterialShared.h:250
ENGINE_API bool IsAdditiveBlendMode(EBlendMode BlendMode)
bool IsLWCType(EMaterialValueType InType)
Definition MaterialShared.h:240
bool IsPrimitiveType(EMaterialValueType InType)
Definition MaterialShared.h:261
bool IsNumericType(EMaterialValueType InType)
Definition MaterialShared.h:255
FName GetMaterialQualityLevelFName(EMaterialQualityLevel::Type InMaterialQualityLevel)
Definition MaterialShared.cpp:253
FArchive & operator<<(FArchive &Ar, FMaterialResourceLocOnDisk &Loc)
Definition MaterialShared.h:3402
bool IsFloatNumericType(EMaterialValueType InType)
Definition MaterialShared.h:245
ENGINE_API bool IsOpaqueBlendMode(EBlendMode BlendMode)
ENGINE_API bool IsModulateBlendMode(EBlendMode BlendMode)
ECompiledPartialDerivativeVariation
Definition MaterialShared.h:1932
@ CompiledPDV_MAX
Definition MaterialShared.h:1935
@ CompiledPDV_Analytic
Definition MaterialShared.h:1934
@ CompiledPDV_FiniteDifferences
Definition MaterialShared.h:1933
EMaterialValueType MakeLWCType(EMaterialValueType Type)
Definition MaterialShared.h:279
ENGINE_API void ConvertToMultilineToolTip(const FString &InToolTip, const int32 TargetLineLength, TArray< FString > &OutToolTip)
Definition MaterialExpressions.cpp:413
ENGINE_API bool IsTranslucentBlendMode(EBlendMode BlendMode)
bool UseSubsurfaceProfile(FMaterialShadingModelField ShadingModel)
Definition MaterialShared.h:132
ENGINE_API bool IsOpaqueOrMaskedBlendMode(EBlendMode BlendMode)
ENGINE_API bool AllowDitheredLODTransition(ERHIFeatureLevel::Type FeatureLevel)
Definition MaterialShared.cpp:220
void GetMaterialQualityLevelName(EMaterialQualityLevel::Type InMaterialQualityLevel, FString &OutName)
Definition MaterialShared.cpp:247
ENGINE_API bool IsAlphaHoldoutBlendMode(EBlendMode BlendMode)
ENGINE_API bool IsAllowedExpressionType(const UClass *Class, const bool bMaterialFunction)
Definition MaterialExpressions.cpp:405
constexpr uint32 NumMaterialTextureParameterTypes
Definition MaterialShared.h:541
ENGINE_API bool IsTranslucentOnlyBlendMode(EBlendMode BlendMode)
EMaterialTranslateValidationFlags
Definition MaterialShared.h:1906
ENGINE_API uint8 GetRayTracingMaskFromMaterial(const EBlendMode BlendMode)
EMaterialTextureParameterType
Definition MaterialShared.h:530
ENGINE_API bool IsAlphaCompositeBlendMode(EBlendMode BlendMode)
EMaterialValueType
Definition MaterialValueType.h:15
@ MCT_Float2
Definition MaterialValueType.h:22
@ MCT_UInt
Definition MaterialValueType.h:90
@ MCT_Float4
Definition MaterialValueType.h:24
@ MCT_StaticBool
Definition MaterialValueType.h:35
@ MCT_UInt3
Definition MaterialValueType.h:64
@ MCT_Float1
Definition MaterialValueType.h:21
@ MCT_ShadingModel
Definition MaterialValueType.h:45
@ MCT_LWCType
Definition MaterialValueType.h:91
@ MCT_UInt1
Definition MaterialValueType.h:62
@ MCT_UInt4
Definition MaterialValueType.h:65
@ MCT_LWCVector3
Definition MaterialValueType.h:50
@ MCT_UInt2
Definition MaterialValueType.h:63
@ MCT_Bool
Definition MaterialValueType.h:59
@ MCT_Float
Definition MaterialValueType.h:89
@ MCT_LWCVector2
Definition MaterialValueType.h:49
@ MCT_LWCVector4
Definition MaterialValueType.h:51
@ MCT_Float3
Definition MaterialValueType.h:23
@ MCT_LWCScalar
Definition MaterialValueType.h:48
FInt32Point FIntPoint
Definition MathFwd.h:124
#define LAYOUT_FIELD(T, Name,...)
Definition MemoryLayout.h:471
#define LAYOUT_BITFIELD(T, Name, BitFieldSize,...)
Definition MemoryLayout.h:477
#define LAYOUT_ARRAY_EDITORONLY(T, Name, NumArray,...)
Definition MemoryLayout.h:489
#define LAYOUT_FIELD_INITIALIZED(T, Name, Value,...)
Definition MemoryLayout.h:473
#define LAYOUT_FIELD_EDITORONLY(T, Name,...)
Definition MemoryLayout.h:488
#define DECLARE_TYPE_LAYOUT(T, Interface)
Definition MemoryLayout.h:557
@ Num
Definition MetalRHIPrivate.h:234
FORCEINLINE FName ScriptNameToName(FScriptName InName)
Definition NameTypes.h:1597
const bool
Definition NetworkReplayStreaming.h:178
#define UENUM(...)
Definition ObjectMacros.h:749
const U & ObjectPtrDecay(const T &Value)
Definition ObjectPtr.h:1744
uint32 FMaterialPSOPrecacheRequestID
Definition ParticleSystem.h:114
EPSOPrecachePriority
Definition PipelineStateCache.h:33
EShaderFrequency
Definition RHIDefinitions.h:202
@ SF_NumFrequencies
Definition RHIDefinitions.h:216
uint32 GetMaxTextureSamplers()
Definition RHIGlobals.h:950
EShaderPlatform GetFeatureLevelShaderPlatform_Checked(const FStaticFeatureLevel InFeatureLevel)
Definition RHIGlobals.h:966
EShaderPlatform
Definition RHIShaderPlatform.h:11
@ SP_NumPlatforms
Definition RHIShaderPlatform.h:55
ERHIFeatureLevel::Type GMaxRHIFeatureLevel
Definition RHI.cpp:1338
EShaderPlatform GMaxRHIShaderPlatform
Definition RHI.cpp:1335
EMaterialProperty
Definition SceneTypes.h:148
EShaderCompileJobPriority
Definition ShaderCore.h:803
EShaderPermutationFlags
Definition ShaderPermutation.h:19
EShaderPermutationFlags GetShaderPermutationFlags(const FPlatformTypeLayoutParameters &LayoutParams)
Definition Shader.cpp:2934
ESubstrateTileType
Definition SubstrateMaterialShared.h:67
FORCEINLINE ESubstrateTileType GetSubstrateTileTypeFromMaterialType(uint32 InMaterialType)
Definition SubstrateMaterialShared.h:83
ESubstrateBsdfFeature
Definition SubstrateMaterialShared.h:30
CORE_API bool IsInParallelRenderingThread()
Definition ThreadingBase.cpp:301
CORE_API bool IsInParallelGameThread()
Definition ThreadingBase.cpp:207
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
bool(* IsInAsyncLoadingThread)()
Definition ThreadingBase.cpp:357
uint32 PointerHash(const void *Key)
Definition TypeHash.h:91
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
#define VIRTUALTEXTURE_SPACE_MAXLAYERS
Definition VirtualTexturing.h:57
uint32 Offset
Definition VulkanMemory.cpp:4033
if(Failed) console_printf("Failed.\n")
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 ArchiveProxy.h:19
Definition Archive.h:1208
Definition CompactBinary.h:610
Definition CompactBinaryWriter.h:68
Definition CustomVersion.h:111
Definition MaterialShader.h:26
Definition RenderDeferredCleanup.h:11
static const ERHIFeatureLevel::Type GetMaxFeatureLevel(const FStaticShaderPlatform Platform)
Definition DataDrivenShaderPlatformInfo.h:224
Definition MemoryImage.h:858
Definition MaterialShared.h:448
friend bool operator==(const FMaterialCacheTagStack &Lhs, const FMaterialCacheTagStack &Rhs)
Definition MaterialShared.h:452
friend bool operator!=(const FMaterialCacheTagStack &Lhs, const FMaterialCacheTagStack &Rhs)
Definition MaterialShared.h:457
LAYOUT_FIELD(FGuid, TagGuid)
Definition MaterialShared.h:806
LAYOUT_FIELD(uint8, UsedPathTracingBufferTextures)
LAYOUT_FIELD(uint32, UsedSceneTextures)
void SetIsSceneTextureUsed(ESceneTextureId TexId)
Definition MaterialShared.h:851
void SetIsDBufferTextureLookupUsed(bool bValue)
Definition MaterialShared.h:873
LAYOUT_FIELD_EDITORONLY(uint16, EstimatedNumTextureSamplesPS)
static uint32 GetGBufferMask()
Definition MaterialShared.h:881
bool RequiresSceneColorCopy() const
Definition MaterialShared.h:878
LAYOUT_FIELD_EDITORONLY(uint16, EstimatedNumTextureSamplesVS)
FMaterialCompilationOutput()
Definition MaterialShared.h:809
void SetIsDBufferTextureUsed(int32 TextureIndex)
Definition MaterialShared.h:872
void SetIsPathTracingBufferTextureUsed(int32 TexId)
Definition MaterialShared.h:875
LAYOUT_FIELD(FUniformExpressionSet, UniformExpressionSet)
bool UsesSceneDepthLookup() const
Definition MaterialShared.h:912
bool UsesVelocitySceneTexture() const
Definition MaterialShared.h:915
bool NeedsGBuffer() const
Definition MaterialShared.h:906
bool IsSceneTextureUsed(ESceneTextureId TexId) const
Definition MaterialShared.h:849
LAYOUT_FIELD(TMemoryImageArray< FScriptName >, UserSceneTextureInputs)
Definition MaterialCompiler.h:109
Definition MaterialShared.h:1943
int32 OutputIndex
Definition MaterialShared.h:1946
FMaterialExpressionKey(UMaterialExpression *InExpression, int32 InOutputIndex, const FGuid &InMaterialAttributeID, bool bInCompilingPreviousFrameKey)
Definition MaterialShared.h:1959
friend bool operator==(const FMaterialExpressionKey &X, const FMaterialExpressionKey &Y)
Definition MaterialShared.h:1967
FMaterialExpressionKey(UMaterialExpression *InExpression, int32 InOutputIndex)
Definition MaterialShared.h:1952
bool bCompilingPreviousFrameKey
Definition MaterialShared.h:1950
FGuid MaterialAttributeID
Definition MaterialShared.h:1948
UMaterialExpression * Expression
Definition MaterialShared.h:1945
friend uint32 GetTypeHash(const FMaterialExpressionKey &ExpressionKey)
Definition MaterialShared.h:1972
Definition MaterialShared.h:589
LAYOUT_FIELD(FGuid, ExternalTextureGuid)
friend bool operator!=(const FMaterialExternalTextureParameterInfo &Lhs, const FMaterialExternalTextureParameterInfo &Rhs)
Definition MaterialShared.h:596
LAYOUT_FIELD(int32, SourceTextureIndex)
bool GetExternalTexture(const FMaterialRenderContext &Context, FTextureRHIRef &OutTextureRHI, FSamplerStateRHIRef &OutSamplerStateRHI) const
Definition MaterialUniformExpressions.cpp:2107
LAYOUT_FIELD(FScriptName, ParameterName)
friend bool operator==(const FMaterialExternalTextureParameterInfo &Lhs, const FMaterialExternalTextureParameterInfo &Rhs)
Definition MaterialShared.h:592
Definition MaterialShared.h:1980
FMaterialFunctionCompileState * FindOrAddSharedFunctionState(FMaterialExpressionKey &ExpressionKey, class UMaterialExpressionMaterialFunctionCall *SharedFunctionCall)
Definition MaterialShared.h:1991
void ClearSharedFunctionStates()
Definition MaterialShared.h:2000
class UMaterialExpressionMaterialFunctionCall * FunctionCall
Definition MaterialShared.h:2018
TArray< FMaterialExpressionKey > ExpressionStack
Definition MaterialShared.h:2021
TMap< FMaterialExpressionKey, int32 > ExpressionCodeMap
Definition MaterialShared.h:2024
void Reset()
Definition MaterialShared.h:2011
~FMaterialFunctionCompileState()
Definition MaterialShared.h:1986
TMap< UMaterialExpression *, int32 > ExecExpressionCodeMap
Definition MaterialShared.h:2026
FMaterialFunctionCompileState(UMaterialExpressionMaterialFunctionCall *InFunctionCall)
Definition MaterialShared.h:1982
Definition MaterialShared.h:510
LAYOUT_FIELD(FHashedMaterialParameterInfo, ParameterInfo)
LAYOUT_FIELD(EMaterialParameterType, ParameterType)
friend bool operator!=(const FMaterialNumericParameterInfo &Lhs, const FMaterialNumericParameterInfo &Rhs)
Definition MaterialShared.h:518
LAYOUT_FIELD(uint32, DefaultValueOffset)
friend bool operator==(const FMaterialNumericParameterInfo &Lhs, const FMaterialNumericParameterInfo &Rhs)
Definition MaterialShared.h:514
Definition MaterialRenderProxy.h:102
Definition MaterialShared.h:3411
virtual FString GetArchiveName() const override
Definition MaterialShared.h:3426
FMaterialResourceMemoryWriter(FMaterialResourceMemoryWriter &&)=delete
FMaterialResourceMemoryWriter(const FMaterialResourceMemoryWriter &)=delete
virtual const FCustomVersionContainer & GetCustomVersions() const override
Definition MaterialShared.h:3424
FMaterialResourceMemoryWriter & operator=(FMaterialResourceMemoryWriter &&)=delete
FMaterialResourceMemoryWriter & operator=(const FMaterialResourceMemoryWriter &)=delete
void BeginSerializingMaterialResource()
Definition MaterialShared.h:3428
void EndSerializingMaterialResource(const FMaterialResource &Resource)
Definition MaterialShared.h:3435
Definition MaterialShared.h:3477
virtual void Seek(int64 InPos) override
Definition MaterialShared.h:3502
FMaterialResourceProxyReader & operator=(FMaterialResourceProxyReader &&)=delete
FMaterialResourceProxyReader & operator=(const FMaterialResourceProxyReader &)=delete
virtual FString GetArchiveName() const override
Definition MaterialShared.h:3509
FMaterialResourceProxyReader(FMaterialResourceProxyReader &&)=delete
virtual int64 Tell() override
Definition MaterialShared.h:3497
FMaterialResourceProxyReader(const FMaterialResourceProxyReader &)=delete
Definition MaterialShared.h:3454
FMaterialResourceWriteScope(FMaterialResourceMemoryWriter *InAr, const FMaterialResource &InResource)
Definition MaterialShared.h:3456
~FMaterialResourceWriteScope()
Definition MaterialShared.h:3466
Definition MaterialShared.h:3076
virtual ENGINE_API UMaterialInterface * GetMaterialInterface() const override
Definition MaterialShared.cpp:2303
const UMaterialInstance * GetMaterialInstance() const
Definition MaterialShared.h:3290
TObjectPtr< UMaterialInstance > MaterialInstance
Definition MaterialShared.h:3298
TObjectPtr< UMaterial > Material
Definition MaterialShared.h:3297
void SetMaterial(UMaterial *InMaterial, UMaterialInstance *InInstance, EShaderPlatform InShaderPlatform, EMaterialQualityLevel::Type InQualityLevel=EMaterialQualityLevel::Num)
Definition MaterialShared.h:3082
const UMaterial * GetMaterial() const
Definition MaterialShared.h:3289
void SetMaterialInstance(UMaterialInstance *InMaterialInstance)
Definition MaterialShared.h:3292
FMaterialLayersFunctions MaterialLayersFunctions
Definition MaterialShared.h:3300
void SetMaterial(UMaterial *InMaterial)
Definition MaterialShared.h:3291
Definition MaterialShared.h:1452
uint32 GetNumShaderPipelines() const
Definition MaterialShared.h:1471
FMaterialShaderMapContent(EShaderPlatform InPlatform=EShaderPlatform::SP_NumPlatforms)
Definition MaterialShared.h:1458
uint32 GetNumShaders() const
Definition MaterialShared.h:1461
Definition MaterialShared.h:1194
bool operator==(const FMaterialShaderMapId &ReferenceSet) const
Definition MaterialShared.h:1368
FSHAHash CookedShaderMapIdHash
Definition MaterialShared.h:1196
bool IsCookedId() const
Definition MaterialShared.h:1309
FMaterialShaderMapId()
Definition MaterialShared.h:1289
~FMaterialShaderMapId()
Definition MaterialShared.h:1300
bool operator!=(const FMaterialShaderMapId &ReferenceSet) const
Definition MaterialShared.h:1373
ERHIFeatureLevel::Type FeatureLevel
Definition MaterialShared.h:1214
EMaterialQualityLevel::Type QualityLevel
Definition MaterialShared.h:1211
SIZE_T GetSizeBytes() const
Definition MaterialShared.h:1337
EShaderPermutationFlags GetPermutationFlags() const
Definition MaterialShared.h:1381
bool IsValid() const
Definition MaterialShared.h:1318
friend uint32 GetTypeHash(const FMaterialShaderMapId &Ref)
Definition MaterialShared.h:1327
FPlatformTypeLayoutParameters LayoutParams
Definition MaterialShared.h:1287
Definition MaterialShared.h:1518
ESubstrateBsdfFeature GetSubstrateMaterialBsdfFeatures() const
Definition MaterialShared.h:1739
int32 GetRefCount() const
Definition MaterialShared.h:1786
const FSHAHash & GetShaderContentHash() const
Definition MaterialShared.h:1687
uint32 GetNumVirtualTextureStacks() const
Definition MaterialShared.h:1757
const FMeshMaterialShaderMap * GetMeshShaderMap(const FHashedName &VertexFactoryTypeName) const
Definition MaterialShared.h:1683
bool UsesAnisotropy() const
Definition MaterialShared.h:1732
uint8 GetSubstrateClosureCount() const
Definition MaterialShared.h:1737
uint32 GetMaxNumInstructionsForShader(FShaderType *ShaderType) const
Definition MaterialShared.h:1582
bool IsValidForRendering(bool bFailOnInvalid=false) const
Definition MaterialShared.h:1767
const TCHAR * GetDebugDescription() const
Definition MaterialShared.h:1715
bool UsesPixelDepthOffset() const
Definition MaterialShared.h:1728
TShaderRef< ShaderType > GetShader(int32 PermutationId=0) const
Definition MaterialShared.h:1573
FScriptName GetResolutionRelativeToInput() const
Definition MaterialShared.h:1763
const FMaterialShaderMapId & GetShaderMapId() const
Definition MaterialShared.h:1686
const TCHAR * GetMaterialPath() const
Definition MaterialShared.h:1716
FIntPoint GetUserTextureDivisor() const
Definition MaterialShared.h:1762
bool UsesSceneTexture(uint32 TexId) const
Definition MaterialShared.h:1759
bool UsesGlobalDistanceField() const
Definition MaterialShared.h:1720
FScriptName GetUserSceneTextureOutput() const
Definition MaterialShared.h:1761
bool UsesEyeAdaptation() const
Definition MaterialShared.h:1726
ESubstrateTileType GetSubstrateTileType() const
Definition MaterialShared.h:1740
bool UsesDisplacement() const
Definition MaterialShared.h:1724
bool UsesPathTracingBufferTexture(uint32 TexId) const
Definition MaterialShared.h:1765
bool RequiresSceneColorCopy() const
Definition MaterialShared.h:1718
TShaderRef< FShader > GetShader(FShaderType *ShaderType, int32 PermutationId=0) const
Definition MaterialShared.h:1568
bool ModifiesMeshPosition() const
Definition MaterialShared.h:1727
uint8 GetSubstrateUintPerPixel() const
Definition MaterialShared.h:1738
FMeshMaterialShaderMap * AcquireMeshShaderMap(const FHashedName &VertexFactoryTypeName)
Definition MaterialShared.h:1685
bool UsesWorldPositionOffset() const
Definition MaterialShared.h:1721
const FUniformExpressionSet & GetUniformExpressionSet() const
Definition MaterialShared.h:1782
bool IsCompilationFinalized() const
Definition MaterialShared.h:1696
const FRHIUniformBufferLayout * GetUniformBufferLayout() const
Definition MaterialShared.h:1783
bool UsesSceneDepthLookup() const
Definition MaterialShared.h:1729
bool UsesVelocitySceneTexture() const
Definition MaterialShared.h:1730
FMeshMaterialShaderMap * AcquireMeshShaderMap(const FVertexFactoryType *VertexFactoryType)
Definition MaterialShared.h:1684
bool UsesMotionVectorWorldOffset() const
Definition MaterialShared.h:1723
const TCHAR * GetFriendlyName() const
Definition MaterialShared.h:1714
uint8 GetSubstrateMaterialType() const
Definition MaterialShared.h:1736
bool NeedsSceneTextures() const
Definition MaterialShared.h:1719
bool UsesTemporalResponsiveness() const
Definition MaterialShared.h:1722
int32 GetNumRefs() const
Definition MaterialShared.h:1785
bool UsesDistanceCullFade() const
Definition MaterialShared.h:1731
TShaderRef< ShaderType > GetShader(const typename ShaderType::FPermutationDomain &PermutationVector) const
Definition MaterialShared.h:1577
void CountNumShaders(int32 &NumShaders, int32 &NumPipelines) const
Definition MaterialShared.h:1788
uint8 GetRuntimeVirtualTextureOutputAttributeMask() const
Definition MaterialShared.h:1758
const FSubstrateMaterialCompilationOutput & GetSubstrateMaterialCompilationOutput() const
Definition MaterialShared.h:1735
bool CompiledSuccessfully() const
Definition MaterialShared.h:1697
const FMeshMaterialShaderMap * GetMeshShaderMap(const FVertexFactoryType *VertexFactoryType) const
Definition MaterialShared.h:1682
TConstArrayView< FScriptName > GetUserSceneTextureInputs() const
Definition MaterialShared.h:1760
bool IsLightFunctionAtlasCompatible() const
Definition MaterialShared.h:1733
bool NeedsGBuffer() const
Definition MaterialShared.h:1725
Definition MaterialShaderType.h:95
Definition MaterialShader.h:56
Definition MaterialShared.h:568
friend bool operator==(const FMaterialTextureCollectionParameterInfo &Lhs, const FMaterialTextureCollectionParameterInfo &Rhs)
Definition MaterialShared.h:571
ENGINE_API void GetGameThreadTextureCollectionValue(const UMaterialInterface *MaterialInterface, const FMaterial &Material, UTextureCollection *&OutValue) const
Definition MaterialUniformExpressions.cpp:2099
friend bool operator!=(const FMaterialTextureCollectionParameterInfo &Lhs, const FMaterialTextureCollectionParameterInfo &Rhs)
Definition MaterialShared.h:575
LAYOUT_FIELD(FHashedMaterialParameterInfo, ParameterInfo)
LAYOUT_FIELD(int32, TextureCollectionIndex)
void GetTextureCollection(const FMaterialRenderContext &Context, const UTextureCollection *&OutTextureCollection) const
Definition MaterialUniformExpressions.cpp:2094
LAYOUT_FIELD(bool, bIsVirtualCollection)
Definition MaterialShared.h:544
FName GetParameterName() const
Definition MaterialShared.h:556
friend bool operator!=(const FMaterialTextureParameterInfo &Lhs, const FMaterialTextureParameterInfo &Rhs)
Definition MaterialShared.h:551
LAYOUT_FIELD(TEnumAsByte< ESamplerSourceMode >, SamplerSource)
LAYOUT_FIELD_INITIALIZED(int32, TextureIndex, INDEX_NONE)
friend bool operator==(const FMaterialTextureParameterInfo &Lhs, const FMaterialTextureParameterInfo &Rhs)
Definition MaterialShared.h:547
ENGINE_API void GetGameThreadTextureValue(const UMaterialInterface *MaterialInterface, const FMaterial &Material, UTexture *&OutValue) const
Definition MaterialUniformExpressions.cpp:2078
LAYOUT_FIELD(FHashedMaterialParameterInfo, ParameterInfo)
LAYOUT_FIELD_INITIALIZED(uint8, VirtualTextureLayerIndex, 0u)
Definition MaterialUniformExpressions.h:85
Definition MaterialUniformExpressions.h:57
Definition MaterialShared.h:471
LAYOUT_FIELD(uint16, BufferOffset)
LAYOUT_FIELD(uint16, ParameterIndex)
Definition MaterialShared.h:479
LAYOUT_FIELD(uint32, BufferOffset)
LAYOUT_FIELD(uint32, ComponentIndex)
LAYOUT_FIELD(UE::Shader::EValueType, Type)
Definition MaterialShared.h:488
LAYOUT_FIELD(uint32, NumFields)
friend bool operator==(const FMaterialUniformPreshaderHeader &Lhs, const FMaterialUniformPreshaderHeader &Rhs)
Definition MaterialShared.h:491
LAYOUT_FIELD(uint32, OpcodeOffset)
friend bool operator!=(const FMaterialUniformPreshaderHeader &Lhs, const FMaterialUniformPreshaderHeader &Rhs)
Definition MaterialShared.h:498
LAYOUT_FIELD(uint32, FieldIndex)
LAYOUT_FIELD(uint32, OpcodeSize)
Definition MaterialShared.h:3326
const TSet< UMaterialInterface * > & GetUpdatedMaterials() const
Definition MaterialShared.h:3377
Definition MaterialShared.h:383
uint32 GetNumLayers() const
Definition MaterialShared.h:395
bool IsPreallocatedStack() const
Definition MaterialShared.h:402
friend bool operator!=(const FMaterialVirtualTextureStack &Lhs, const FMaterialVirtualTextureStack &Rhs)
Definition MaterialShared.h:434
friend bool operator==(const FMaterialVirtualTextureStack &Lhs, const FMaterialVirtualTextureStack &Rhs)
Definition MaterialShared.h:418
void GetTextureValue(const FMaterialRenderContext &Context, const FUniformExpressionSet &UniformExpressionSet, const USparseVolumeTexture *&OutValue) const
FMaterialVirtualTextureStack()
Definition MaterialShared.cpp:4194
void GetTextureValues(const FMaterialRenderContext &Context, const FUniformExpressionSet &UniformExpressionSet, UTexture const **OutValues) const
Definition MaterialShared.cpp:4241
uint32 SetLayer(int32 LayerIndex, int32 UniformExpressionIndex)
Definition MaterialShared.cpp:4220
uint32 AddLayer()
Definition MaterialShared.cpp:4214
void GetTextureValue(const FMaterialRenderContext &Context, const FUniformExpressionSet &UniformExpressionSet, const URuntimeVirtualTexture *&OutValue) const
Definition MaterialShared.cpp:4257
void Serialize(FArchive &Ar)
Definition MaterialShared.cpp:4273
LAYOUT_ARRAY(int32, LayerUniformExpressionIndices, VIRTUALTEXTURE_SPACE_MAXLAYERS)
LAYOUT_FIELD(uint32, NumLayers)
int32 FindLayer(int32 UniformExpressionIndex) const
Definition MaterialShared.cpp:4229
bool AreLayersFull() const
Definition MaterialShared.h:397
LAYOUT_FIELD(int32, PreallocatedStackTextureIndex)
friend FArchive & operator<<(FArchive &Ar, FMaterialVirtualTextureStack &Stack)
Definition MaterialShared.h:412
Definition MaterialShared.h:2058
virtual bool AllowTranslucentLocalLightShadow() const
Definition MaterialShared.h:2408
virtual bool IsMasked() const =0
virtual bool GetBlendableOutputAlpha() const
Definition MaterialShared.h:2447
virtual bool GetAllowDevelopmentShaderCompile() const
Definition MaterialShared.h:2723
virtual uint32 GetStencilCompare() const
Definition MaterialShared.h:2451
TShaderRef< ShaderType > GetShader(FVertexFactoryType *VertexFactoryType, int32 PermutationId=0, bool bFatalIfMissing=true) const
Definition MaterialShared.h:2699
virtual bool IsUsedWithSplineMeshes() const
Definition MaterialShared.h:2340
virtual void GetShaderTags(TArray< FName > &OutShaderTags) const
Definition MaterialShared.h:2464
virtual bool IsDeferredDecal() const =0
const FStaticFeatureLevel GetFeatureLevel() const
Definition MaterialShared.h:2568
virtual FString GetBaseMaterialPathName() const
Definition MaterialShared.h:2851
virtual bool ShouldEnableResponsiveAA() const
Definition MaterialShared.h:2315
bool GetUsesDynamicParameter() const
Definition MaterialShared.h:2577
virtual bool IsUsedWithHairStrands() const
Definition MaterialShared.h:2353
virtual bool IsUsedWithAPEXCloth() const
Definition MaterialShared.h:2343
void BuildShaderMapId(FMaterialShaderMapId &OutId, const ITargetPlatform *TargetPlatform, EMaterialKeyInclude IncludeFlags=EMaterialKeyInclude::All) const
Definition MaterialShared.h:2282
virtual bool HasVertexPositionOffsetConnected() const
Definition MaterialShared.h:2427
bool AllowPixelDepthOffset() const
Definition MaterialShared.h:2901
virtual bool HasNormalConnected() const
Definition MaterialShared.h:2431
virtual bool HasRuntimeVirtualTextureOutput() const
Definition MaterialShared.h:2455
virtual bool SamplesMaterialCache() const
Definition MaterialShared.h:2348
virtual bool IsUsedWithEditorCompositing() const
Definition MaterialShared.h:2322
TArrayView< const FMaterialTextureParameterInfo > GetUniformVolumeTextureExpressions() const
Definition MaterialShared.h:2556
virtual bool HasAnisotropyConnected() const
Definition MaterialShared.h:2436
TArrayView< const FMaterialTextureParameterInfo > GetUniformCubeTextureExpressions() const
Definition MaterialShared.h:2554
virtual EMaterialShaderMapUsage::Type GetShaderMapUsage() const
Definition MaterialShared.h:2877
virtual bool ShouldApplyCloudFogging() const
Definition MaterialShared.h:2403
virtual ENGINE_API bool PrepareDestroy_GameThread()
Definition MaterialShared.cpp:2437
virtual bool RequiresSynchronousCompilation() const
Definition MaterialShared.h:2441
virtual float GetTranslucentShadowStartOffset() const
Definition MaterialShared.h:2400
virtual float GetOpacityMaskClipValue() const =0
virtual bool IsWireframe() const =0
virtual bool IsDistorted() const
Definition MaterialShared.h:2381
bool IsRenderingThreadShaderMapComplete() const
Definition MaterialShared.h:2675
virtual float GetTranslucentShadowDensityScale() const
Definition MaterialShared.h:2385
virtual bool HasDisplacementConnected() const
Definition MaterialShared.h:2439
virtual bool IsDualBlendingEnabled() const
Definition MaterialShared.h:2397
virtual bool IsDitheredLODTransition() const =0
virtual bool IsUsingHQForwardReflections() const
Definition MaterialShared.h:2364
virtual FString GetMaterialUsageDescription() const =0
virtual FGuid GetMaterialId() const =0
virtual bool IsUsedWithBeamTrails() const
Definition MaterialShared.h:2333
virtual bool HasMaterialCacheOutput() const
Definition MaterialShared.h:2349
virtual bool IsStencilTestEnabled() const
Definition MaterialShared.h:2449
virtual const FMaterialLayersFunctions * GetMaterialLayers() const
Definition MaterialShared.h:2818
virtual bool HasMaterialPropertyConnected(EMaterialProperty In) const
Definition MaterialShared.h:2438
virtual FString GetFriendlyName() const =0
virtual bool IsTangentSpaceNormal() const
Definition MaterialShared.h:2311
class FMaterialShaderMap * GetGameThreadShaderMap() const
Definition MaterialShared.h:2657
virtual ERefractionCoverageMode GetRefractionCoverageMode() const
Definition MaterialShared.h:2382
virtual bool IsPreview() const
Definition MaterialShared.h:2475
virtual EPixelDepthOffsetMode GetPixelDepthOffsetMode() const
Definition MaterialShared.h:2383
virtual float GetTranslucentSelfShadowSecondDensityScale() const
Definition MaterialShared.h:2387
virtual bool IsUsedWithMeshParticles() const
Definition MaterialShared.h:2334
virtual float GetTranslucentLocalLightShadowQuality() const
Definition MaterialShared.h:2409
virtual bool IsUsedWithInstancedStaticMeshes() const
Definition MaterialShared.h:2341
virtual bool IsDefaultMaterial() const
Definition MaterialShared.h:2442
virtual bool ComputeFogPerPixel() const
Definition MaterialShared.h:2405
virtual enum EBlendMode GetBlendMode() const =0
virtual bool IsVariableRateShadingAllowed() const
Definition MaterialShared.h:2463
virtual FString GetDebugName() const
Definition MaterialShared.h:2852
virtual bool IsUsedWithNeuralNetworks() const
Definition MaterialShared.h:2356
uint32 GetRefCount() const
Definition MaterialShared.h:2069
virtual bool IsUsingAlphaToCoverage() const
Definition MaterialShared.h:2362
virtual void SetupExtraCompilationSettings(const EShaderPlatform Platform, FExtraShaderCompilerSettings &Settings) const final
Definition MaterialShared.h:2745
virtual bool IsPersistent() const =0
virtual int32 GetNumCustomizedUVs() const
Definition MaterialShared.h:2443
virtual bool IsFullyRough() const
Definition MaterialShared.h:2358
virtual bool IsTessellationEnabled() const
Definition MaterialShared.h:2458
virtual bool ShouldGenerateSphericalParticleNormals() const
Definition MaterialShared.h:2312
TShaderRef< ShaderType > GetShader(FVertexFactoryType *VertexFactoryType, const typename ShaderType::FPermutationDomain &PermutationVector, bool bFatalIfMissing=true) const
Definition MaterialShared.h:2693
virtual FLinearColor GetTranslucentMultipleScatteringExtinction() const
Definition MaterialShared.h:2399
virtual FString GetAssetName() const
Definition MaterialShared.h:2413
virtual float GetTranslucencyDirectionalLightingIntensity() const
Definition MaterialShared.h:2384
virtual bool HasFirstPersonOutput() const
Definition MaterialShared.h:2456
virtual int32 CompilePropertyAndSetMaterialProperty(EMaterialProperty Property, class FMaterialCompiler *Compiler, EShaderFrequency OverrideShaderFrequency=SF_NumFrequencies, bool bUsePreviousFrameTime=false) const =0
virtual bool IsUsedWithSkeletalMesh() const
Definition MaterialShared.h:2329
virtual TConstArrayView< TObjectPtr< UTextureCollection > > GetReferencedTextureCollections() const =0
virtual bool HasMetallicConnected() const
Definition MaterialShared.h:2434
virtual bool HasAmbientOcclusionConnected() const
Definition MaterialShared.h:2437
virtual bool IsSubstrateMaterial() const
Definition MaterialShared.h:2440
virtual bool IsPostProcessMaterial() const
Definition MaterialShared.h:2327
virtual float GetTranslucentBackscatteringExponent() const
Definition MaterialShared.h:2389
virtual uint32 GetMaterialDecalResponse() const
Definition MaterialShared.h:2429
virtual uint32 GetStencilRefValue() const
Definition MaterialShared.h:2450
virtual bool GetForwardBlendsSkyLightCubemaps() const
Definition MaterialShared.h:2365
TArrayView< const FMaterialTextureParameterInfo > GetUniformVirtualTextureExpressions() const
Definition MaterialShared.h:2557
virtual bool IsUsedWithLidarPointCloud() const
Definition MaterialShared.h:2354
virtual bool IsTranslucencyWritingFrontLayerTransparency() const
Definition MaterialShared.h:2310
virtual bool IsUsedWithNiagaraRibbons() const
Definition MaterialShared.h:2336
virtual bool IsNonmetal() const
Definition MaterialShared.h:2367
virtual bool IsUsingPlanarForwardReflections() const
Definition MaterialShared.h:2366
virtual EMaterialShadingRate GetShadingRate() const
Definition MaterialShared.h:2461
virtual float GetRefractionDepthBiasValue() const
Definition MaterialShared.h:2401
virtual bool IsUIMaterial() const =0
virtual float GetTranslucentSelfShadowSecondOpacity() const
Definition MaterialShared.h:2388
virtual bool HasSubstrateRoughnessTracking() const
Definition MaterialShared.h:2407
virtual bool ShouldDisableDepthTest() const
Definition MaterialShared.h:2313
virtual FDisplacementFadeRange GetDisplacementFadeRange() const
Definition MaterialShared.h:2392
virtual bool IsUsedWithVirtualHeightfieldMesh() const
Definition MaterialShared.h:2355
virtual int32 GetNeuralProfileId() const
Definition MaterialShared.h:2462
virtual bool IsUsedWithVoxels() const
Definition MaterialShared.h:2345
virtual int32 GetBlendablePriority() const
Definition MaterialShared.h:2446
virtual bool IsUsedWithStaticLighting() const
Definition MaterialShared.h:2338
uint32 AddRef() const
Definition MaterialShared.h:2067
virtual bool IsUsedWithParticleSprites() const
Definition MaterialShared.h:2332
virtual bool UseLmDirectionality() const
Definition MaterialShared.h:2368
virtual FString GetFullPath() const
Definition MaterialShared.h:2789
virtual bool IsTranslucencyAfterDOFEnabled() const
Definition MaterialShared.h:2393
virtual bool IsUsedWithNanite() const
Definition MaterialShared.h:2344
void SetQualityLevelProperties(EShaderPlatform InShaderPlatform, EMaterialQualityLevel::Type InQualityLevel=EMaterialQualityLevel::Num)
Definition MaterialShared.h:2860
virtual bool IsUsedWithParticleSystem() const
Definition MaterialShared.h:2331
virtual void FeedbackMaterialLayersInstancedGraphFromCompilation(const FMaterialLayersFunctions *InLayers)
Definition MaterialShared.h:2817
virtual float GetTranslucentSelfShadowDensityScale() const
Definition MaterialShared.h:2386
TArrayView< const FMaterialTextureParameterInfo > GetUniformSparseVolumeTextureExpressions() const
Definition MaterialShared.h:2558
virtual bool HasRoughnessConnected() const
Definition MaterialShared.h:2432
virtual EMaterialShaderMapUsage::Type GetMaterialShaderMapUsage() const
Definition MaterialShared.h:2726
bool IsOwnerBeginDestroyed() const
Definition MaterialShared.h:2801
virtual bool IsUsedWithLandscape() const
Definition MaterialShared.h:2330
virtual bool ShouldAlwaysEvaluateWorldPositionOffset() const
Definition MaterialShared.h:2404
bool ShouldCastDynamicShadows() const
Definition MaterialShared.h:2528
static void DeferredDeleteArray(TArray< TRefCountPtr< TMaterial > > &Materials)
Definition MaterialShared.h:2080
virtual bool ShouldDoSSR() const
Definition MaterialShared.h:2316
virtual bool UsesMotionVectorWorldOffset() const
Definition MaterialShared.h:2320
virtual bool CastsRayTracedShadows() const
Definition MaterialShared.h:2457
virtual bool IsUsingPreintegratedGFForSimpleIBL() const
Definition MaterialShared.h:2363
virtual bool HasPixelDepthOffsetConnected() const
Definition MaterialShared.h:2428
virtual bool UseNormalCurvatureToRoughness() const
Definition MaterialShared.h:2360
virtual void SetupExtraCompilationSettings(FExtraShaderCompilerSettings &Settings) const
Definition MaterialShared.h:2746
FString GetUniqueAssetName(const FMaterialShaderMapId &ShaderMapId) const
Definition MaterialShared.h:2425
virtual bool IsUsedWithStaticMesh() const
Definition MaterialShared.h:2357
virtual bool IsVolumetricPrimitive() const =0
void SetOwnerBeginDestroyed()
Definition MaterialShared.h:2800
TArrayView< const FMaterialTextureParameterInfo > GetUniform2DTextureExpressions() const
Definition MaterialShared.h:2553
virtual int32 GetNumMaterialCacheTags() const
Definition MaterialShared.h:2444
virtual EMaterialDomain GetMaterialDomain() const =0
virtual bool IsTranslucencyWritingCustomDepth() const
Definition MaterialShared.h:2307
virtual UMaterialInterface * GetMaterialInterface() const
Definition MaterialShared.h:2471
virtual bool ShouldDoContactShadows() const
Definition MaterialShared.h:2317
virtual bool UsesTemporalResponsiveness() const
Definition MaterialShared.h:2319
virtual bool HasSpecularConnected() const
Definition MaterialShared.h:2433
virtual bool IsTwoSided() const =0
virtual bool IsTranslucencyWritingVelocity() const
Definition MaterialShared.h:2308
bool IsGameThreadShaderMapComplete() const
Definition MaterialShared.h:2669
const EShaderPlatform GetShaderPlatform() const
Definition MaterialShared.h:2569
virtual bool AllowNegativeEmissiveColor() const
Definition MaterialShared.h:2371
EMaterialQualityLevel::Type GetQualityLevel() const
Definition MaterialShared.h:2538
virtual float GetTranslucentDirectionalLightShadowQuality() const
Definition MaterialShared.h:2410
virtual bool HasPixelAnimation() const
Definition MaterialShared.h:2318
virtual bool IsThinSurface() const =0
virtual bool GetCastDynamicShadowAsMasked() const =0
virtual bool IsSpecialEngineMaterial() const =0
virtual bool IsTranslucencyVelocityFromDepth() const
Definition MaterialShared.h:2309
virtual bool IsMobileSeparateTranslucencyEnabled() const
Definition MaterialShared.h:2398
virtual bool IsUsedWithUI() const
Definition MaterialShared.h:2350
TArrayView< const FMaterialTextureParameterInfo > GetUniform2DArrayTextureExpressions() const
Definition MaterialShared.h:2555
virtual bool HasRenderTracePhysicalMaterialOutputs() const
Definition MaterialShared.h:2459
virtual bool HasBaseColorConnected() const
Definition MaterialShared.h:2430
virtual bool HasVertexInterpolator() const
Definition MaterialShared.h:2454
virtual bool ShouldApplyFogging() const
Definition MaterialShared.h:2402
virtual bool IsUsedWithGeometryCollections() const
Definition MaterialShared.h:2342
virtual bool IsDitherMasked() const
Definition MaterialShared.h:2370
uint32 Release() const
Definition MaterialShared.h:2068
virtual FDisplacementScaling GetDisplacementScaling() const
Definition MaterialShared.h:2390
virtual bool IsUsedWithHeterogeneousVolumes() const
Definition MaterialShared.h:2347
virtual bool IsUsedWithNiagaraSprites() const
Definition MaterialShared.h:2335
virtual int32 GetBlendableLocation() const
Definition MaterialShared.h:2445
virtual int32 CompileCustomAttribute(const FGuid &AttributeID, class FMaterialCompiler *Compiler) const
Definition MaterialShared.h:2848
virtual bool HasPerInstanceRandom() const
Definition MaterialShared.h:2453
virtual EMaterialTranslateValidationFlags GetMaterialTranslateValidationFlags() const
Definition MaterialShared.h:2465
virtual bool IsUsedWithMorphTargets() const
Definition MaterialShared.h:2339
virtual bool IsUsedWithGeometryCache() const
Definition MaterialShared.h:2351
virtual enum EMaterialFloatPrecisionMode GetMaterialFloatPrecisionMode() const
Definition MaterialShared.h:2361
virtual bool ShouldWriteOnlyAlpha() const
Definition MaterialShared.h:2314
virtual bool IsUsedWithNiagaraMeshParticles() const
Definition MaterialShared.h:2337
virtual bool IsUsedWithVolumetricCloud() const
Definition MaterialShared.h:2346
static void DeferredDeleteArray(TArray< TMaterial * > &Materials)
Definition MaterialShared.h:2098
virtual uint16 GetPreshaderGap() const
Definition MaterialShared.h:2460
virtual TArrayView< const TObjectPtr< UObject > > GetReferencedTextures() const =0
void SetAllowPixelDepthOffset(bool bEnable)
Definition MaterialShared.h:2900
FMaterial()
Definition MaterialShared.h:2117
virtual bool HasPerInstanceCustomData() const
Definition MaterialShared.h:2452
virtual bool GetForceCompatibleWithLightFunctionAtlas() const
Definition MaterialShared.h:2359
virtual bool GetDisablePreExposureScale() const
Definition MaterialShared.h:2448
virtual bool IsLightFunction() const =0
virtual bool IsDisplacementFadeEnabled() const
Definition MaterialShared.h:2391
virtual bool IsTranslucencyAfterMotionBlurEnabled() const
Definition MaterialShared.h:2394
virtual bool HasEmissiveColorConnected() const
Definition MaterialShared.h:2435
virtual bool IsUsedWithWater() const
Definition MaterialShared.h:2352
virtual bool IsSky() const
Definition MaterialShared.h:2406
Definition MemoryImage.h:743
Definition MemoryWriter.h:101
Definition MaterialShaderMapLayout.h:35
Definition MaterialShared.h:1417
FMeshMaterialShaderMap(EShaderPlatform InPlatform, const FHashedName &InVertexFactoryTypeName)
Definition MaterialShared.h:1420
const FHashedName & GetVertexFactoryTypeName() const
Definition MaterialShared.h:1433
Definition MeshMaterialShaderType.h:26
Definition NameTypes.h:617
Definition UnrealType.h:3087
Definition OutputDevice.h:133
Definition UObjectGlobals.h:2492
Definition SecureHash.h:226
Definition SceneView.h:1425
Definition ShaderCompilerJobTypes.h:152
Definition ShaderCompilerJobTypes.h:94
Definition ShaderCompilerJobTypes.h:331
Definition ShaderCompiler.h:894
Definition Shader.h:695
Definition ShaderKeyGenerator.h:29
Definition Shader.h:2312
Definition MaterialShaderMapLayout.h:27
Definition Shader.h:521
Definition Shader.h:336
Definition ShaderParameterMetadata.h:136
Definition Shader.h:2273
Definition Shader.h:1931
Definition Shader.h:1238
Definition Shader.h:829
Definition Text.h:385
Definition ThreadSafeCounter.h:14
Definition MaterialShared.h:666
int32 GetNumTextureCollections() const
Definition MaterialShared.h:716
LAYOUT_FIELD(TMemoryImageArray< uint8 >, DefaultValues)
int32 GetNumTextures(EMaterialTextureParameterType Type) const
Definition MaterialShared.h:710
void SetParameterCollections(TConstArrayView< const class UMaterialParameterCollection * > Collections)
Definition MaterialUniformExpressions.cpp:383
uint32 GetNumericParameterEvaluationOffset(uint32 ParameterIndex) const
Returns the offset of specified parameter given with AddNumericParameterEvaluation.
Definition MaterialUniformExpressions.cpp:810
const uint8 * GetDefaultParameterData(uint32 Offset) const
Definition MaterialShared.h:701
bool HasExternalTextureExpressions() const
Definition MaterialShared.h:686
bool IsEmpty() const
Definition MaterialUniformExpressions.cpp:248
const FMaterialTextureParameterInfo & GetTextureParameter(EMaterialTextureParameterType Type, int32 Index) const
Definition MaterialShared.h:707
TConstArrayView< FMaterialCacheTagStack > GetMaterialCacheTagStacks() const
Definition MaterialShared.h:738
ENGINE_API void GetTextureCollectionValue(int32 Index, const FMaterialRenderContext &Context, const FMaterial &Material, const UTextureCollection *&OutValue) const
Definition MaterialUniformExpressions.cpp:923
LAYOUT_FIELD(TMemoryImageArray< FMaterialVirtualTextureStack >, VTStacks)
LAYOUT_FIELD(TMemoryImageArray< FMaterialExternalTextureParameterInfo >, UniformExternalTextureParameters)
const FMaterialTextureCollectionParameterInfo & GetTextureCollectionParameter(int32 Index) const
Definition MaterialShared.h:708
LAYOUT_ARRAY(TMemoryImageArray< FMaterialTextureParameterInfo >, UniformTextureParameters, NumMaterialTextureParameterTypes)
LAYOUT_FIELD(uint32, UniformPreshaderBufferSize)
const FRHIUniformBufferLayoutInitializer & GetUniformBufferLayoutInitializer() const
Definition MaterialShared.h:691
ENGINE_API uint32 GetReferencedTexture2DRHIHash(const FMaterialRenderContext &MaterialRenderContext) const
Definition MaterialUniformExpressions.cpp:1856
const FMaterialVirtualTextureStack & GetVTStack(int32 Index) const
Definition MaterialShared.h:741
ENGINE_API void GetGameThreadTextureValue(EMaterialTextureParameterType Type, int32 Index, const UMaterialInterface *MaterialInterface, const FMaterial &Material, UTexture *&OutValue, bool bAllowOverride=true) const
Definition MaterialUniformExpressions.cpp:857
FShaderParametersMetadata * CreateBufferStruct()
Definition MaterialUniformExpressions.cpp:393
ENGINE_API void FillUniformBuffer(const FMaterialRenderContext &MaterialRenderContext, const FUniformExpressionCache &UniformExpressionCache, const FRHIUniformBufferLayout *UniformBufferLayout, uint8 *TempBuffer, int TempBufferSize) const
Definition MaterialUniformExpressions.cpp:945
FUniformExpressionSet()
Definition MaterialShared.h:669
UE::Shader::FValue GetDefaultParameterValue(EMaterialParameterType Type, uint32 Offset) const
Definition MaterialShared.h:696
uint32 AllocateFromUniformBuffer(uint32 NumOfFloat4s)
Definition MaterialUniformExpressions.cpp:815
LAYOUT_FIELD(TMemoryImageArray< FMaterialUniformPreshaderField >, UniformPreshaderFields)
bool operator==(const FUniformExpressionSet &ReferenceSet) const
Definition MaterialUniformExpressions.cpp:267
LAYOUT_FIELD(TMemoryImageArray< FMaterialTextureCollectionParameterInfo >, UniformTextureCollectionParameters)
LAYOUT_FIELD(TMemoryImageArray< FMaterialUniformParameterEvaluation >, UniformParameterEvaluations)
void AddNumericParameterEvaluation(uint32 ParameterIndex, uint32 BufferOffset)
Definition MaterialUniformExpressions.cpp:800
friend class FHLSLMaterialTranslator
Definition MaterialShared.h:770
ENGINE_API FString GetSummaryString() const
Definition MaterialUniformExpressions.cpp:364
LAYOUT_FIELD(UE::Shader::FPreshaderData, UniformPreshaderData)
const FMaterialNumericParameterInfo & GetNumericParameter(uint32 Index) const
Definition MaterialShared.h:706
LAYOUT_FIELD(TMemoryImageArray< FMaterialUniformPreshaderHeader >, UniformPreshaders)
int32 AddVTStack(int32 InPreallocatedStackTextureIndex)
Definition MaterialUniformExpressions.cpp:822
TConstArrayView< FMaterialVirtualTextureStack > GetVTStacks() const
Definition MaterialShared.h:740
uint32 AddDefaultParameterValue(const UE::Shader::FValue &Value)
Definition MaterialUniformExpressions.cpp:792
ENGINE_API void GetTextureValue(EMaterialTextureParameterType Type, int32 Index, const FMaterialRenderContext &Context, const FMaterial &Material, const UTexture *&OutValue) const
Definition MaterialUniformExpressions.cpp:876
int32 FindOrAddExternalTextureParameter(const FMaterialExternalTextureParameterInfo &Info)
Definition MaterialUniformExpressions.cpp:760
int32 FindOrAddTextureParameter(EMaterialTextureParameterType Type, const FMaterialTextureParameterInfo &Info)
Definition MaterialUniformExpressions.cpp:734
ENGINE_API void GetGameThreadTextureCollectionValue(int32 Index, const UMaterialInterface *MaterialInterface, const FMaterial &Material, UTextureCollection *&OutValue) const
Definition MaterialUniformExpressions.cpp:937
int32 AddVTLayer(int32 StackIndex, int32 TextureIndex)
Definition MaterialUniformExpressions.cpp:827
void CountTextureCollections(uint32 &BindlessCollections, uint32 &VirtualCollections) const
Definition MaterialShared.cpp:120
FVTPackedStackAndLayerIndex GetVTStackAndLayerIndex(int32 UniformExpressionIndex) const
Definition MaterialUniformExpressions.cpp:707
void WriteUniformPreshaderEntry(uint32 BufferOffset, UE::Shader::EValueType EntryType, const TFunction< void(UE::Shader::FPreshaderData &)> &EntryGenerator)
Definition MaterialUniformExpressions.cpp:839
LAYOUT_FIELD(TMemoryImageArray< FMaterialNumericParameterInfo >, UniformNumericParameters)
int32 FindOrAddNumericParameter(EMaterialParameterType Type, const FMaterialParameterInfo &ParameterInfo, uint32 DefaultValueOffset)
Definition MaterialUniformExpressions.cpp:773
friend class FMaterialShaderMap
Definition MaterialShared.h:771
int32 FindOrAddTextureCollectionParameter(const FMaterialTextureCollectionParameterInfo &Info)
Definition MaterialUniformExpressions.cpp:747
void SetVTLayer(int32 StackIndex, int32 VTLayerIndex, int32 TextureIndex)
Definition MaterialUniformExpressions.cpp:834
Definition MaterialShared.h:609
void SetNumericOverride(EMaterialParameterType Type, const FHashedMaterialParameterInfo &ParameterInfo, const UE::Shader::FValue &Value)
Definition MaterialUniformExpressions.cpp:174
void ClearNumericOverride(EMaterialParameterType Type, const FHashedMaterialParameterInfo &ParameterInfo)
Definition MaterialUniformExpressions.cpp:182
void SetTextureOverride(EMaterialTextureParameterType Type, const FMaterialTextureParameterInfo &ParameterInfo, UTexture *Texture)
Definition MaterialUniformExpressions.cpp:200
UTexture * GetTextureOverride_GameThread(EMaterialTextureParameterType Type, const FMaterialTextureParameterInfo &ParameterInfo) const
Definition MaterialUniformExpressions.cpp:230
UTexture * GetTextureOverride_RenderThread(EMaterialTextureParameterType Type, const FMaterialTextureParameterInfo &ParameterInfo) const
Definition MaterialUniformExpressions.cpp:239
bool GetNumericOverride(EMaterialParameterType Type, const FHashedMaterialParameterInfo &ParameterInfo, UE::Shader::FValue &OutValue) const
Definition MaterialUniformExpressions.cpp:188
Definition VertexFactory.h:314
const FHashedName & GetHashedName() const
Definition VertexFactory.h:375
Definition TextureResource.h:175
Definition VirtualTexturing.h:374
Definition ArrayView.h:139
Definition Array.h:670
UE_FORCEINLINE_HINT SizeType Emplace(ArgsType &&... Args)
Definition Array.h:2561
UE_NODEBUG UE_FORCEINLINE_HINT SIZE_T GetAllocatedSize(void) const
Definition Array.h:1059
Definition EnumAsByte.h:22
Definition AndroidPlatformMisc.h:14
Definition List.h:285
Definition UnrealString.h.inl:34
Definition MemoryImage.h:382
Definition Shader.h:2580
Definition Shader.h:1021
static TShaderRefBase< ShaderType, PointerTableType > Cast(const TShaderRefBase< OtherShaderType, OtherPointerTableType > &Rhs)
Definition Shader.h:1041
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition StaticArray.h:26
Definition FunctionFwd.h:19
Definition UniquePtr.h:107
Definition Class.h:3793
Definition Preshader.h:98
Definition MaterialExpressionMaterialFunctionCall.h:81
Definition MaterialExpression.h:150
Definition MaterialInstance.h:627
Definition MaterialInterface.h:296
Definition Material.h:432
Definition RuntimeVirtualTexture.h:18
Definition SparseVolumeTexture.h:309
Definition SubsurfaceProfile.h:170
Definition Texture2D.h:26
Definition TextureCollection.h:47
Definition Texture.h:1219
void FinishCompilation(TFunctionRef< ICompilable &(int32 Index)> Getter, int32 Num, TFunctionRef< void(ICompilable *)> PostCompileSingle)
Definition AsyncCompilationHelpers.cpp:90
Definition DebugViewModeHelpers.h:17
Type
Definition SceneTypes.h:132
@ Num
Definition SceneTypes.h:137
Definition MaterialShared.h:1034
Type
Definition MaterialShared.h:1036
@ MaterialExportEmissive
Definition MaterialShared.h:1050
@ MaterialExportOpacity
Definition MaterialShared.h:1051
@ MaterialExportCustomOutput
Definition MaterialShared.h:1056
@ MaterialExportOpacityMask
Definition MaterialShared.h:1052
@ MaterialExportNormal
Definition MaterialShared.h:1044
@ MaterialExportMetallic
Definition MaterialShared.h:1046
@ MaterialExportSpecular
Definition MaterialShared.h:1043
@ MaterialExportBaseColor
Definition MaterialShared.h:1042
@ MaterialExportAO
Definition MaterialShared.h:1049
@ LightmassExportOpacity
Definition MaterialShared.h:1040
@ MaterialExportClearCoatRoughness
Definition MaterialShared.h:1055
@ MaterialExportRoughness
Definition MaterialShared.h:1047
@ MaterialExportTangent
Definition MaterialShared.h:1045
@ MaterialExportAnisotropy
Definition MaterialShared.h:1048
@ LightmassExportNormal
Definition MaterialShared.h:1041
@ MaterialExportClearCoat
Definition MaterialShared.h:1054
@ LightmassExportDiffuse
Definition MaterialShared.h:1039
@ MaterialExportSubSurfaceColor
Definition MaterialShared.h:1053
@ Default
Definition MaterialShared.h:1037
@ MaterialExportRefraction
Definition MaterialShared.h:1058
@ LightmassExportEmissive
Definition MaterialShared.h:1038
@ MaterialExportShadingModel
Definition MaterialShared.h:1057
Definition SceneComponent.h:24
Type
Definition RHIFeatureLevel.h:20
@ Num
Definition RHIFeatureLevel.h:54
Definition FieldSystemNoiseAlgo.cpp:6
bool IsSubstrateEnabled()
Definition RenderUtils.cpp:2081
int
Definition TestServer.py:515
Definition CookOnTheFly.h:19
EValueType
Definition ShaderTypes.h:94
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition MaterialShared.h:1014
TArray< FShaderType * > ShaderTypes
Definition MaterialShared.h:1016
Definition MaterialShared.h:1020
TArray< FDebugShaderPipelineInfo > Pipelines
Definition MaterialShared.h:1023
TArray< FShaderType * > ShaderTypes
Definition MaterialShared.h:1022
Definition EngineTypes.h:3237
Definition EngineTypes.h:3204
Definition MaterialExpressionIO.h:23
Definition ShaderCompilerCore.h:164
Definition Guid.h:109
Definition Color.h:48
static CORE_API const FLinearColor White
Definition Color.h:456
Definition MaterialCachedData.h:199
Definition MaterialShared.h:335
EShaderPlatform ShaderPlatform
Definition MaterialShared.h:340
ERHIFeatureLevel::Type FeatureLevel
Definition MaterialShared.h:341
const ITargetPlatform * TargetPlatform
Definition MaterialShared.h:342
FMaterialCompileTargetParameters(EShaderPlatform InShaderPlatform, ERHIFeatureLevel::Type InFeatureLevel, const ITargetPlatform *InTargetPlatform)
Definition MaterialShared.h:336
Definition MaterialLayersFunctions.h:221
Definition PSOPrecache.h:278
Definition MaterialParameters.h:33
Definition MaterialShared.h:1441
DECLARE_TYPE_LAYOUT(FMaterialProcessedSource, NonVirtual)
LAYOUT_FIELD(FMemoryImageString, Source)
FMaterialProcessedSource()
Definition MaterialShared.h:1444
FMaterialProcessedSource(const FHashedName &InName, const TCHAR *InSource)
Definition MaterialShared.h:1445
LAYOUT_FIELD(FHashedName, Name)
Definition MaterialShared.h:349
FMaterialRenderContext(const FMaterialRenderProxy *InMaterialRenderProxy, const FMaterial &InMaterial, bool bInShowSelection)
Definition MaterialShared.h:366
const FMaterial & Material
Definition MaterialShared.h:353
ENGINE_API FGuid GetExternalTextureGuid(const FGuid &ExternalTextureGuid, const FName &ParameterName, int32 SourceTextureIndex) const
Definition MaterialUniformExpressions.cpp:101
ENGINE_API void GetTextureCollectionParameterValue(const FHashedMaterialParameterInfo &ParameterInfo, int32 TextureCollectionIndex, const UTextureCollection *&OutValue) const
Definition MaterialUniformExpressions.cpp:153
const FMaterialRenderProxy * MaterialRenderProxy
Definition MaterialShared.h:351
ENGINE_API void GetTextureParameterValue(const FHashedMaterialParameterInfo &ParameterInfo, int32 TextureIndex, const UTexture *&OutValue) const
Definition MaterialUniformExpressions.cpp:129
bool bShowSelection
Definition MaterialShared.h:356
Definition MaterialShared.h:3393
uint8 FeatureLevel
Definition MaterialShared.h:3397
uint32 Offset
Definition MaterialShared.h:3395
uint8 QualityLevel
Definition MaterialShared.h:3399
Definition MaterialShared.h:1063
uint64 bIsUsedWithGeometryCache
Definition MaterialShared.h:1131
uint64 bIsUsedWithHeterogeneousVolumes
Definition MaterialShared.h:1153
uint64 bIsDistorted
Definition MaterialShared.h:1100
uint64 bIsUsedWithNiagaraRibbons
Definition MaterialShared.h:1124
uint64 bIsUsedWithBeamTrails
Definition MaterialShared.h:1126
uint64 bHasPixelDepthOffsetConnected
Definition MaterialShared.h:1117
uint64 bWritesEveryPixelShadowPass
Definition MaterialShared.h:1103
uint16 bUsesMotionVectorWorldOffset
Definition MaterialShared.h:1077
uint64 bIsTranslucencySurface
Definition MaterialShared.h:1149
uint64 bIsDitherMasked
Definition MaterialShared.h:1097
uint64 bHasVertexInterpolator
Definition MaterialShared.h:1141
uint64 bIsUsedWithVoxels
Definition MaterialShared.h:1147
uint64 bHasRoughnessConnected
Definition MaterialShared.h:1108
uint8 bHasMaterialCacheOutput
Definition MaterialShared.h:1159
uint64 bDisablePreExposureScale
Definition MaterialShared.h:1156
uint16 bUsesTemporalResponsiveness
Definition MaterialShared.h:1076
uint64 bIsUsedWithGeometryCollections
Definition MaterialShared.h:1132
EMaterialQualityLevel::Type QualityLevel
Definition MaterialShared.h:1082
uint64 bIsDitheredLODTransition
Definition MaterialShared.h:1137
uint64 bHasDiffuseAlbedoConnected
Definition MaterialShared.h:1104
uint16 bIsUsedWithStaticMesh
Definition MaterialShared.h:1072
uint64 bHasPerInstanceCustomData
Definition MaterialShared.h:1139
uint64 bIsUsedWithHairStrands
Definition MaterialShared.h:1133
uint64 bIsUsedWithVirtualHeightfieldMesh
Definition MaterialShared.h:1144
uint64 bIsUsedWithLidarPointCloud
Definition MaterialShared.h:1143
uint64 bIsUsedWithWater
Definition MaterialShared.h:1134
uint64 bIsUsedWithVolumetricCloud
Definition MaterialShared.h:1152
EMaterialDomain MaterialDomain
Definition MaterialShared.h:1064
uint64 PackedFlags
Definition MaterialShared.h:1091
uint16 bIsTranslucentSurfaceLighting
Definition MaterialShared.h:1073
uint64 bIsUsedWithStaticLighting
Definition MaterialShared.h:1119
uint64 bIsMasked
Definition MaterialShared.h:1096
uint64 bHasF0Connected
Definition MaterialShared.h:1105
uint64 bAllowVariableRateShading
Definition MaterialShared.h:1157
uint64 bIsUsedWithAPEXCloth
Definition MaterialShared.h:1130
uint64 bIsUsedWithLandscape
Definition MaterialShared.h:1125
uint64 bIsUsedWithMorphTargets
Definition MaterialShared.h:1129
uint16 bHasFirstPersonInterpolation
Definition MaterialShared.h:1074
uint16 PreshaderGap
Definition MaterialShared.h:1083
uint64 bIsUsedWithInstancedStaticMeshes
Definition MaterialShared.h:1138
uint16 bIsSubstrateMaterial
Definition MaterialShared.h:1075
uint64 bIsThinSurface
Definition MaterialShared.h:1099
uint64 bShouldDisableDepthTest
Definition MaterialShared.h:1150
uint64 bAlwaysEvaluateWorldPositionOffset
Definition MaterialShared.h:1155
uint64 bWritesEveryPixel
Definition MaterialShared.h:1102
int32 BlendableLocation
Definition MaterialShared.h:1084
uint64 bIsSpecialEngineMaterial
Definition MaterialShared.h:1095
uint64 bHasPerInstanceRandom
Definition MaterialShared.h:1140
uint64 bHasRuntimeVirtualTextureOutput
Definition MaterialShared.h:1142
uint64 bIsDefaultMaterial
Definition MaterialShared.h:1094
uint64 bHasDisplacementConnected
Definition MaterialShared.h:1115
uint8 bSamplesMaterialCache
Definition MaterialShared.h:1158
uint64 bIsStencilTestEnabled
Definition MaterialShared.h:1148
int8 NumMaterialCacheTags
Definition MaterialShared.h:1087
uint64 bIsUsedWithSplineMeshes
Definition MaterialShared.h:1127
uint64 bHasMetallicConnected
Definition MaterialShared.h:1110
uint64 bIsUsedWithSkeletalMesh
Definition MaterialShared.h:1128
ERHIFeatureLevel::Type FeatureLevel
Definition MaterialShared.h:1081
uint64 bHasEmissiveColorConnected
Definition MaterialShared.h:1111
uint64 bIsUsedWithNeuralNetworks
Definition MaterialShared.h:1145
uint64 bIsMobileSeparateTranslucencyEnabled
Definition MaterialShared.h:1154
uint32 StencilCompare
Definition MaterialShared.h:1086
FMaterialShadingModelField ShadingModels
Definition MaterialShared.h:1065
uint64 bIsTwoSided
Definition MaterialShared.h:1098
EBlendMode BlendMode
Definition MaterialShared.h:1080
int32 NumCustomizedUVs
Definition MaterialShared.h:1085
uint64 bIsUsedWithNanite
Definition MaterialShared.h:1146
uint64 bIsUsedWithNiagaraSprites
Definition MaterialShared.h:1122
uint64 bIsUsedWithNiagaraMeshParticles
Definition MaterialShared.h:1123
uint64 bHasAmbientOcclusionConnected
Definition MaterialShared.h:1112
uint64 bIsTranslucencyWritingVelocity
Definition MaterialShared.h:1135
uint64 bHasBaseColorConnected
Definition MaterialShared.h:1106
uint64 bIsTessellationEnabled
Definition MaterialShared.h:1114
uint64 bShouldCastDynamicShadows
Definition MaterialShared.h:1101
uint64 bHasNormalConnected
Definition MaterialShared.h:1107
uint64 bHasSpecularConnected
Definition MaterialShared.h:1109
uint64 bIsUsedWithParticleSprites
Definition MaterialShared.h:1120
uint16 PackedFlags16
Definition MaterialShared.h:1069
uint64 bHasVertexPositionOffsetConnected
Definition MaterialShared.h:1116
uint64 bHasRenderTracePhysicalMaterialOutput
Definition MaterialShared.h:1151
uint64 bMaterialMayModifyMeshPosition
Definition MaterialShared.h:1118
uint64 bHasAnisotropyConnected
Definition MaterialShared.h:1113
uint64 bIsTranslucencyWritingCustomDepth
Definition MaterialShared.h:1136
uint64 bIsUsedWithMeshParticles
Definition MaterialShared.h:1121
Definition MaterialShared.h:1181
TArray< FName > MaterialShaderTags
Definition MaterialShared.h:1189
Definition MaterialShaderType.h:198
Definition MaterialShaderType.h:222
Definition EngineTypes.h:732
Definition MaterialShared.h:3344
Type
Definition MaterialShared.h:3346
Definition MaterialShared.h:2259
Definition MaterialParameters.h:96
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
Definition PSOPrecache.h:30
Definition ObjectVersion.h:762
Definition MemoryLayout.h:799
Definition RHIUniformBufferLayoutInitializer.h:41
Definition RHIResources.h:1150
Definition ResourceSize.h:31
Definition NameTypes.h:491
Definition ShaderCore.h:544
Definition ShaderSerialization.h:26
Definition ShaderCodeLibrary.h:118
Definition AndroidStaticFeatureLevel.inl:12
Definition StaticParameterSet.h:462
Definition MaterialParameters.h:503
Definition SubstrateMaterialShared.h:177
Definition MaterialRenderProxy.h:49
Definition ObjectPtr.h:488
Definition Optional.h:131
Definition IntPoint.h:25
Definition ShaderTypes.h:368
static FValue FromMemoryImage(EValueType Type, const void *Data, uint32 *OutSizeInBytes=nullptr)
Definition ShaderValue.cpp:395
uint16 LayerIndex
Definition MaterialShared.h:763
uint16 StackIndex
Definition MaterialShared.h:762
uint32 PackedValue
Definition MaterialShared.h:759
FVTPackedStackAndLayerIndex(uint16 InStackIndex, uint16 InLayerIndex)
Definition MaterialShared.h:757