UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MeshPassUtils.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "MeshPassProcessor.h"
6#include "RenderGraphUtils.h"
7
9{
10 namespace Private
11 {
12 template<typename TShaderClass>
28
29 template<typename TShaderClass>
31 {
32 UnsetShaderUAVs(RHICmdList, ComputeShader, ComputeShader.GetComputeShader());
33 }
34 }
35
37 template<typename TShaderClass>
38 inline void Dispatch(
39 FRHIComputeCommandList& RHICmdList,
41 const FMeshDrawShaderBindings& ShaderBindings,
42 const typename TShaderClass::FParameters& PassParameters,
44 {
46
47 Private::PrepareDispatch(RHICmdList, ComputeShader, ShaderBindings, PassParameters);
50 }
51
53 template<typename TShaderClass>
54 inline void DispatchIndirect(
55 FRHIComputeCommandList& RHICmdList,
57 const FMeshDrawShaderBindings& ShaderBindings,
58 const typename TShaderClass::FParameters& PassParameters,
59 FRHIBuffer* IndirectArgsBuffer,
61 {
63
64 Private::PrepareDispatch(RHICmdList, ComputeShader, ShaderBindings, PassParameters);
65 RHICmdList.DispatchIndirectComputeShader(IndirectArgsBuffer, IndirectArgOffset);
67 }
68
69 template<typename TShaderClass, typename TShaderElementData>
71 const TShaderRef<TShaderClass>& Shader,
72 const FScene* Scene,
73 ERHIFeatureLevel::Type FeatureLevel,
74 const FPrimitiveSceneProxy* PrimitiveSceneProxy,
75 const FMaterialRenderProxy& MaterialRenderProxy,
76 const FMaterial& Material,
78 FMeshDrawShaderBindings& ShaderBindings
79 )
80 {
82
83 EShaderFrequency Frequency = Shader->GetFrequency();
84 if (Frequency == SF_Compute)
85 {
86 MeshProcessorShaders.ComputeShader = Shader;
87 }
89 {
90 MeshProcessorShaders.WorkGraphShader = Shader;
91 }
92
93 ShaderBindings.Initialize(MeshProcessorShaders);
94
95 if (Shader.IsValid())
96 {
98 Shader->GetShaderBindings(Scene, FeatureLevel, PrimitiveSceneProxy, MaterialRenderProxy, Material, ShaderElementData, SingleShaderBindings);
99 }
100
101 ShaderBindings.Finalize(&MeshProcessorShaders);
102 }
103
104 template<typename TShaderClass>
106 const TShaderRef<TShaderClass>& Shader,
107 const FScene* Scene,
108 ERHIFeatureLevel::Type FeatureLevel,
109 const FPrimitiveSceneProxy* PrimitiveSceneProxy,
110 const FMaterialRenderProxy& MaterialRenderProxy,
111 const FMaterial& Material,
112 FMeshDrawShaderBindings& ShaderBindings
113 )
114 {
117
118 SetupComputeBindings(Shader, Scene, FeatureLevel, PrimitiveSceneProxy, MaterialRenderProxy, Material, ShaderElementData, ShaderBindings);
119 }
120}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void SetComputePipelineState(FRHIComputeCommandList &RHICmdList, FRHIComputeShader *ComputeShader)
Definition PipelineStateCache.cpp:1447
EShaderFrequency
Definition RHIDefinitions.h:202
@ SF_Compute
Definition RHIDefinitions.h:208
@ SF_WorkGraphComputeNode
Definition RHIDefinitions.h:214
void SetShaderParameters(FRHIBatchedShaderParameters &BatchedParameters, const FShaderParameterBindings &Bindings, const FShaderParametersMetadata *ParametersMetadata, const void *InParametersData)
Definition ShaderParameterStruct.cpp:883
void UnsetShaderUAVs(FRHIBatchedShaderUnbinds &BatchedUnbinds, const FShaderParameterBindings &Bindings)
Definition ShaderParameterStruct.h:163
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MaterialRenderProxy.h:102
Definition MaterialShared.h:2058
Definition MeshPassProcessor.h:908
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 Finalize(const FMeshProcessorShaders *ShadersForDebugging)
Definition MeshPassProcessor.cpp:711
RENDERER_API void Initialize(const FMeshProcessorShaders &Shaders)
Definition MeshPassProcessor.cpp:610
Definition MeshDrawShaderBindings.h:104
Definition MeshMaterialShader.h:22
RENDERER_API void InitializeMeshMaterialData()
Definition ShaderBaseClasses.cpp:19
Definition PrimitiveSceneProxy.h:296
Definition RHIResources.h:1581
uint32 GetSize() const
Definition RHIResources.h:1595
FRHIBatchedShaderParameters & GetScratchShaderParameters()
Definition RHICommandList.h:1190
Definition RHICommandList.h:2735
void SetBatchedShaderParameters(FRHIComputeShader *InShader, FRHIBatchedShaderParameters &InBatchedParameters)
Definition RHICommandList.h:2850
void DispatchComputeShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ)
Definition RHICommandList.h:2929
void DispatchIndirectComputeShader(FRHIBuffer *ArgumentBuffer, uint32 ArgumentOffset)
Definition RHICommandList.h:2939
Definition RHIResources.h:1018
Definition ScenePrivate.h:2875
Definition Shader.h:1021
Type
Definition RHIFeatureLevel.h:20
void ValidateGroupCount(const FIntVector &GroupCount)
Definition RenderGraphUtils.h:431
void ValidateIndirectArgsBuffer(uint32 IndirectArgsBufferSize, uint32 IndirectArgOffset)
Definition RenderGraphUtils.h:438
Definition OverriddenPropertySet.cpp:45
void PrepareDispatch(FRHIComputeCommandList &RHICmdList, const TShaderRef< TShaderClass > &ComputeShader, const FMeshDrawShaderBindings &ShaderBindings, const typename TShaderClass::FParameters &PassParameters)
Definition MeshPassUtils.h:13
void AfterDispatch(FRHIComputeCommandList &RHICmdList, const TShaderRef< TShaderClass > &ComputeShader)
Definition MeshPassUtils.h:30
Definition MeshPassUtils.h:9
void DispatchIndirect(FRHIComputeCommandList &RHICmdList, const TShaderRef< TShaderClass > &ComputeShader, const FMeshDrawShaderBindings &ShaderBindings, const typename TShaderClass::FParameters &PassParameters, FRHIBuffer *IndirectArgsBuffer, uint32 IndirectArgOffset)
Definition MeshPassUtils.h:54
void Dispatch(FRHIComputeCommandList &RHICmdList, const TShaderRef< TShaderClass > &ComputeShader, const FMeshDrawShaderBindings &ShaderBindings, const typename TShaderClass::FParameters &PassParameters, FIntVector GroupCount)
Definition MeshPassUtils.h:38
void SetupComputeBindings(const TShaderRef< TShaderClass > &Shader, const FScene *Scene, ERHIFeatureLevel::Type FeatureLevel, const FPrimitiveSceneProxy *PrimitiveSceneProxy, const FMaterialRenderProxy &MaterialRenderProxy, const FMaterial &Material, const TShaderElementData &ShaderElementData, FMeshDrawShaderBindings &ShaderBindings)
Definition MeshPassUtils.h:70
Definition MeshPassProcessor.h:719
Definition RHIShaderParameters.h:241