49template<
typename PassShadersType,
typename ShaderElementDataType>
65 const FPrimitiveSceneInfo*
RESTRICT PrimitiveSceneInfo = PrimitiveSceneProxy ? PrimitiveSceneProxy->GetPrimitiveSceneInfo() :
nullptr;
70 if (MaterialResource.MaterialUsesWorldPositionOffset_RenderThread())
74 if (MaterialResource.ShouldAlwaysEvaluateWorldPositionOffset())
91 check(VertexFactory && VertexFactory->IsInitialized());
94 check(!VertexFactory->NeedsDeclaration() || VertexDeclaration);
103 check(DrawRenderState.GetDepthStencilState());
104 check(DrawRenderState.GetBlendState());
106 PipelineState.
BlendState = DrawRenderState.GetBlendState();
117 check(VertexFactory && VertexFactory->IsInitialized());
120#if PSO_PRECACHING_VALIDATE
121 if (PSOCollectorStats::IsFullPrecachingValidationEnabled())
123 PSOCollectorStats::CheckShaderOnlyStateInCache(PipelineState, MaterialResource, VertexFactory->GetType(), PrimitiveSceneProxy,
PSOCollectorIndex);
124 PSOCollectorStats::CheckMinimalPipelineStateInCache(PipelineState, MaterialResource, VertexFactory->GetType(), PrimitiveSceneProxy,
PSOCollectorIndex);
135 int32 DataOffset = 0;
188 FMeshMaterialShader::GetElementShaderBindings(
PassShaders.VertexShader,
Scene,
ViewIfDynamicMeshCommand, VertexFactory,
InputStreamType,
FeatureLevel, PrimitiveSceneProxy,
MeshBatch,
BatchElement,
ShaderElementData,
VertexShaderBindings, MeshDrawCommand.
VertexStreams);
194 FMeshMaterialShader::GetElementShaderBindings(
PassShaders.PixelShader,
Scene,
ViewIfDynamicMeshCommand, VertexFactory,
EVertexInputStreamType::Default,
FeatureLevel, PrimitiveSceneProxy,
MeshBatch,
BatchElement,
ShaderElementData,
PixelShaderBindings, MeshDrawCommand.
VertexStreams);
200 FMeshMaterialShader::GetElementShaderBindings(
PassShaders.GeometryShader,
Scene,
ViewIfDynamicMeshCommand, VertexFactory,
EVertexInputStreamType::Default,
FeatureLevel, PrimitiveSceneProxy,
MeshBatch,
BatchElement,
ShaderElementData,
GeometryShaderBindings, MeshDrawCommand.
VertexStreams);
210template<
typename PassShadersType>
241template<
typename PassShadersType>
289 check(VertexDeclaration);
294 check(DrawRenderState.GetDepthStencilState());
295 check(DrawRenderState.GetBlendState());
304#if PSO_PRECACHING_VALIDATE
305 if (PSOCollectorStats::IsFullPrecachingValidationEnabled())
316 PipelineStateInitializer.
SubpassHint = SubpassHint;
323#if PSO_PRECACHING_VALIDATE
326 if (PSOCollectorStats::IsFullPrecachingValidationEnabled())
328 PSOPrecacheData.bDefaultMaterial = MaterialResource.IsDefaultMaterial();
340template<
typename LambdaType>
346 bool NeedsShaderInitialisation;
354 DrawDynamicMeshPassPrivate(View, RHICmdList, VisibleMeshDrawCommands, DynamicMeshDrawCommandStorage, GraphicsMinimalPipelineStateSet, NeedsShaderInitialisation, InstanceFactor);
357template <
typename ParameterStructType,
typename LambdaType>
371template <
typename ParameterStructType,
typename LambdaType>
391 bool NeedsShaderInitialisation;
411 RHICmdList.SetViewport(ViewportRect.
Min.
X, ViewportRect.
Min.
Y, 0.0f, ViewportRect.
Max.
X, ViewportRect.
Max.
Y, 1.0f);
412 if (ScissorRect.
Area() > 0)
414 RHICmdList.SetScissorRect(
true, ScissorRect.
Min.
X, ScissorRect.
Min.
Y, ScissorRect.
Max.
X, ScissorRect.
Max.
Y);
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
@ FetchInstanceCountFromScene
@ MaterialAlwaysEvaluatesWorldPositionOffset
@ MaterialUsesWorldPositionOffset
@ HasPrimitiveIdStreamIndex
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
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
@ 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