UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MeshPassProcessor.inl
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4MeshPassProcessor.inl:
5=============================================================================*/
6
7#pragma once
8
9#include "MeshPassProcessor.h"
11#include "PrimitiveSceneProxy.h"
12#include "RHIStaticStates.h"
13#include "RenderGraphBuilder.h"
15#include "SceneView.h"
17
18
19static EVRSShadingRate GetShadingRateFromMaterial(EMaterialShadingRate MaterialShadingRate)
20{
21 switch (MaterialShadingRate)
22 {
23 case MSR_1x1:
25 case MSR_1x2:
27 case MSR_2x1:
29 case MSR_2x2:
31 }
32
34 {
35 switch (MaterialShadingRate)
36 {
37 case MSR_4x2:
39 case MSR_2x4:
41 case MSR_4x4:
43 }
44 }
45
47}
48
49template<typename PassShadersType, typename ShaderElementDataType>
53 const FPrimitiveSceneProxy* RESTRICT PrimitiveSceneProxy,
54 const FMaterialRenderProxy& RESTRICT MaterialRenderProxy,
55 const FMaterial& RESTRICT MaterialResource,
56 const FMeshPassProcessorRenderState& RESTRICT DrawRenderState,
58 ERasterizerFillMode MeshFillMode,
59 ERasterizerCullMode MeshCullMode,
63{
64 const FVertexFactory* RESTRICT VertexFactory = MeshBatch.VertexFactory;
65 const FPrimitiveSceneInfo* RESTRICT PrimitiveSceneInfo = PrimitiveSceneProxy ? PrimitiveSceneProxy->GetPrimitiveSceneInfo() : nullptr;
66
69
70 if (MaterialResource.MaterialUsesWorldPositionOffset_RenderThread())
71 {
73
74 if (MaterialResource.ShouldAlwaysEvaluateWorldPositionOffset())
75 {
77 }
78 }
79
80 SharedMeshDrawCommand.SetStencilRef(DrawRenderState.GetStencilRef());
82
84 PipelineState.PrimitiveType = (EPrimitiveType)MeshBatch.Type;
85 PipelineState.ImmutableSamplerState = MaterialRenderProxy.ImmutableSamplerState;
86
90
91 check(VertexFactory && VertexFactory->IsInitialized());
92 FRHIVertexDeclaration* VertexDeclaration = VertexFactory->GetDeclaration(InputStreamType);
93
94 check(!VertexFactory->NeedsDeclaration() || VertexDeclaration);
95
96 const FMeshProcessorShaders MeshProcessorShaders = PassShaders.GetUntypedShaders();
97 PipelineState.SetupBoundShaderState(VertexDeclaration, MeshProcessorShaders);
98
99 SharedMeshDrawCommand.InitializeShaderBindings(MeshProcessorShaders);
100
101 PipelineState.RasterizerState = GetStaticRasterizerState<true>(MeshFillMode, MeshCullMode);
102
103 check(DrawRenderState.GetDepthStencilState());
104 check(DrawRenderState.GetBlendState());
105
106 PipelineState.BlendState = DrawRenderState.GetBlendState();
107 PipelineState.DepthStencilState = DrawRenderState.GetDepthStencilState();
108 PipelineState.DrawShadingRate = PipelineVariableRateShadingEnabled() ? GetShadingRateFromMaterial(MaterialResource.GetShadingRate()) : VRSSR_1x1;
109 PipelineState.bAllowVariableRateShading = MaterialResource.IsVariableRateShadingAllowed() && HardwareVariableRateShadingSupportedByScene();
110
111 // PSO Precache hash only needed when PSO precaching is enabled
113 {
114 PipelineState.ComputeStatePrecachePSOHash();
115 }
116
117 check(VertexFactory && VertexFactory->IsInitialized());
118 VertexFactory->GetStreams(FeatureLevel, InputStreamType, SharedMeshDrawCommand.VertexStreams);
119
120#if PSO_PRECACHING_VALIDATE
121 if (PSOCollectorStats::IsFullPrecachingValidationEnabled())
122 {
123 PSOCollectorStats::CheckShaderOnlyStateInCache(PipelineState, MaterialResource, VertexFactory->GetType(), PrimitiveSceneProxy, PSOCollectorIndex);
124 PSOCollectorStats::CheckMinimalPipelineStateInCache(PipelineState, MaterialResource, VertexFactory->GetType(), PrimitiveSceneProxy, PSOCollectorIndex);
125 }
126#endif // PSO_PRECACHING_VALIDATE
127
128 SharedMeshDrawCommand.PrimitiveIdStreamIndex = static_cast<int8>(VertexFactory->GetPrimitiveIdStreamIndex(FeatureLevel, InputStreamType));
129
130 if (SharedMeshDrawCommand.PrimitiveIdStreamIndex != INDEX_NONE)
131 {
133 }
134
135 int32 DataOffset = 0;
136 if (PassShaders.VertexShader.IsValid())
137 {
138 FMeshDrawSingleShaderBindings ShaderBindings = SharedMeshDrawCommand.ShaderBindings.GetSingleShaderBindings(SF_Vertex, DataOffset);
139 PassShaders.VertexShader->GetShaderBindings(Scene, FeatureLevel, PrimitiveSceneProxy, MaterialRenderProxy, MaterialResource, ShaderElementData, ShaderBindings);
140 }
141
142 if (PassShaders.PixelShader.IsValid())
143 {
144 FMeshDrawSingleShaderBindings ShaderBindings = SharedMeshDrawCommand.ShaderBindings.GetSingleShaderBindings(SF_Pixel, DataOffset);
145 PassShaders.PixelShader->GetShaderBindings(Scene, FeatureLevel, PrimitiveSceneProxy, MaterialRenderProxy, MaterialResource, ShaderElementData, ShaderBindings);
146 }
147
148 if (PassShaders.GeometryShader.IsValid())
149 {
150 FMeshDrawSingleShaderBindings ShaderBindings = SharedMeshDrawCommand.ShaderBindings.GetSingleShaderBindings(SF_Geometry, DataOffset);
151 PassShaders.GeometryShader->GetShaderBindings(Scene, FeatureLevel, PrimitiveSceneProxy, MaterialRenderProxy, MaterialResource, ShaderElementData, ShaderBindings);
152 }
153
154 SharedMeshDrawCommand.SetDebugData(PrimitiveSceneProxy, &MaterialResource, &MaterialRenderProxy, MeshProcessorShaders, VertexFactory, MeshBatch, PSOCollectorIndex);
155 SharedMeshDrawCommand.SetStatsData(PrimitiveSceneProxy);
156
157 const int32 NumElements = ShouldSkipMeshDrawCommand(MeshBatch, PrimitiveSceneProxy) ? 0 : MeshBatch.Elements.Num();
158
160 {
161 if ((1ull << BatchElementIndex) & BatchElementMask)
162 {
164 FMeshDrawCommand& MeshDrawCommand = DrawListContext->AddCommand(SharedMeshDrawCommand, NumElements);
165
167 if (BatchElement.bForceInstanceCulling)
168 {
170 }
171 if (BatchElement.bPreserveInstanceOrder)
172 {
173 // TODO: add support for bPreserveInstanceOrder on mobile
174 if (ensureMsgf(FeatureLevel > ERHIFeatureLevel::ES3_1, TEXT("FMeshBatchElement::bPreserveInstanceOrder is currently only supported on non-mobile platforms.")))
175 {
177 }
178 }
179 if (BatchElement.bFetchInstanceCountFromScene)
180 {
182 }
183
184 DataOffset = 0;
185 if (PassShaders.VertexShader.IsValid())
186 {
189 }
190
191 if (PassShaders.PixelShader.IsValid())
192 {
195 }
196
197 if (PassShaders.GeometryShader.IsValid())
198 {
201 }
202
204
205 DrawListContext->FinalizeCommand(MeshBatch, BatchElementIndex, IdInfo, MeshFillMode, MeshCullMode, SortKey, Flags, PipelineState, &MeshProcessorShaders, MeshDrawCommand);
206 }
207 }
208}
209
210template<typename PassShadersType>
212 const FPSOPrecacheVertexFactoryData& VertexFactoryData,
213 const FMaterial& RESTRICT MaterialResource,
214 const FMeshPassProcessorRenderState& RESTRICT DrawRenderState,
217 ERasterizerFillMode MeshFillMode,
218 ERasterizerCullMode MeshCullMode,
219 EPrimitiveType PrimitiveType,
221 bool bRequired,
223{
225 VertexFactoryData,
226 MaterialResource,
227 DrawRenderState,
230 MeshFillMode,
231 MeshCullMode,
232 PrimitiveType,
235 0,
236 bRequired,
239}
240
241template<typename PassShadersType>
243 const FPSOPrecacheVertexFactoryData& VertexFactoryData,
244 const FMaterial& RESTRICT MaterialResource,
245 const FMeshPassProcessorRenderState& RESTRICT DrawRenderState,
248 ERasterizerFillMode MeshFillMode,
249 ERasterizerCullMode MeshCullMode,
250 EPrimitiveType PrimitiveType,
252 ESubpassHint SubpassHint,
253 uint8 SubpassIndex,
254 bool bRequired,
257{
259
261
263 {
264 PSOPrecacheData.ShaderPreloadData.Shaders.Append(PassShaders.GetUntypedShaders().GetValidShaders());
265 }
266 else
267 {
270
271 // Ignore immutable samplers for now - should be passed in?
272 //PipelineState.ImmutableSamplerState = MaterialRenderProxy.ImmutableSamplerState;
273
277
278 FRHIVertexDeclaration* VertexDeclaration = nullptr;
280 {
281 VertexDeclaration = VertexFactoryData.CustomDefaultVertexDeclaration;
282 }
283 else
284 {
287 VertexDeclaration = PipelineStateCache::GetOrCreateVertexDeclaration(Elements);
288 }
289 check(VertexDeclaration);
290
291 MinimalPipelineStateInitializer.SetupBoundShaderState(VertexDeclaration, PassShaders.GetUntypedShaders());
292 MinimalPipelineStateInitializer.RasterizerState = GetStaticRasterizerState<true>(MeshFillMode, MeshCullMode);
293
294 check(DrawRenderState.GetDepthStencilState());
295 check(DrawRenderState.GetBlendState());
296
297 MinimalPipelineStateInitializer.BlendState = DrawRenderState.GetBlendState();
298 MinimalPipelineStateInitializer.DepthStencilState = DrawRenderState.GetDepthStencilState();
299 MinimalPipelineStateInitializer.DrawShadingRate = GetShadingRateFromMaterial(MaterialResource.GetShadingRate());
300 MinimalPipelineStateInitializer.bAllowVariableRateShading = MaterialResource.IsVariableRateShadingAllowed() && HardwareVariableRateShadingSupportedByPlatform(GMaxRHIShaderPlatform);
301
302 // NOTE: AsGraphicsPipelineStateInitializer will create the RHIShaders internally if they are not cached yet
303 FGraphicsPipelineStateInitializer PipelineStateInitializer = MinimalPipelineStateInitializer.AsGraphicsPipelineStateInitializer();
304#if PSO_PRECACHING_VALIDATE
305 if (PSOCollectorStats::IsFullPrecachingValidationEnabled())
306 {
309 PSOCollectorStats::GetShadersOnlyPSOPrecacheStatsCollector().AddStateToCache(EPSOPrecacheType::MeshPass, ShadersOnlyInitializer, PSOCollectorStats::GetPSOPrecacheHash, &MaterialResource, InPSOCollectorIndex, VertexFactoryData.VertexFactoryType);
311 PSOCollectorStats::GetMinimalPSOPrecacheStatsCollector().AddStateToCache(EPSOPrecacheType::MeshPass, PatchedMinimalInitializer, PSOCollectorStats::GetPSOPrecacheHash, &MaterialResource, InPSOCollectorIndex, VertexFactoryData.VertexFactoryType);
312 }
313#endif // PSO_PRECACHING_VALIDATE
314
315 ApplyTargetsInfo(PipelineStateInitializer, RenderTargetsInfo);
316 PipelineStateInitializer.SubpassHint = SubpassHint;
317 PipelineStateInitializer.SubpassIndex = SubpassIndex;
318 PSOPrecacheData.GraphicsPSOInitializer = PipelineStateInitializer;
319 }
320
321 PSOPrecacheData.bRequired = bRequired;
323#if PSO_PRECACHING_VALIDATE
324 PSOPrecacheData.PSOCollectorIndex = InPSOCollectorIndex;
325 PSOPrecacheData.VertexFactoryType = VertexFactoryData.VertexFactoryType;
326 if (PSOCollectorStats::IsFullPrecachingValidationEnabled())
327 {
328 PSOPrecacheData.bDefaultMaterial = MaterialResource.IsDefaultMaterial();
330 }
331#endif // PSO_PRECACHING_VALIDATE
333}
334
335
340template<typename LambdaType>
342{
343 FDynamicMeshDrawCommandStorage DynamicMeshDrawCommandStorage;
344 FMeshCommandOneFrameArray VisibleMeshDrawCommands;
345 FGraphicsMinimalPipelineStateSet GraphicsMinimalPipelineStateSet;
346 bool NeedsShaderInitialisation;
347
348 FDynamicPassMeshDrawListContext DynamicMeshPassContext(DynamicMeshDrawCommandStorage, VisibleMeshDrawCommands, GraphicsMinimalPipelineStateSet, NeedsShaderInitialisation);
349
351
352 // We assume all dynamic passes are in stereo if it is enabled in the view, so we apply ISR to them
353 const uint32 InstanceFactor = (!bForceStereoInstancingOff && View.IsInstancedStereoPass()) ? 2 : 1;
354 DrawDynamicMeshPassPrivate(View, RHICmdList, VisibleMeshDrawCommands, DynamicMeshDrawCommandStorage, GraphicsMinimalPipelineStateSet, NeedsShaderInitialisation, InstanceFactor);
355}
356
357template <typename ParameterStructType, typename LambdaType>
359 FRDGBuilder& GraphBuilder,
360 FRDGEventName&& EventName,
362 const FSceneView& View,
363 FIntRect ViewportRect,
365 bool bForceStereoInstancingOff = false,
366 bool bForceParallelSetupOff = false)
367{
369}
370
371template <typename ParameterStructType, typename LambdaType>
373 FRDGBuilder& GraphBuilder,
374 FRDGEventName&& EventName,
376 const FSceneView& View,
377 FIntRect ViewportRect,
378 FIntRect ScissorRect,
380 bool bForceStereoInstancingOff = false,
381 bool bForceParallelSetupOff = false)
382{
383 // We assume all dynamic passes are in stereo if it is enabled in the view, so we apply ISR to them
384 const uint32 InstanceFactor = (!bForceStereoInstancingOff && View.IsInstancedStereoPass()) ? 2 : 1;
385
386 struct FContext
387 {
388 FDynamicMeshDrawCommandStorage DynamicMeshDrawCommandStorage;
389 FMeshCommandOneFrameArray VisibleMeshDrawCommands;
390 FGraphicsMinimalPipelineStateSet GraphicsMinimalPipelineStateSet;
391 bool NeedsShaderInitialisation;
392 };
393
394 FContext& Context = *GraphBuilder.AllocObject<FContext>();
395
397 {
399 FDynamicPassMeshDrawListContext DynamicMeshPassContext(Context.DynamicMeshDrawCommandStorage, Context.VisibleMeshDrawCommands, Context.GraphicsMinimalPipelineStateSet, Context.NeedsShaderInitialisation);
401
403
404 GraphBuilder.AddPass(
405 MoveTemp(EventName),
408 [&Context, &View, ViewportRect, ScissorRect, InstanceFactor](FRDGAsyncTask, FRHICommandList& RHICmdList)
409 {
411 RHICmdList.SetViewport(ViewportRect.Min.X, ViewportRect.Min.Y, 0.0f, ViewportRect.Max.X, ViewportRect.Max.Y, 1.0f);
412 if (ScissorRect.Area() > 0)
413 {
414 RHICmdList.SetScissorRect(true, ScissorRect.Min.X, ScissorRect.Min.Y, ScissorRect.Max.X, ScissorRect.Max.Y);
415 }
416 DrawDynamicMeshPassPrivate(View, RHICmdList, Context.VisibleMeshDrawCommands, Context.DynamicMeshDrawCommandStorage, Context.GraphicsMinimalPipelineStateSet, Context.NeedsShaderInitialisation, InstanceFactor);
417 });
418}
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define RESTRICT
Definition Platform.h:706
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define TRACE_CPUPROFILER_EVENT_SCOPE(Name)
Definition CpuProfilerTrace.h:528
EMaterialShadingRate
Definition EngineTypes.h:981
void DrawDynamicMeshPassPrivate(const FSceneView &View, FRHICommandList &RHICmdList, FMeshCommandOneFrameArray &VisibleMeshDrawCommands, FDynamicMeshDrawCommandStorage &DynamicMeshDrawCommandStorage, FGraphicsMinimalPipelineStateSet &GraphicsMinimalPipelineStateSet, bool &InNeedsShaderInitialisation, uint32 InstanceFactor)
Definition MeshPassProcessor.cpp:1729
EFVisibleMeshDrawCommandFlags
Definition MeshPassProcessor.h:1526
EMeshPassFeatures
Definition MeshPassProcessor.h:2107
RENDERER_API void ApplyTargetsInfo(FGraphicsPipelineStateInitializer &GraphicsPSOInit, const FGraphicsPipelineRenderTargetsInfo &RenderTargetsInfo)
Definition MeshPassProcessor.cpp:1473
void DrawDynamicMeshPass(const FSceneView &View, FRHICommandList &RHICmdList, const LambdaType &BuildPassProcessorLambda, bool bForceStereoInstancingOff=false)
Definition MeshPassProcessor.inl:341
void AddDrawDynamicMeshPass(FRDGBuilder &GraphBuilder, FRDGEventName &&EventName, const ParameterStructType *PassParameters, const FSceneView &View, FIntRect ViewportRect, const LambdaType &BuildPassProcessorLambda, bool bForceStereoInstancingOff=false, bool bForceParallelSetupOff=false)
Definition MeshPassProcessor.inl:358
bool IsPSOShaderPreloadingEnabled()
Definition PSOPrecache.cpp:94
@ SF_Vertex
Definition RHIDefinitions.h:203
@ SF_Geometry
Definition RHIDefinitions.h:207
@ SF_Pixel
Definition RHIDefinitions.h:206
ERasterizerCullMode
Definition RHIDefinitions.h:369
ERasterizerFillMode
Definition RHIDefinitions.h:358
EPrimitiveType
Definition RHIDefinitions.h:822
EVRSShadingRate
Definition RHIDefinitions.h:860
@ VRSSR_2x1
Definition RHIDefinitions.h:863
@ VRSSR_1x2
Definition RHIDefinitions.h:862
@ VRSSR_2x4
Definition RHIDefinitions.h:865
@ VRSSR_1x1
Definition RHIDefinitions.h:861
@ VRSSR_4x4
Definition RHIDefinitions.h:867
@ VRSSR_4x2
Definition RHIDefinitions.h:866
@ VRSSR_2x2
Definition RHIDefinitions.h:864
#define GRHISupportsLargerVariableRateShadingSizes
Definition RHIGlobals.h:883
ESubpassHint
Definition RHIResources.h:4526
EShaderPlatform GMaxRHIShaderPlatform
Definition RHI.cpp:1335
bool HardwareVariableRateShadingSupportedByPlatform(EShaderPlatform ShaderPlatform)
Definition RenderUtils.cpp:2410
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
EVertexInputStreamType
Definition VertexFactory.h:128
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MeshPassProcessor.h:1692
Definition MeshPassProcessor.h:1798
Definition MeshPassProcessor.h:337
RENDERER_API void SetupBoundShaderState(FRHIVertexDeclaration *VertexDeclaration, const FMeshProcessorShaders &Shaders)
Definition MeshPassProcessor.cpp:858
FImmutableSamplerState ImmutableSamplerState
Definition MeshPassProcessor.h:546
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
Definition RHIResources.h:4572
uint64 StatePrecachePSOHash
Definition RHIResources.h:4816
uint8 SubpassIndex
Definition RHIResources.h:4773
ESubpassHint SubpassHint
Definition RHIResources.h:4772
Definition MaterialRenderProxy.h:102
Definition MaterialShared.h:2058
Definition MeshPassProcessor.h:1482
Definition MeshPassProcessor.h:1223
void SetStencilRef(uint32 InStencilRef)
Definition MeshPassProcessor.h:1363
FMeshDrawShaderBindings ShaderBindings
Definition MeshPassProcessor.h:1229
FVertexInputStreamArray VertexStreams
Definition MeshPassProcessor.h:1230
FORCEINLINE FMeshDrawSingleShaderBindings GetSingleShaderBindings(EShaderFrequency Frequency, int32 &DataOffset)
Definition MeshPassProcessor.h:978
Definition MeshDrawShaderBindings.h:104
RENDERER_API void GetElementShaderBindings(const FShaderMapPointerTable &PointerTable, const FScene *Scene, const FSceneView *ViewIfDynamicMeshCommand, const FVertexFactory *VertexFactory, const EVertexInputStreamType InputStreamType, const FStaticFeatureLevel FeatureLevel, const FPrimitiveSceneProxy *PrimitiveSceneProxy, const FMeshBatch &MeshBatch, const FMeshBatchElement &BatchElement, const FMeshMaterialShaderElementData &ShaderElementData, FMeshDrawSingleShaderBindings &ShaderBindings, FVertexInputStreamArray &VertexStreams) const
Definition ShaderBaseClasses.cpp:471
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
RENDERER_API bool HardwareVariableRateShadingSupportedByScene() const
Definition MeshPassProcessor.cpp:1906
const FScene *RESTRICT Scene
Definition MeshPassProcessor.h:2203
const FSceneView * ViewIfDynamicMeshCommand
Definition MeshPassProcessor.h:2205
RENDERER_API bool PipelineVariableRateShadingEnabled() const
Definition MeshPassProcessor.cpp:1901
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
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
FMeshPassDrawListContext * DrawListContext
Definition MeshPassProcessor.h:2206
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 PrimitiveSceneInfo.h:266
Definition PrimitiveSceneProxy.h:296
Definition RenderGraphBuilder.h:49
ObjectType * AllocObject(TArgs &&... Args)
Definition RenderGraphBuilder.inl:158
FRDGPassRef AddPass(FRDGEventName &&Name, const ParameterStructType *ParameterStruct, ERDGPassFlags Flags, ExecuteLambdaType &&ExecuteLambda)
UE::Tasks::FTask AddSetupTask(TaskLambda &&Task, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
Definition RenderGraphEvent.h:38
Definition RHICommandList.h:3819
Definition RHIResources.h:725
Definition SceneView.h:1425
ENGINE_API bool IsInstancedStereoPass() const
Definition SceneView.cpp:2494
void GetShaderPSOPrecacheVertexFetchElements(EVertexInputStreamType VertexInputStreamType, FVertexDeclarationElementList &Elements) const
Definition VertexFactory.h:392
Definition VertexFactory.h:661
int32 PSOCollectorIndex
Definition PSOPrecacheMaterial.h:42
Definition Array.h:670
@ ES3_1
Definition RHIFeatureLevel.h:25
RHI_API bool IsPSOPrecachingEnabled()
Definition PipelineStateCache.cpp:4406
RHI_API FRHIVertexDeclaration * GetOrCreateVertexDeclaration(const FVertexDeclarationElementList &Elements)
Definition PipelineStateCache.cpp:4768
Definition RHIResources.h:4547
Definition MeshBatch.h:232
Definition MeshBatch.h:371
Definition MeshPassProcessor.h:1573
Definition MeshPassProcessor.h:2118
Definition MeshPassProcessor.h:719
Definition PSOPrecache.h:226
FShaderPreloadData ShaderPreloadData
Definition PSOPrecache.h:253
Definition PSOPrecache.h:150
const FVertexFactoryType * VertexFactoryType
Definition PSOPrecache.h:155
FRHIVertexDeclaration * CustomDefaultVertexDeclaration
Definition PSOPrecache.h:158
Definition RenderGraphDefinitions.h:103
TArray< TShaderRef< FShader >, TInlineAllocator< 3 > > Shaders
Definition PSOPrecache.h:211
IntType Y
Definition IntPoint.h:37
IntType X
Definition IntPoint.h:34
IntPointType Max
Definition IntRect.h:37
IntPointType Min
Definition IntRect.h:34
IntType Area() const
Definition IntRect.h:272