23#define MESH_DRAW_COMMAND_DEBUG_DATA ((!UE_BUILD_SHIPPING && !UE_BUILD_TEST) || VALIDATE_MESH_COMMAND_BINDINGS || WANTS_DRAW_MESH_EVENTS || WITH_DEBUG_VIEW_MODES)
137 case EMeshPass::HitProxy:
return TEXT(
"HitProxy");
138 case EMeshPass::HitProxyOpaqueOnly:
return TEXT(
"HitProxyOpaqueOnly");
139 case EMeshPass::EditorLevelInstance:
return TEXT(
"EditorLevelInstance");
140 case EMeshPass::EditorSelection:
return TEXT(
"EditorSelection");
145 static_assert(
EMeshPass::Num == 39 + 4,
"Need to update switch(MeshPass) after changing EMeshPass");
147 static_assert(
EMeshPass::Num == 39,
"Need to update switch(MeshPass) after changing EMeshPass");
181 return FMath::CountBits(
Data);
222#if PLATFORM_SUPPORTS_GEOMETRY_SHADERS
225#if PLATFORM_SUPPORTS_MESH_SHADERS
233#if PLATFORM_SUPPORTS_MESH_SHADERS
260#if PLATFORM_SUPPORTS_GEOMETRY_SHADERS
263#if PLATFORM_SUPPORTS_MESH_SHADERS
287#if PLATFORM_SUPPORTS_GEOMETRY_SHADERS
293#if PLATFORM_SUPPORTS_MESH_SHADERS
306#if PLATFORM_SUPPORTS_GEOMETRY_SHADERS
309#if PLATFORM_SUPPORTS_MESH_SHADERS
314#if PLATFORM_SUPPORTS_GEOMETRY_SHADERS
317#if PLATFORM_SUPPORTS_MESH_SHADERS
322#if PLATFORM_SUPPORTS_GEOMETRY_SHADERS
325#if PLATFORM_SUPPORTS_MESH_SHADERS
454 return !(*
this ==
rhs);
475#define COMPARE_FIELD_BEGIN(Field) \
476 if (Field != rhs.Field) \
477 { return Field COMPARE_OP rhs.Field; }
479#define COMPARE_FIELD(Field) \
480 else if (Field != rhs.Field) \
481 { return Field COMPARE_OP rhs.Field; }
483#define COMPARE_FIELD_END \
484 else { return false; }
495#if PLATFORM_SUPPORTS_GEOMETRY_SHADERS
520#if PLATFORM_SUPPORTS_GEOMETRY_SHADERS
536#undef COMPARE_FIELD_BEGIN
538#undef COMPARE_FIELD_END
591 return !(*
this ==
rhs);
604#if MESH_DRAW_COMMAND_DEBUG_DATA
605 checkf(Result.Value.RefNum && Result.Value.DebugSalt == DebugSalt,
TEXT(
"Pipeline state ID used after release. Call 'AddRefPersistentId' to ensure pipeline state doesn't get released while in use."));
629#if MESH_DRAW_COMMAND_DEBUG_DATA
630 return LocalPipelineIdTableSize;
646 return PersistentIdTable.
Num();
670 struct FRefCountedGraphicsMinimalPipelineState
672 FRefCountedGraphicsMinimalPipelineState() : RefNum(0)
674#if MESH_DRAW_COMMAND_DEBUG_DATA
675 DebugSalt = DebugSaltAllocationIndex++;
679 FRefCountedGraphicsMinimalPipelineState(
const FRefCountedGraphicsMinimalPipelineState&&
Other) :
680 RefNum(
Other.RefNum.load())
682#if MESH_DRAW_COMMAND_DEBUG_DATA
683 DebugSalt =
Other.DebugSalt;
687 std::atomic<uint32> RefNum;
688#if MESH_DRAW_COMMAND_DEBUG_DATA
693 static FRWLock PersistentIdTableLock;
695 static PersistentTableType PersistentIdTable;
696 static bool NeedsShaderInitialisation;
698 static bool bIsIdTableFrozen;
699 static std::atomic<int32> ReffedItemCount;
701#if MESH_DRAW_COMMAND_DEBUG_DATA
703 static std::atomic<int32> DebugSaltAllocationIndex;
704 static std::atomic<int32> LocalPipelineIdTableSize;
705 static std::atomic<int32> CurrentLocalPipelineIdTableSize;
763 checkf(0,
TEXT(
"Unhandled shader frequency"));
808#if MESH_DRAW_COMMAND_DEBUG_DATA
821#if PSO_PRECACHING_VALIDATE
827#if PSO_PRECACHING_VALIDATE
838#if MESH_DRAW_COMMAND_STATS
878 for (
int32 SlotIndex = 0; SlotIndex <=
ShaderBinding.MaxUniformBufferUsed; SlotIndex++)
892 for (
int32 SlotIndex = 0; SlotIndex <=
ShaderBinding.MaxUniformBufferUsed; SlotIndex++)
912 static_assert(
sizeof(ShaderFrequencyBits) * 8 >
SF_NumFrequencies,
"Please increase ShaderFrequencyBits size");
917 if (!UsesInlineStorage())
919 delete[] Data.GetHeapData();
922 ShaderFrequencyBits =
Other.ShaderFrequencyBits;
924 if (
Other.UsesInlineStorage())
930 Data.SetHeapData(
Other.Data.GetHeapData());
931 Other.Data.SetHeapData(
nullptr);
951 if (!UsesInlineStorage())
953 delete[] Data.GetHeapData();
956 ShaderFrequencyBits =
Other.ShaderFrequencyBits;
958 if (
Other.UsesInlineStorage())
964 Data.SetHeapData(
Other.Data.GetHeapData());
965 Other.Data.SetHeapData(
nullptr);
982#if DO_CHECK && !(UE_BUILD_TEST || UE_BUILD_SHIPPING)
997 checkf(0,
TEXT(
"Invalid shader binding frequency requested"));
1003 int32 DataOffset = 0;
1029 if (!UsesInlineStorage())
1043 if ((ShaderFrequencyBits & (1 << BindingIndex)) != 0)
1057 uint8* GetHeapData()
1059 return InlineStorage[0];
1061 const uint8* GetHeapData()
const
1063 return InlineStorage[0];
1065 void SetHeapData(
uint8* HeapData)
1067 InlineStorage[0] = HeapData;
1070 uint16 ShaderFrequencyBits = 0;
1075 check(Size == 0 && Data.GetHeapData() ==
nullptr);
1079 if (
InSize >
sizeof(FData))
1092 if (!UsesInlineStorage())
1098 inline bool UsesInlineStorage()
const
1100 return Size <=
sizeof(FData);
1105 return UsesInlineStorage() ?
reinterpret_cast<uint8*
>(&Data.InlineStorage[0]) : Data.GetHeapData();
1108 const uint8* GetData()
const
1110 return UsesInlineStorage() ?
reinterpret_cast<const uint8*
>(&Data.InlineStorage[0]) : Data.GetHeapData();
1133 Data = Bindings.Data;
1295 uint32 VertexBuffers = 0;
1296 uint32 VertexStreams = 0;
1311 return static_cast<uint32>(
reinterpret_cast<UPTRINT>(Key) >> 4);
1313 return reinterpret_cast<UPTRINT>(Key);
1319 return A ^ (
B + 0x9e3779b9 + (
A << 6) + (
A >> 2));
1334 HashKey.VertexStreams = FHashKey::HashCombine(HashKey.VertexStreams, Packed);
1335 HashKey.VertexBuffers = FHashKey::HashCombine(HashKey.VertexBuffers, FHashKey::PointerHash(
VertexInputStream.Pointer));
1338 HashKey.IndexBuffer = FHashKey::PointerHash(
IndexBuffer);
1345 HashKey.IndirectArgsBufferOrBaseVertexIndex =
VertexParams.BaseVertexIndex;
1350 HashKey.IndirectArgsBufferOrBaseVertexIndex = FHashKey::PointerHash(
IndirectArgs.Buffer);
1432 return Other.CachedPipelineId.GetId();
1434#if MESH_DRAW_COMMAND_DEBUG_DATA
1447#if MESH_DRAW_COMMAND_DEBUG_DATA
1448 return sizeof(DebugData);
1454#if MESH_DRAW_COMMAND_DEBUG_DATA
1468#if MESH_DRAW_COMMAND_STATS
1632 return (
uint32)(ScreenSize * (1 << 10)) & 0x1FFF;
1648 return CullingPayload;
1771 if (
A.SortKey !=
B.SortKey)
1773 return A.SortKey <
B.SortKey;
1777 if (
A.StateBucketId !=
B.StateBucketId)
1779 return A.StateBucketId <
B.StateBucketId;
1861 bool& NeedsShaderInitialisation;
1864#if PLATFORM_SUPPORTS_PRAGMA_PACK
1865 #pragma pack (push,4)
1909#if PLATFORM_SUPPORTS_PRAGMA_PACK
1950 return A.MatchesForDynamicInstancing(
B);
1956 return Key.GetDynamicInstancingHash();
2050 DeferredCommandHashes.
Reserve(DeferredCommands.
Max());
2074template<
typename VertexType,
typename PixelType,
typename GeometryType = FMeshMaterialShader,
typename RayTracingType = FMeshMaterialShader,
typename ComputeType = FMeshMaterialShader>
2081 UE_DEPRECATED(5.4,
"Compute shader mesh passes should use FMeshProcessorShaders directly instead of using TMeshProcessorShaders")
2084 UE_DEPRECATED(5.4,
"RayTracing shader mesh passes should use FMeshProcessorShaders directly instead of using TMeshProcessorShaders")
2147 return DepthStencilState;
2157 return DepthStencilAccess;
2208 UE_DEPRECATED(5.4,
"Use the below Ctor instead which provides either EMeshPass::Type or the name of the mesh pass directly.")
2246 template<
typename PassShadersType,
typename ShaderElementDataType>
2261 template<
typename PassShadersType>
2275 template<
typename PassShadersType>
2306#if PSO_PRECACHING_VALIDATE
2357 checkf(JumpTable[
ShadingPathIdx][PassType] || DeprecatedJumpTable[
ShadingPathIdx][PassType],
TEXT(
"Pass type %u create function was never registered for shading path %u. Use a FRegisterPassProcessorCreateFunction to register a create function for this enum value."), (
uint32)PassType,
ShadingPathIdx);
2406 FPassProcessorManager::JumpTable[
ShadingPathIdx][PassType] = CreateFunction;
2408 FPassProcessorManager::PSOCollectorIndex[
ShadingPathIdx][PassType] = PSOCollectorIndex;
2414 FPassProcessorManager::JumpTable[
ShadingPathIdx][PassType] =
nullptr;
2425#define REGISTER_MESHPASSPROCESSOR_AND_PSOCOLLECTOR(Name, MeshPassProcessorCreateFunction, ShadingPath, MeshPass, MeshPassFlags) \
2426 IPSOCollector* CreatePSOCollector##Name(ERHIFeatureLevel::Type FeatureLevel) \
2428 return MeshPassProcessorCreateFunction(FeatureLevel, nullptr, nullptr, nullptr); \
2430 FRegisterPSOCollectorCreateFunction RegisterPSOCollector##Name(&CreatePSOCollector##Name, ShadingPath, GetMeshPassName(MeshPass)); \
2431 FRegisterPassProcessorCreateFunction RegisterMeshPassProcesser##Name(&MeshPassProcessorCreateFunction, ShadingPath, MeshPass, MeshPassFlags, RegisterPSOCollector##Name.GetIndex());
2439 bool bDynamicInstancing,
2448 bool bDynamicInstancing,
2450 int32 NumMeshDrawCommands,
2459 bool& NeedsShaderInitialisation);
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
uint64 CityHash64(const char *s, uint32 len)
Definition CityHash.cpp:388
#define LIKELY(x)
Definition CityHash.cpp:107
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define FORCEINLINE_DEBUGGABLE
Definition CoreMiscDefines.h:74
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
@ InPlace
Definition CoreMiscDefines.h:162
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint64 RHIComputeStatePrecachePSOHash(const FGraphicsPipelineStateInitializer &Initializer)
Definition DynamicRHI.h:1386
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
EGBufferLayout
Definition GBufferInfo.h:107
@ GBL_Default
Definition GBufferInfo.h:108
RENDERER_API void SubmitMeshDrawCommands(const FMeshCommandOneFrameArray &VisibleMeshDrawCommands, const FGraphicsMinimalPipelineStateSet &GraphicsMinimalPipelineStateSet, const FMeshDrawCommandSceneArgs &SceneArgs, uint32 PrimitiveIdBufferStride, bool bDynamicInstancing, uint32 InstanceFactor, FRHICommandList &RHICmdList)
Definition MeshPassProcessor.cpp:1604
const TCHAR * GetMeshPassName(EMeshPass::Type MeshPass)
Definition MeshPassProcessor.h:93
EFVisibleMeshDrawCommandFlags
Definition MeshPassProcessor.h:1526
@ FetchInstanceCountFromScene
@ MaterialAlwaysEvaluatesWorldPositionOffset
@ MaterialUsesWorldPositionOffset
@ HasPrimitiveIdStreamIndex
EDrawingPolicyOverrideFlags
Definition MeshPassProcessor.h:2186
TMap< int32, FUniformBufferRHIRef, SceneRenderingSetAllocator > FTranslucentSelfShadowUniformBufferMap
Definition MeshPassProcessor.h:1794
#define COMPARE_FIELD_BEGIN(Field)
Definition MeshPassProcessor.h:475
EMeshPassFlags
Definition MeshPassProcessor.h:2342
EMeshPassFeatures
Definition MeshPassProcessor.h:2107
RENDERER_API void AddRenderTargetInfo(EPixelFormat PixelFormat, ETextureCreateFlags CreateFlags, FGraphicsPipelineRenderTargetsInfo &RenderTargetsInfo)
Definition MeshPassProcessor.cpp:2189
RENDERER_API void SetupDepthStencilInfo(EPixelFormat DepthStencilFormat, ETextureCreateFlags DepthStencilCreateFlags, ERenderTargetLoadAction DepthTargetLoadAction, ERenderTargetLoadAction StencilTargetLoadAction, FExclusiveDepthStencil DepthStencilAccess, FGraphicsPipelineRenderTargetsInfo &RenderTargetsInfo)
Definition MeshPassProcessor.cpp:2199
FMeshPassProcessor *(* PassProcessorCreateFunction)(ERHIFeatureLevel::Type FeatureLevel, const FScene *Scene, const FSceneView *InViewIfDynamicMeshCommand, FMeshPassDrawListContext *InDrawListContext)
Definition MeshPassProcessor.h:2339
RENDERER_API void ApplyTargetsInfo(FGraphicsPipelineStateInitializer &GraphicsPSOInit, const FGraphicsPipelineRenderTargetsInfo &RenderTargetsInfo)
Definition MeshPassProcessor.cpp:1473
#define COMPARE_FIELD(Field)
Definition MeshPassProcessor.h:479
RENDERER_API FMeshDrawCommandSortKey CalculateMeshStaticSortKey(const FMeshMaterialShader *VertexShader, const FMeshMaterialShader *PixelShader)
Definition MeshPassProcessor.cpp:1772
TArray< FVisibleMeshDrawCommand, SceneRenderingAllocator > FMeshCommandOneFrameArray
Definition MeshPassProcessor.h:1793
const int32 NumInlineShaderBindings
Definition MeshPassProcessor.h:801
Experimental::TRobinHoodHashSet< FGraphicsMinimalPipelineStateInitializer > FGraphicsMinimalPipelineStateSet
Definition MeshPassProcessor.h:566
RENDERER_API ESubpassHint GetSubpassHint(const FStaticShaderPlatform Platform, bool bIsUsingGBuffers, bool bMultiViewRendering, uint32 NumSamples)
Definition MeshPassProcessor.cpp:1493
void ApplyViewOverridesToMeshDrawCommands(const FSceneView &View, FMeshCommandOneFrameArray &VisibleMeshDrawCommands, FDynamicMeshDrawCommandStorage &DynamicMeshDrawCommandStorage, FGraphicsMinimalPipelineStateSet &GraphicsMinimalPipelineStateSet, bool &NeedsShaderInitialisation)
Definition MeshPassProcessor.cpp:1649
EMeshDrawCommandCullingPayloadFlags
Definition MeshPassProcessor.h:1655
#define COMPARE_FIELD_END
Definition MeshPassProcessor.h:483
FMeshPassProcessor *(* DeprecatedPassProcessorCreateFunction)(const FScene *Scene, const FSceneView *InViewIfDynamicMeshCommand, FMeshPassDrawListContext *InDrawListContext)
Definition MeshPassProcessor.h:2338
RENDERER_API void SetupGBufferRenderTargetInfo(const FSceneTexturesConfig &SceneTexturesConfig, FGraphicsPipelineRenderTargetsInfo &RenderTargetsInfo, bool bSetupDepthStencil, EGBufferLayout Layout=GBL_Default)
Definition MeshPassProcessor.cpp:2220
void SubmitMeshDrawCommandsRange(const FMeshCommandOneFrameArray &VisibleMeshDrawCommands, const FGraphicsMinimalPipelineStateSet &GraphicsMinimalPipelineStateSet, const FMeshDrawCommandSceneArgs &SceneArgs, uint32 PrimitiveIdBufferStride, bool bDynamicInstancing, int32 StartIndex, int32 NumMeshDrawCommands, uint32 InstanceFactor, FRHICommandList &RHICmdList)
Definition MeshPassProcessor.cpp:1616
RENDERER_API void DrawDynamicMeshPassPrivate(const FSceneView &View, FRHICommandList &RHICmdList, FMeshCommandOneFrameArray &VisibleMeshDrawCommands, FDynamicMeshDrawCommandStorage &DynamicMeshDrawCommandStorage, FGraphicsMinimalPipelineStateSet &GraphicsMinimalPipelineStateSet, bool &InNeedsShaderInitialisation, uint32 InstanceFactor)
Definition MeshPassProcessor.cpp:1729
EPSOPrecacheResult
Definition PipelineStateCache.h:55
ERayTracingLocalShaderBindingType
Definition RHICommandList.h:259
EShaderFrequency
Definition RHIDefinitions.h:202
@ SF_Compute
Definition RHIDefinitions.h:208
@ SF_NumFrequencies
Definition RHIDefinitions.h:216
@ SF_Vertex
Definition RHIDefinitions.h:203
@ SF_Geometry
Definition RHIDefinitions.h:207
@ SF_RayCallable
Definition RHIDefinitions.h:212
@ SF_RayMiss
Definition RHIDefinitions.h:210
@ SF_RayHitGroup
Definition RHIDefinitions.h:211
@ SF_WorkGraphComputeNode
Definition RHIDefinitions.h:214
@ SF_Pixel
Definition RHIDefinitions.h:206
@ SF_NumStandardFrequencies
Definition RHIDefinitions.h:222
@ MAX_UNIFORM_BUFFER_STATIC_SLOTS
Definition RHIDefinitions.h:727
@ MaxSimultaneousRenderTargets
Definition RHIDefinitions.h:287
@ MaxVertexElementCount
Definition RHIDefinitions.h:276
ERasterizerCullMode
Definition RHIDefinitions.h:369
@ ERasterizerCullMode_Num
Definition RHIDefinitions.h:374
@ ERasterizerCullMode_NumBits
Definition RHIDefinitions.h:375
@ CM_CCW
Definition RHIDefinitions.h:372
@ CM_CW
Definition RHIDefinitions.h:371
@ CM_None
Definition RHIDefinitions.h:370
#define TexCreate_None
Definition RHIDefinitions.h:1191
uint8 FUniformBufferStaticSlot
Definition RHIDefinitions.h:722
ETextureCreateFlags
Definition RHIDefinitions.h:1091
ERenderTargetLoadAction
Definition RHIDefinitions.h:1253
ERasterizerFillMode
Definition RHIDefinitions.h:358
@ ERasterizerFillMode_Num
Definition RHIDefinitions.h:363
@ ERasterizerFillMode_NumBits
Definition RHIDefinitions.h:364
EPrimitiveType
Definition RHIDefinitions.h:822
@ PT_NumBits
Definition RHIDefinitions.h:847
@ PT_TriangleList
Definition RHIDefinitions.h:824
@ PT_Num
Definition RHIDefinitions.h:846
EVRSShadingRate
Definition RHIDefinitions.h:860
@ VRSSR_1x1
Definition RHIDefinitions.h:861
ESubpassHint
Definition RHIResources.h:4526
EShadingPath
Definition SceneUtils.h:24
@ SLT_ReadOnly
Definition ScopeRWLock.h:138
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
uint32 PointerHash(const void *Key)
Definition TypeHash.h:91
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Size
Definition VulkanMemory.cpp:4034
int32 Num() const
Definition RobinHoodHashTable.h:847
SizeType GetAllocatedSize() const
Definition RobinHoodHashTable.h:842
ElementType & GetByElementId(FHashElementId Id)
Definition RobinHoodHashTable.h:857
Definition RobinHoodHashTable.h:1135
Definition MeshPassProcessor.h:1873
int32 StateBucketId
Definition MeshPassProcessor.h:1894
ERasterizerCullMode MeshCullMode
Definition MeshPassProcessor.h:1904
EFVisibleMeshDrawCommandFlags Flags
Definition MeshPassProcessor.h:1906
FMeshDrawCommandCullingPayload CullingPayload
Definition MeshPassProcessor.h:1897
int32 CommandIndex
Definition MeshPassProcessor.h:1891
FMeshDrawCommandSortKey SortKey
Definition MeshPassProcessor.h:1888
FCachedMeshDrawCommandInfo(EMeshPass::Type InMeshPass)
Definition MeshPassProcessor.h:1878
ERasterizerFillMode MeshFillMode
Definition MeshPassProcessor.h:1903
FCachedMeshDrawCommandInfo()
Definition MeshPassProcessor.h:1875
EMeshPass::Type MeshPass
Definition MeshPassProcessor.h:1900
Definition MeshPassProcessor.h:2039
FCachedPassMeshDrawListContextDeferred(FScene &InScene)
Definition MeshPassProcessor.h:2041
virtual void ReserveMemoryForCommands(int32 MaxCommandsExpected) override final
Definition MeshPassProcessor.h:2043
virtual void FinalizeCommand(const FMeshBatch &MeshBatch, int32 BatchElementIndex, const FMeshDrawCommandPrimitiveIdInfo &IdInfo, ERasterizerFillMode MeshFillMode, ERasterizerCullMode MeshCullMode, FMeshDrawCommandSortKey SortKey, EFVisibleMeshDrawCommandFlags Flags, const FGraphicsMinimalPipelineStateInitializer &PipelineState, const FMeshProcessorShaders *ShadersForDebugging, FMeshDrawCommand &MeshDrawCommand) override final
Definition MeshPassProcessor.cpp:2081
void DeferredFinalizeMeshDrawCommands(const TArrayView< FPrimitiveSceneInfo * > &SceneInfos, int32 Start, int32 End)
Definition MeshPassProcessor.cpp:2123
Definition MeshPassProcessor.h:2021
virtual void FinalizeCommand(const FMeshBatch &MeshBatch, int32 BatchElementIndex, const FMeshDrawCommandPrimitiveIdInfo &IdInfo, ERasterizerFillMode MeshFillMode, ERasterizerCullMode MeshCullMode, FMeshDrawCommandSortKey SortKey, EFVisibleMeshDrawCommandFlags Flags, const FGraphicsMinimalPipelineStateInitializer &PipelineState, const FMeshProcessorShaders *ShadersForDebugging, FMeshDrawCommand &MeshDrawCommand) override final
Definition MeshPassProcessor.cpp:2032
FCachedPassMeshDrawListContextImmediate(FScene &InScene)
Definition MeshPassProcessor.h:2023
Definition MeshPassProcessor.h:1964
FCachedMeshDrawCommandInfo CommandInfo
Definition MeshPassProcessor.h:2014
bool HasAnyLooseParameterBuffers() const
Definition MeshPassProcessor.h:1998
virtual void ReserveMemoryForCommands(int32 MaxCommandsExpected)
Definition MeshPassProcessor.h:1988
EMeshPass::Type CurrMeshPass
Definition MeshPassProcessor.h:2015
FScene & Scene
Definition MeshPassProcessor.h:2012
bool bAnyLooseParameterBuffers
Definition MeshPassProcessor.h:2017
FCachedMeshDrawCommandInfo GetCommandInfoAndReset()
Definition MeshPassProcessor.cpp:1958
void BeginMeshPass(EMeshPass::Type MeshPass)
Definition MeshPassProcessor.cpp:1945
FMeshDrawCommand MeshDrawCommandForStateBucketing
Definition MeshPassProcessor.h:2013
void FinalizeCommandCommon(const FMeshBatch &MeshBatch, int32 BatchElementIndex, ERasterizerFillMode MeshFillMode, ERasterizerCullMode MeshCullMode, FMeshDrawCommandSortKey SortKey, EFVisibleMeshDrawCommandFlags Flags, const FGraphicsMinimalPipelineStateInitializer &PipelineState, const FMeshProcessorShaders *ShadersForDebugging, FMeshDrawCommand &MeshDrawCommand)
Definition MeshPassProcessor.cpp:1966
bool bUseGPUScene
Definition MeshPassProcessor.h:2016
void BeginMesh(int32 SceneInfoIndex, int32 MeshIndex)
void EndMeshPass()
Definition MeshPassProcessor.cpp:1952
virtual FMeshDrawCommand & AddCommand(FMeshDrawCommand &Initializer, uint32 NumElements) override final
Definition MeshPassProcessor.cpp:1929
Definition MeshPassProcessor.h:1914
TSparseArray< FMeshDrawCommand > MeshDrawCommands
Definition MeshPassProcessor.h:1922
FCachedPassMeshDrawList()
Definition MeshPassProcessor.h:1917
int32 LowestFreeIndexSearchStart
Definition MeshPassProcessor.h:1923
Definition MeshPassProcessor.h:1692
TChunkedArray< FMeshDrawCommand > MeshDrawCommands
Definition MeshPassProcessor.h:1695
Definition MeshPassProcessor.h:1798
virtual void FinalizeCommand(const FMeshBatch &MeshBatch, int32 BatchElementIndex, const FMeshDrawCommandPrimitiveIdInfo &IdInfo, ERasterizerFillMode MeshFillMode, ERasterizerCullMode MeshCullMode, FMeshDrawCommandSortKey SortKey, EFVisibleMeshDrawCommandFlags Flags, const FGraphicsMinimalPipelineStateInitializer &PipelineState, const FMeshProcessorShaders *ShadersForDebugging, FMeshDrawCommand &MeshDrawCommand) override final
Definition MeshPassProcessor.h:1820
FDynamicPassMeshDrawListContext(FDynamicMeshDrawCommandStorage &InDrawListStorage, FMeshCommandOneFrameArray &InDrawList, FGraphicsMinimalPipelineStateSet &InPipelineStateSet, bool &InNeedsShaderInitialisation)
Definition MeshPassProcessor.h:1801
FORCEINLINE void AddVisibleMeshDrawCommand(const FVisibleMeshDrawCommand &VisibleMeshDrawCommand)
Definition MeshPassProcessor.h:1852
virtual FMeshDrawCommand & AddCommand(FMeshDrawCommand &Initializer, uint32 NumElements) override final
Definition MeshPassProcessor.h:1813
Definition RHIResources.h:409
Type
Definition RHIResources.h:412
@ DepthRead_StencilRead
Definition RHIResources.h:429
@ DepthNop
Definition RHIResources.h:415
Definition GPUScene.h:217
Definition MeshPassProcessor.h:570
static int32 GetLocalPipelineIdTableSize()
Definition MeshPassProcessor.h:627
uint32 bValid
Definition MeshPassProcessor.h:666
uint32 PackedId
Definition MeshPassProcessor.h:660
bool operator==(const FGraphicsMinimalPipelineStateId &rhs) const
Definition MeshPassProcessor.h:584
const FGraphicsMinimalPipelineStateInitializer & GetPipelineState(const FGraphicsMinimalPipelineStateSet &InPipelineSet) const
Definition MeshPassProcessor.h:594
static void InitializePersistentIds()
Definition MeshPassProcessor.cpp:489
static void AddSizeToLocalPipelineIdTableSize(SIZE_T Size)
Definition MeshPassProcessor.cpp:598
static void ResetLocalPipelineIdTableSize()
Definition MeshPassProcessor.cpp:585
static void FreezeIdTable(bool bEnable)
Definition MeshPassProcessor.cpp:525
static SIZE_T GetPersistentIdTableSize()
Definition MeshPassProcessor.h:638
static void RemovePersistentId(FGraphicsMinimalPipelineStateId Id)
Definition MeshPassProcessor.cpp:504
uint32 SetElementIndex
Definition MeshPassProcessor.h:664
static FGraphicsMinimalPipelineStateId GetPersistentId(const FGraphicsMinimalPipelineStateInitializer &InPipelineState)
Definition MeshPassProcessor.cpp:433
bool operator!=(const FGraphicsMinimalPipelineStateId &rhs) const
Definition MeshPassProcessor.h:589
static int32 GetPersistentIdNum()
Definition MeshPassProcessor.h:643
static RENDERER_API FGraphicsMinimalPipelineStateId GetPipelineStateId(const FGraphicsMinimalPipelineStateInitializer &InPipelineState, FGraphicsMinimalPipelineStateSet &InOutPassSet, bool &NeedsShaderInitialisation)
Definition MeshPassProcessor.cpp:560
uint32 bComesFromLocalPipelineStateSet
Definition MeshPassProcessor.h:665
FORCEINLINE_DEBUGGABLE uint32 GetId() const
Definition MeshPassProcessor.h:572
bool IsValid() const
Definition MeshPassProcessor.h:578
Definition MeshPassProcessor.h:337
FGraphicsPipelineStateInitializer AsGraphicsPipelineStateInitializer() const
Definition MeshPassProcessor.h:386
uint64 StatePrecachePSOHash
Definition MeshPassProcessor.h:558
FGraphicsMinimalPipelineStateInitializer(FMinimalBoundShaderStateInput InBoundShaderState, FRHIBlendState *InBlendState, FRHIRasterizerState *InRasterizerState, FRHIDepthStencilState *InDepthStencilState, FImmutableSamplerState InImmutableSamplerState, EPrimitiveType InPrimitiveType)
Definition MeshPassProcessor.h:350
friend uint32 GetTypeHash(const FGraphicsMinimalPipelineStateInitializer &Initializer)
Definition MeshPassProcessor.h:457
bool operator!=(const FGraphicsMinimalPipelineStateInitializer &rhs) const
Definition MeshPassProcessor.h:452
bool operator<(const FGraphicsMinimalPipelineStateInitializer &rhs) const
Definition MeshPassProcessor.h:486
RENDERER_API void SetupBoundShaderState(FRHIVertexDeclaration *VertexDeclaration, const FMeshProcessorShaders &Shaders)
Definition MeshPassProcessor.cpp:858
FImmutableSamplerState ImmutableSamplerState
Definition MeshPassProcessor.h:546
EPSOPrecacheResult PSOPrecacheState
Definition MeshPassProcessor.h:560
bool operator==(const FGraphicsMinimalPipelineStateInitializer &rhs) const
Definition MeshPassProcessor.h:426
bool operator>(const FGraphicsMinimalPipelineStateInitializer &rhs) const
Definition MeshPassProcessor.h:511
FGraphicsMinimalPipelineStateInitializer()
Definition MeshPassProcessor.h:343
bool bDepthBounds
Definition MeshPassProcessor.h:551
RENDERER_API void ComputeStatePrecachePSOHash()
Definition MeshPassProcessor.cpp:890
EVRSShadingRate DrawShadingRate
Definition MeshPassProcessor.h:553
FRHIBlendState * BlendState
Definition MeshPassProcessor.h:543
EPrimitiveType PrimitiveType
Definition MeshPassProcessor.h:555
FRHIRasterizerState * RasterizerState
Definition MeshPassProcessor.h:544
FRHIDepthStencilState * DepthStencilState
Definition MeshPassProcessor.h:545
bool bAllowVariableRateShading
Definition MeshPassProcessor.h:552
FMinimalBoundShaderStateInput BoundShaderState
Definition MeshPassProcessor.h:542
FGraphicsMinimalPipelineStateInitializer(const FGraphicsMinimalPipelineStateInitializer &InMinimalState)
Definition MeshPassProcessor.h:367
Definition RHIResources.h:4572
FRHIBlendState * BlendState
Definition RHIResources.h:4755
uint64 StatePrecachePSOHash
Definition RHIResources.h:4816
FRHIDepthStencilState * DepthStencilState
Definition RHIResources.h:4757
Definition MaterialRenderProxy.h:102
Definition MaterialShared.h:2058
Definition MeshPassProcessor.h:1482
FORCEINLINE bool operator<(FMeshDrawCommandSortKey B) const
Definition MeshPassProcessor.h:1515
uint64 PackedData
Definition MeshPassProcessor.h:1486
struct FMeshDrawCommandSortKey::@1867::@1869 BasePass
struct FMeshDrawCommandSortKey::@1867::@1871 Generic
uint64 Priority
Definition MeshPassProcessor.h:1500
uint64 VertexShaderHash
Definition MeshPassProcessor.h:1490
uint64 Masked
Definition MeshPassProcessor.h:1493
struct FMeshDrawCommandSortKey::@1867::@1870 Translucent
FORCEINLINE bool operator!=(FMeshDrawCommandSortKey B) const
Definition MeshPassProcessor.h:1510
uint64 Background
Definition MeshPassProcessor.h:1492
uint64 Distance
Definition MeshPassProcessor.h:1499
uint64 PixelShaderHash
Definition MeshPassProcessor.h:1491
uint64 MeshIdInPrimitive
Definition MeshPassProcessor.h:1498
static RENDERER_API const FMeshDrawCommandSortKey Default
Definition MeshPassProcessor.h:39
Definition MeshPassProcessor.h:847
uint32 StencilRef
Definition MeshPassProcessor.h:851
FShaderBindingState ShaderBindings[SF_NumStandardFrequencies]
Definition MeshPassProcessor.h:852
FVertexInputStream VertexStreams[MaxVertexElementCount]
Definition MeshPassProcessor.h:853
void InvalidateUniformBuffer(const FRHIUniformBuffer *UniformBuffer)
Definition MeshPassProcessor.h:887
void SetPipelineState(int32 NewPipelineId)
Definition MeshPassProcessor.h:862
FMeshDrawCommandStateCache()
Definition MeshPassProcessor.h:855
uint32 PipelineId
Definition MeshPassProcessor.h:850
Definition MeshPassProcessor.h:1223
FMeshDrawCommand & operator=(const FMeshDrawCommand &Other)=default
uint32 Offset
Definition MeshPassProcessor.h:1256
uint32 NumVertices
Definition MeshPassProcessor.h:1250
void SetStencilRef(uint32 InStencilRef)
Definition MeshPassProcessor.h:1363
uint32 NumInstances
Definition MeshPassProcessor.h:1243
static void SubmitDrawIndirectEnd(const FMeshDrawCommand &MeshDrawCommand, const FMeshDrawCommandSceneArgs &SceneArgs, uint32 InstanceFactor, FRHICommandList &RHICmdList)
Definition MeshPassProcessor.cpp:1378
uint8 StencilRef
Definition MeshPassProcessor.h:1263
uint32 FirstIndex
Definition MeshPassProcessor.h:1241
void ClearDebugPrimitiveSceneProxy() const
Definition MeshPassProcessor.h:1455
int8 PrimitiveIdStreamIndex
Definition MeshPassProcessor.h:1260
void SetStatsData(const FPrimitiveSceneProxy *PrimitiveSceneProxy)
Definition MeshPassProcessor.h:1476
void InitializeShaderBindings(const FMeshProcessorShaders &Shaders)
Definition MeshPassProcessor.h:1358
FMeshDrawCommand(FMeshDrawCommand &&Other)=default
void Finalize(FGraphicsMinimalPipelineStateId PipelineId, const FMeshProcessorShaders *ShadersForDebugging)
Definition MeshPassProcessor.h:1377
FMeshDrawShaderBindings ShaderBindings
Definition MeshPassProcessor.h:1229
FVertexInputStreamArray VertexStreams
Definition MeshPassProcessor.h:1230
FRHIBuffer * Buffer
Definition MeshPassProcessor.h:1255
struct FMeshDrawCommand::@1863::@1865 VertexParams
RENDERER_API void SetDrawParametersAndFinalize(const FMeshBatch &MeshBatch, int32 BatchElementIndex, FGraphicsMinimalPipelineStateId PipelineId, const FMeshProcessorShaders *ShadersForDebugging)
Definition MeshPassProcessor.cpp:903
FRHIBuffer * IndexBuffer
Definition MeshPassProcessor.h:1231
EPrimitiveType PrimitiveType
Definition MeshPassProcessor.h:1266
FMeshDrawCommand & operator=(FMeshDrawCommand &&Other)=default
uint32 GetDynamicInstancingHash() const
Definition MeshPassProcessor.h:1289
uint32 BaseVertexIndex
Definition MeshPassProcessor.h:1249
const FMeshDrawCommandDebugData & GetDebugData() const
Definition MeshPassProcessor.h:1460
struct FMeshDrawCommand::@1863::@1866 IndirectArgs
FORCENOINLINE friend uint32 GetTypeHash(const FMeshDrawCommand &Other)
Definition MeshPassProcessor.h:1430
RENDERER_API void SetDebugData(const FPrimitiveSceneProxy *PrimitiveSceneProxy, const FMaterial *Material, const FMaterialRenderProxy *MaterialRenderProxy, const FMeshProcessorShaders &UntypedShaders, const FVertexFactory *VertexFactory, const FMeshBatch &MeshBatch, int32 PSOCollectorIndex)
bool MatchesForDynamicInstancing(const FMeshDrawCommand &Rhs) const
Definition MeshPassProcessor.h:1274
SIZE_T GetDebugDataSize() const
Definition MeshPassProcessor.h:1445
SIZE_T GetAllocatedSize() const
Definition MeshPassProcessor.h:1440
FMeshDrawCommand(const FMeshDrawCommand &Other)=default
uint32 NumPrimitives
Definition MeshPassProcessor.h:1242
static bool SubmitDrawIndirectBegin(const FMeshDrawCommand &RESTRICT MeshDrawCommand, const FGraphicsMinimalPipelineStateSet &GraphicsMinimalPipelineStateSet, const FMeshDrawCommandSceneArgs &SceneArgs, uint32 InstanceFactor, FRHICommandList &RHICmdList, FMeshDrawCommandStateCache &RESTRICT StateCache, bool bAllowSkipDrawCommand)
Definition MeshPassProcessor.cpp:1358
static bool SubmitDraw(const FMeshDrawCommand &RESTRICT MeshDrawCommand, const FGraphicsMinimalPipelineStateSet &GraphicsMinimalPipelineStateSet, const FMeshDrawCommandSceneArgs &SceneArgs, uint32 InstanceFactor, FRHICommandList &CommandList, class FMeshDrawCommandStateCache &RESTRICT StateCache)
Definition MeshPassProcessor.cpp:1447
uint64 GetPipelineStateSortingKey(FRHICommandList &RHICmdList, const FGraphicsPipelineRenderTargetsInfo &RenderTargetsInfo) const
Definition MeshPassProcessor.cpp:1512
FGraphicsMinimalPipelineStateId CachedPipelineId
Definition MeshPassProcessor.h:1236
static bool SubmitDrawBegin(const FMeshDrawCommand &RESTRICT MeshDrawCommand, const FGraphicsMinimalPipelineStateSet &GraphicsMinimalPipelineStateSet, const FMeshDrawCommandSceneArgs &SceneArgs, uint32 InstanceFactor, FRHICommandList &RHICmdList, FMeshDrawCommandStateCache &RESTRICT StateCache, bool bAllowSkipDrawCommand)
Definition MeshPassProcessor.cpp:1218
static void SubmitDrawEnd(const FMeshDrawCommand &MeshDrawCommand, const FMeshDrawCommandSceneArgs &SceneArgs, uint32 InstanceFactor, FRHICommandList &RHICmdList)
Definition MeshPassProcessor.cpp:1302
FMeshDrawCommand()
Definition MeshPassProcessor.h:1268
Definition MeshDrawShaderBindings.h:17
uint32 GetSRVOffset() const
Definition MeshDrawShaderBindings.h:82
uint32 GetLooseDataOffset() const
Definition MeshDrawShaderBindings.h:94
uint32 GetSRVTypeOffset() const
Definition MeshDrawShaderBindings.h:88
uint32 GetUniformBufferOffset() const
Definition MeshDrawShaderBindings.h:72
uint32 GetSamplerOffset() const
Definition MeshDrawShaderBindings.h:77
Definition MeshPassProcessor.h:908
void GetShaderFrequencies(TArray< EShaderFrequency, TInlineAllocator< SF_NumFrequencies > > &OutShaderFrequencies) const
Definition MeshPassProcessor.h:1037
RENDERER_API void SetParameters(FRHIBatchedShaderParameters &BatchedParameters, class FShaderBindingState *StateCacheShaderBindings=nullptr) const
Definition MeshPassProcessor.cpp:996
FORCEINLINE FMeshDrawSingleShaderBindings GetSingleShaderBindings(EShaderFrequency Frequency, int32 &DataOffset)
Definition MeshPassProcessor.h:978
RENDERER_API void SetOnCommandList(FRHICommandList &RHICmdList, const FBoundShaderStateInput &Shaders, class FShaderBindingState *StateCacheShaderBindings) const
Definition MeshPassProcessor.cpp:948
FMeshDrawShaderBindings & operator=(FMeshDrawShaderBindings &&Other)
Definition MeshPassProcessor.h:949
FORCEINLINE FMeshDrawSingleShaderBindings GetSingleShaderBindings(EShaderFrequency Frequency)
Definition MeshPassProcessor.h:1001
int32 GetDataSize() const
Definition MeshPassProcessor.h:1050
FMeshDrawShaderBindings(FMeshDrawShaderBindings &&Other)
Definition MeshPassProcessor.h:915
FMeshDrawShaderBindings(const FMeshDrawShaderBindings &Other)
Definition MeshPassProcessor.h:936
bool RENDERER_API MatchesForDynamicInstancing(const FMeshDrawShaderBindings &Rhs) const
Definition MeshPassProcessor.cpp:1018
FMeshDrawShaderBindings & operator=(const FMeshDrawShaderBindings &Other)
Definition MeshPassProcessor.h:943
RENDERER_API void Finalize(const FMeshProcessorShaders *ShadersForDebugging)
Definition MeshPassProcessor.cpp:711
uint32 RENDERER_API GetDynamicInstancingHash() const
Definition MeshPassProcessor.cpp:1108
RENDERER_API void Initialize(const FMeshProcessorShaders &Shaders)
Definition MeshPassProcessor.cpp:610
RENDERER_API ~FMeshDrawShaderBindings()
Definition MeshPassProcessor.cpp:605
FMeshDrawShaderBindings()
Definition MeshPassProcessor.h:910
SIZE_T GetAllocatedSize() const
Definition MeshPassProcessor.h:1026
Definition MeshDrawShaderBindings.h:104
Definition MeshMaterialShader.h:68
Definition MeshPassProcessor.h:1670
virtual void FinalizeCommand(const FMeshBatch &MeshBatch, int32 BatchElementIndex, const FMeshDrawCommandPrimitiveIdInfo &IdInfo, ERasterizerFillMode MeshFillMode, ERasterizerCullMode MeshCullMode, FMeshDrawCommandSortKey SortKey, EFVisibleMeshDrawCommandFlags Flags, const FGraphicsMinimalPipelineStateInitializer &PipelineState, const FMeshProcessorShaders *ShadersForDebugging, FMeshDrawCommand &MeshDrawCommand)=0
virtual FMeshDrawCommand & AddCommand(FMeshDrawCommand &Initializer, uint32 NumElements)=0
virtual ~FMeshPassDrawListContext()
Definition MeshPassProcessor.h:1673
Definition MeshPassProcessor.h:156
uint64 Data
Definition MeshPassProcessor.h:199
void Set(EMeshPass::Type Pass)
Definition MeshPassProcessor.h:163
bool Get(EMeshPass::Type Pass) const
Definition MeshPassProcessor.h:168
void AppendTo(FMeshPassMask &Mask) const
Definition MeshPassProcessor.h:184
FMeshPassMask()
Definition MeshPassProcessor.h:158
void Reset()
Definition MeshPassProcessor.h:189
bool IsEmpty() const
Definition MeshPassProcessor.h:194
EMeshPass::Type SkipEmpty(EMeshPass::Type Pass) const
Definition MeshPassProcessor.h:173
int GetNum()
Definition MeshPassProcessor.h:179
Definition MeshPassProcessor.h:2199
static RENDERER_API ERasterizerFillMode ComputeMeshFillMode(const FMaterial &InMaterialResource, const FMeshDrawingPolicyOverrideSettings &InOverrideSettings)
Definition MeshPassProcessor.cpp:1823
RENDERER_API bool HardwareVariableRateShadingSupportedByScene() const
Definition MeshPassProcessor.cpp:1906
const FScene *RESTRICT Scene
Definition MeshPassProcessor.h:2203
const FSceneView * ViewIfDynamicMeshCommand
Definition MeshPassProcessor.h:2205
EMeshPass::Type MeshPassType
Definition MeshPassProcessor.h:2202
RENDERER_API bool PipelineVariableRateShadingEnabled() const
Definition MeshPassProcessor.cpp:1901
static FORCEINLINE_DEBUGGABLE ERasterizerCullMode InverseCullMode(ERasterizerCullMode CullMode)
Definition MeshPassProcessor.h:2229
virtual void CollectPSOInitializers(const FSceneTexturesConfig &SceneTexturesConfig, const FMaterial &Material, const FPSOPrecacheVertexFactoryData &VertexFactoryData, const FPSOPrecacheParams &PreCacheParams, TArray< FPSOPrecacheData > &PSOInitializers) override
Definition MeshPassProcessor.h:2227
void BuildMeshDrawCommands(const FMeshBatch &RESTRICT MeshBatch, uint64 BatchElementMask, const FPrimitiveSceneProxy *RESTRICT PrimitiveSceneProxy, const FMaterialRenderProxy &RESTRICT MaterialRenderProxy, const FMaterial &RESTRICT MaterialResource, const FMeshPassProcessorRenderState &RESTRICT DrawRenderState, const PassShadersType &PassShaders, ERasterizerFillMode MeshFillMode, ERasterizerCullMode MeshCullMode, FMeshDrawCommandSortKey SortKey, EMeshPassFeatures MeshPassFeatures, const ShaderElementDataType &ShaderElementData)
Definition MeshPassProcessor.inl:50
static RENDERER_API FMeshDrawingPolicyOverrideSettings ComputeMeshOverrideSettings(const FPSOPrecacheParams &PrecachePSOParams)
Definition MeshPassProcessor.cpp:1801
virtual ~FMeshPassProcessor()
Definition MeshPassProcessor.h:2215
void AddGraphicsPipelineStateInitializer(const FPSOPrecacheVertexFactoryData &VertexFactoryData, const FMaterial &RESTRICT MaterialResource, const FMeshPassProcessorRenderState &RESTRICT DrawRenderState, const FGraphicsPipelineRenderTargetsInfo &RESTRICT RenderTargetsInfo, const PassShadersType &PassShaders, ERasterizerFillMode MeshFillMode, ERasterizerCullMode MeshCullMode, EPrimitiveType PrimitiveType, EMeshPassFeatures MeshPassFeatures, bool bRequired, TArray< FPSOPrecacheData > &PSOInitializers)
Definition MeshPassProcessor.inl:211
ERHIFeatureLevel::Type FeatureLevel
Definition MeshPassProcessor.h:2204
void SetDrawListContext(FMeshPassDrawListContext *InDrawListContext)
Definition MeshPassProcessor.h:2217
static RENDERER_API ERasterizerCullMode ComputeMeshCullMode(const FMaterial &InMaterialResource, const FMeshDrawingPolicyOverrideSettings &InOverrideSettings)
Definition MeshPassProcessor.cpp:1830
FMeshPassDrawListContext * DrawListContext
Definition MeshPassProcessor.h:2206
virtual void AddMeshBatch(const FMeshBatch &RESTRICT MeshBatch, uint64 BatchElementMask, const FPrimitiveSceneProxy *RESTRICT PrimitiveSceneProxy, int32 StaticMeshId=-1)=0
RENDERER_API FMeshDrawCommandPrimitiveIdInfo GetDrawCommandPrimitiveId(const FPrimitiveSceneInfo *RESTRICT PrimitiveSceneInfo, const FMeshBatchElement &BatchElement) const
Definition MeshPassProcessor.cpp:1840
RENDERER_API bool ShouldSkipMeshDrawCommand(const FMeshBatch &RESTRICT MeshBatch, const FPrimitiveSceneProxy *RESTRICT PrimitiveSceneProxy) const
Definition MeshPassProcessor.cpp:1874
Definition NameTypes.h:617
Definition MeshPassProcessor.h:2350
static EMeshPassFlags GetPassFlags(EShadingPath ShadingPath, EMeshPass::Type PassType)
Definition MeshPassProcessor.h:2368
static void SetPassFlags(EShadingPath ShadingPath, EMeshPass::Type PassType, EMeshPassFlags NewFlags)
Definition MeshPassProcessor.cpp:2179
static int32 GetPSOCollectorIndex(EShadingPath ShadingPath, EMeshPass::Type PassType)
Definition MeshPassProcessor.h:2375
static FMeshPassProcessor * CreateMeshPassProcessor(EShadingPath ShadingPath, EMeshPass::Type PassType, ERHIFeatureLevel::Type FeatureLevel, const FScene *Scene, const FSceneView *InViewIfDynamicMeshCommand, FMeshPassDrawListContext *InDrawListContext)
Definition MeshPassProcessor.h:2353
Definition PrimitiveSceneInfo.h:266
Definition PrimitiveSceneProxy.h:296
Definition RHIResources.h:696
Definition RHIResources.h:1581
Definition RHICommandList.h:3819
Definition RHICommandList.h:2735
Definition RHIResources.h:1018
Definition RHIResources.h:686
Definition RHIResources.h:978
Definition RHIResources.h:960
Definition RHIResources.h:972
Definition RHIResources.h:679
Definition RHIResources.h:3729
Definition RHIResources.h:54
Definition RHIResources.h:671
Definition RHIResources.h:3863
Definition RHIResources.h:854
Definition RHIResources.h:725
Definition RHIResources.h:954
Definition ScopeRWLock.h:199
Definition PipelineStateCache.cpp:1285
Definition MeshPassProcessor.h:1119
FReadOnlyMeshDrawSingleShaderBindings(const FMeshDrawSingleShaderBindings &Bindings)
Definition MeshPassProcessor.h:1130
FReadOnlyMeshDrawSingleShaderBindings(const FMeshDrawShaderBindingsLayout &InLayout, const uint8 *InData)
Definition MeshPassProcessor.h:1136
FRHIUniformBuffer *const * GetUniformBufferStart() const
Definition MeshPassProcessor.h:1142
const uint8 * GetSRVTypeStart() const
Definition MeshPassProcessor.h:1159
static RENDERER_API void SetShaderBindings(FRHIBatchedShaderParameters &BatchedParameters, const class FReadOnlyMeshDrawSingleShaderBindings &RESTRICT SingleShaderBindings, FShaderBindingState &RESTRICT ShaderBindingState)
const uint8 * GetLooseDataStart() const
Definition MeshPassProcessor.h:1165
static RENDERER_API void SetShaderBindings(FRHIBatchedShaderParameters &BatchedParameters, const class FReadOnlyMeshDrawSingleShaderBindings &RESTRICT SingleShaderBindings)
FRHIResource ** GetSRVStart() const
Definition MeshPassProcessor.h:1153
FRHISamplerState ** GetSamplerStart() const
Definition MeshPassProcessor.h:1147
Definition MeshPassProcessor.h:2399
~FRegisterPassProcessorCreateFunction()
Definition MeshPassProcessor.h:2411
FRegisterPassProcessorCreateFunction(PassProcessorCreateFunction CreateFunction, EShadingPath InShadingPath, EMeshPass::Type InPassType, EMeshPassFlags PassFlags, int32 PSOCollectorIndex=INDEX_NONE)
Definition MeshPassProcessor.h:2401
Definition SceneView.h:1425
Definition ScenePrivate.h:2875
Definition MeshPassProcessor.h:710
@ MAX_UNIFORM_BUFFERS_PER_STAGE
Definition MeshPassProcessor.h:712
FRHIUniformBuffer * UniformBuffers[MAX_UNIFORM_BUFFERS_PER_STAGE]
Definition MeshPassProcessor.h:715
int32 MaxUniformBufferUsed
Definition MeshPassProcessor.h:714
bool HasShader(int32 ShaderIndex) const
Definition Shader.h:359
FRHIShader * GetShader(int32 ShaderIndex, bool bRequired=true)
Definition Shader.h:399
Definition VertexFactory.h:314
Definition VertexFactory.h:661
Definition MeshPassProcessor.h:1703
const FMeshDrawCommand * MeshDrawCommand
Definition MeshPassProcessor.h:1736
ERasterizerFillMode MeshFillMode
Definition MeshPassProcessor.h:1760
FMeshDrawCommandPrimitiveIdInfo PrimitiveIdInfo
Definition MeshPassProcessor.h:1741
int32 StateBucketId
Definition MeshPassProcessor.h:1749
FMeshDrawCommandCullingPayload CullingPayload
Definition MeshPassProcessor.h:1756
int32 NumRuns
Definition MeshPassProcessor.h:1753
EFVisibleMeshDrawCommandFlags Flags
Definition MeshPassProcessor.h:1763
FORCEINLINE_DEBUGGABLE void Setup(const FMeshDrawCommand *InMeshDrawCommand, const FMeshDrawCommandPrimitiveIdInfo &InPrimitiveIdInfo, int32 InStateBucketId, ERasterizerFillMode InMeshFillMode, ERasterizerCullMode InMeshCullMode, EFVisibleMeshDrawCommandFlags InFlags, FMeshDrawCommandSortKey InSortKey, FMeshDrawCommandCullingPayload InCullingPayload, EMeshDrawCommandCullingPayloadFlags InCullingPayloadFlags, const uint32 *InRunArray=nullptr, int32 InNumRuns=0)
Definition MeshPassProcessor.h:1708
const uint32 * RunArray
Definition MeshPassProcessor.h:1752
ERasterizerCullMode MeshCullMode
Definition MeshPassProcessor.h:1761
EMeshDrawCommandCullingPayloadFlags CullingPayloadFlags
Definition MeshPassProcessor.h:1757
FMeshDrawCommandSortKey SortKey
Definition MeshPassProcessor.h:1739
int32 PrimitiveIdBufferOffset
Definition MeshPassProcessor.h:1744
Definition PSOPrecacheMaterial.h:24
int32 PSOCollectorIndex
Definition PSOPrecacheMaterial.h:42
Definition ArrayView.h:139
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_REWRITE SizeType Max() const
Definition Array.h:1161
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
UE_NODEBUG UE_FORCEINLINE_HINT SIZE_T GetAllocatedSize(void) const
Definition Array.h:1059
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition ChunkedArray.h:56
int32 AddElement(const ElementType &Item)
Definition ChunkedArray.h:193
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
Definition ContainerAllocationPolicies.h:894
Definition SparseArray.h:524
Definition StaticArray.h:26
Definition MeshPassProcessor.h:36
Type
Definition MeshPassProcessor.h:38
@ AnisotropyPass
Definition MeshPassProcessor.h:42
@ MeshDecal_SceneColor
Definition MeshPassProcessor.h:74
@ LumenFrontLayerTranslucencyGBuffer
Definition MeshPassProcessor.h:68
@ SingleLayerWaterPass
Definition MeshPassProcessor.h:44
@ LumenCardCapture
Definition MeshPassProcessor.h:65
@ SecondStageDepthPass
Definition MeshPassProcessor.h:40
@ NaniteMeshPass
Definition MeshPassProcessor.h:70
@ CSMShadowDepth
Definition MeshPassProcessor.h:46
@ SkyPass
Definition MeshPassProcessor.h:43
@ WaterInfoTexturePass
Definition MeshPassProcessor.h:77
@ TranslucentVelocity
Definition MeshPassProcessor.h:51
@ VirtualTexture
Definition MeshPassProcessor.h:64
@ DebugViewMode
Definition MeshPassProcessor.h:61
@ MeshDecal_DBuffer
Definition MeshPassProcessor.h:71
@ SingleLayerWaterDepthPrepass
Definition MeshPassProcessor.h:45
@ OnePassPointLightShadowDepth
Definition MeshPassProcessor.h:48
@ LumenTranslucencyRadianceCacheMark
Definition MeshPassProcessor.h:67
@ VSMShadowDepth
Definition MeshPassProcessor.h:47
@ TranslucentVelocityClippedDepth
Definition MeshPassProcessor.h:52
@ NumBits
Definition MeshPassProcessor.h:87
@ BasePass
Definition MeshPassProcessor.h:41
@ MeshDecal_SceneColorAndGBufferNoNormal
Definition MeshPassProcessor.h:73
@ TranslucencyAfterMotionBlur
Definition MeshPassProcessor.h:57
@ LumenCardNanite
Definition MeshPassProcessor.h:66
@ Distortion
Definition MeshPassProcessor.h:49
@ TranslucencyHoldout
Definition MeshPassProcessor.h:58
@ Num
Definition MeshPassProcessor.h:86
@ MeshDecal_SceneColorAndGBuffer
Definition MeshPassProcessor.h:72
@ Velocity
Definition MeshPassProcessor.h:50
@ WaterInfoTextureDepthPass
Definition MeshPassProcessor.h:76
@ TranslucencyAfterDOFModulate
Definition MeshPassProcessor.h:56
@ TranslucencyStandard
Definition MeshPassProcessor.h:53
@ TranslucencyAfterDOF
Definition MeshPassProcessor.h:55
@ TranslucencyStandardModulate
Definition MeshPassProcessor.h:54
@ DepthPass
Definition MeshPassProcessor.h:39
@ MobileBasePassCSM
Definition MeshPassProcessor.h:63
@ LightmapDensity
Definition MeshPassProcessor.h:60
@ MeshDecal_AmbientOcclusion
Definition MeshPassProcessor.h:75
@ CustomDepth
Definition MeshPassProcessor.h:62
@ DitheredLODFadingOutMaskPass
Definition MeshPassProcessor.h:69
@ TranslucencyAll
Definition MeshPassProcessor.h:59
Definition SceneComponent.h:24
Type
Definition RHIFeatureLevel.h:20
RHI_API bool IsPSOPrecachingEnabled()
Definition PipelineStateCache.cpp:4406
U16 Index
Definition radfft.cpp:71
Definition MeshPassProcessor.h:1967
FMeshPassScope & operator=(const FMeshPassScope &)=delete
FMeshPassScope(FCachedPassMeshDrawListContext &InContext, EMeshPass::Type MeshPass)
Definition MeshPassProcessor.h:1971
FMeshPassScope(const FMeshPassScope &)=delete
~FMeshPassScope()
Definition MeshPassProcessor.h:1977
Definition MeshPassProcessor.h:1767
FORCEINLINE bool operator()(const FVisibleMeshDrawCommand &A, const FVisibleMeshDrawCommand &B) const
Definition MeshPassProcessor.h:1768
Definition RHIResources.h:4547
Definition RHIImmutableSamplerState.h:17
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
Definition MeshBatch.h:232
Definition MeshBatch.h:371
Definition MeshPassProcessor.h:1927
std::atomic< uint32 > Num
Definition MeshPassProcessor.h:1940
FMeshDrawCommandCount(FMeshDrawCommandCount &&Other)
Definition MeshPassProcessor.h:1934
FMeshDrawCommandCount()
Definition MeshPassProcessor.h:1928
Definition MeshPassProcessor.h:1613
static float UnpackScreenSize(uint32 PackedScreenSize)
Definition MeshPassProcessor.h:1635
uint32 MaxScreenSize
Definition MeshPassProcessor.h:1621
uint32 MinScreenSize
Definition MeshPassProcessor.h:1620
uint32 PackedData
Definition MeshPassProcessor.h:1616
static uint32 PackScreenSize(float ScreenSize)
Definition MeshPassProcessor.h:1628
int32 DynamicMeshBoundsIndex
Definition MeshPassProcessor.h:1625
uint32 LodIndex
Definition MeshPassProcessor.h:1619
Definition MeshPassProcessor.h:807
FName ResourceName
Definition MeshPassProcessor.h:826
TShaderRef< FShader > PixelShader
Definition MeshPassProcessor.h:811
FString MaterialRenderProxyName
Definition MeshPassProcessor.h:818
int32 SegmentIndex
Definition MeshPassProcessor.h:831
const FPrimitiveSceneProxy * PrimitiveSceneProxyIfNotUsingStateBuckets
Definition MeshPassProcessor.h:814
TShaderRef< FShader > VertexShader
Definition MeshPassProcessor.h:810
int8 LODIndex
Definition MeshPassProcessor.h:830
const FMaterialRenderProxy * MaterialRenderProxyIfNotUsingStateBuckets
Definition MeshPassProcessor.h:815
const FMaterial * Material
Definition MeshPassProcessor.h:820
Definition MeshPassProcessor.h:1176
FRHIBuffer * InstanceBuffer
Definition MeshPassProcessor.h:1177
FRHIUniformBuffer * InstanceCullingStaticUB
Definition MeshPassProcessor.h:1179
FMeshDrawCommandOverrideArgs()
Definition MeshPassProcessor.h:1184
TOptional< FUintVector4 > RootConstants
Definition MeshPassProcessor.h:1182
FRHIBuffer * IndirectArgsBuffer
Definition MeshPassProcessor.h:1178
uint32 IndirectArgsByteOffset
Definition MeshPassProcessor.h:1181
uint32 InstanceDataByteOffset
Definition MeshPassProcessor.h:1180
Definition MeshPassProcessor.h:1573
int32 DrawPrimitiveId
Definition MeshPassProcessor.h:1597
FORCEINLINE FMeshDrawCommandPrimitiveIdInfo(int32 InScenePrimitiveId, FPersistentPrimitiveIndex InDrawPrimitiveId, int32 InInstanceSceneDataOffset)
Definition MeshPassProcessor.h:1577
int32 ScenePrimitiveId
Definition MeshPassProcessor.h:1600
int32 InstanceSceneDataOffset
Definition MeshPassProcessor.h:1603
uint32 bIsDynamicPrimitive
Definition MeshPassProcessor.h:1606
FORCEINLINE FMeshDrawCommandPrimitiveIdInfo()
Definition MeshPassProcessor.h:1574
Definition MeshPassProcessor.h:1195
FRHIBuffer * PrimitiveIdsBuffer
Definition MeshPassProcessor.h:1196
FMeshDrawCommandSceneArgs()
Definition MeshPassProcessor.h:1203
FUniformBufferStaticSlot BatchedPrimitiveSlot
Definition MeshPassProcessor.h:1200
uint32 PrimitiveIdOffset
Definition MeshPassProcessor.h:1198
FRHIBuffer * IndirectArgsBuffer
Definition MeshPassProcessor.h:1197
TOptional< FUintVector4 > RootConstants
Definition MeshPassProcessor.h:1201
uint32 IndirectArgsByteOffset
Definition MeshPassProcessor.h:1199
Definition MeshPassProcessor.h:837
Definition MeshPassProcessor.h:2118
FORCEINLINE_DEBUGGABLE void SetStencilRef(uint32 InStencilRef)
Definition MeshPassProcessor.h:2140
FORCEINLINE_DEBUGGABLE void SetDepthStencilState(FRHIDepthStencilState *InDepthStencilState)
Definition MeshPassProcessor.h:2134
FORCEINLINE_DEBUGGABLE void SetDepthStencilAccess(FExclusiveDepthStencil::Type InDepthStencilAccess)
Definition MeshPassProcessor.h:2150
FORCEINLINE_DEBUGGABLE uint32 GetStencilRef() const
Definition MeshPassProcessor.h:2160
FMeshPassProcessorRenderState(const FMeshPassProcessorRenderState &DrawRenderState)=default
~FMeshPassProcessorRenderState()=default
FMeshPassProcessorRenderState()=default
FORCEINLINE_DEBUGGABLE FRHIDepthStencilState * GetDepthStencilState() const
Definition MeshPassProcessor.h:2145
FORCEINLINE_DEBUGGABLE FExclusiveDepthStencil::Type GetDepthStencilAccess() const
Definition MeshPassProcessor.h:2155
FORCEINLINE_DEBUGGABLE void ApplyToPSO(FGraphicsPipelineStateInitializer &GraphicsPSOInit) const
Definition MeshPassProcessor.h:2165
FORCEINLINE_DEBUGGABLE void SetBlendState(FRHIBlendState *InBlendState)
Definition MeshPassProcessor.h:2124
FORCEINLINE_DEBUGGABLE FRHIBlendState * GetBlendState() const
Definition MeshPassProcessor.h:2129
Definition MeshPassProcessor.h:2235
EDrawingPolicyOverrideFlags MeshOverrideFlags
Definition MeshPassProcessor.h:2236
EPrimitiveType MeshPrimitiveType
Definition MeshPassProcessor.h:2237
Definition MeshPassProcessor.h:719
TShaderRef< FShader > PixelShader
Definition MeshPassProcessor.h:721
TShaderRef< FShader > VertexShader
Definition MeshPassProcessor.h:720
TShaderRef< FShader > GeometryShader
Definition MeshPassProcessor.h:722
TArray< TShaderRef< FShader >, TInlineAllocator< 3 > > GetValidShaders() const
Definition MeshPassProcessor.h:767
TShaderRef< FShader > GetShader(EShaderFrequency Frequency) const
Definition MeshPassProcessor.h:729
TShaderRef< FShader > ComputeShader
Definition MeshPassProcessor.h:723
TShaderRef< FShader > WorkGraphShader
Definition MeshPassProcessor.h:724
Definition PSOPrecache.h:30
Definition PSOPrecache.h:150
Definition MeshPassProcessor.h:1559
FORCEINLINE bool operator==(FPersistentPrimitiveIndex B) const
Definition MeshPassProcessor.h:1563
bool IsValid() const
Definition MeshPassProcessor.h:1560
Definition RHIShaderParameters.h:241
Definition RHICommandList.h:267
Definition SceneTexturesConfig.h:114
Definition MeshPassProcessor.h:1944
static bool Matches(KeyInitType A, KeyInitType B)
Definition MeshPassProcessor.h:1948
static uint32 GetKeyHash(KeyInitType Key)
Definition MeshPassProcessor.h:1954
TTypeTraits< KeyType >::ConstPointerType KeyInitType
Definition Map.h:78
Definition MeshPassProcessor.h:2076
TShaderRef< ComputeType > ComputeShader
Definition MeshPassProcessor.h:2082
TShaderRef< VertexType > VertexShader
Definition MeshPassProcessor.h:2077
TShaderRef< GeometryType > GeometryShader
Definition MeshPassProcessor.h:2079
TShaderRef< PixelType > PixelShader
Definition MeshPassProcessor.h:2078
FMeshProcessorShaders GetUntypedShaders() const
Definition MeshPassProcessor.h:2090
TMeshProcessorShaders()=default
Definition Optional.h:131
Definition UseBitwiseSwap.h:13
@ Value
Definition UseBitwiseSwap.h:15