When a heterogeneous volume actor is used with a volume material in a debug build, the following ensures are triggered:
Ensure condition failed: UniformBufferValue || EnumHasAnyFlags(AutomaticallyBoundUniformBufferStruct->GetBindingFlags(), EUniformBufferBindingFlags::Static) || EnumHasAnyFlags(AutomaticallyBoundUniformBufferStruct->GetUsageFlags(), FShaderParametersMetadata::EUsageFlags::ManuallyBoundByPass) [Link Removed] [Line: 827]
Shader FRenderLightingCacheWithLiveShadingCS with vertex factory FLocalVertexFactory never set automatically bound uniform buffer at BaseIndex 4. Expected buffer of type FLumenTranslucencyLightingUniforms. This can cause GPU hangs, depending on how the shader uses it.
Ensure condition failed: Texture [Link Removed] [Line: 882]
Shader FRenderLightingCacheWithLiveShadingCS with vertex factory FLocalVertexFactory never set texture at BaseIndex 6. This can cause GPU hangs, depending on how the shader uses it.
Ensure condition failed: Texture [Link Removed] [Line: 882]
Shader FRenderLightingCacheWithLiveShadingCS with vertex factory FLocalVertexFactory never set texture at BaseIndex 6. This can cause GPU hangs, depending on how the shader uses it.
The above three ensures are caused by missing the following explicit bindings before FMeshDrawShaderBindings::Finalize is called.
Missing Uniform Binding: LumenGIVolumeStruct : FLumenTranslucencyLightingUniforms
Missing Texture Binding: AmbientOcclusionTexture : FRHITexture
Missing Texture SRV Binding: ExistenceMaskTexture : FRDGTextureSRV
The solution is to ensure that the above three shader bindings are explicitly bound in AddComputePass (HeterogeneousVolumesLiveShadingPipeline.cpp), before the call to ShaderBindings.Finalize. For consistency, the texture / texture srv bindings should be done in FRenderLightingCacheLooseBindings::SetParameters, which is called from AddComputePass.
Note: These explicit bindings seem to be required by legacy code and / or a few specific RHIs. These bindings appear to be all set up automatically later on during the call to UE::MeshPassUtils::Dispatch. Part of the preparation stage of that function is to walk the shader parameter metadata and automatically bind all the parameters from the passed in PassParameters struct.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-315187 in the post.
0 |
Component | UE - Graphics Features |
---|---|
Affects Versions | 5.6, 5.7 |
Created | Aug 24, 2025 |
---|---|
Updated | Aug 26, 2025 |