When adding a Uniform Buffer Struct that has one 4x4 matrix to a mesh pass, validation will fail, due to a Uniform Buffer Struct mismatch.
This can be reproduced by adding a mesh pass in project-side code. However, it is easier to reproduce by adding the buffer to the Base Pass parameters.
This does not reproduce with "-onethread"
1. Unshelve CL: 39714201, or make the following engine changes:
(Note that this is reproducible by adding a mesh pass with similar structure instead of engine changes)
// BEGIN_CHANGE
BEGIN_UNIFORM_BUFFER_STRUCT(FTestParams, )
SHADER_PARAMETER(FMatrix44f, TestMatrix)
END_UNIFORM_BUFFER_STRUCT()IMPLEMENT_STATIC_UNIFORM_BUFFER_STRUCT(FTestParams, "TestParams", SceneTextures);
// END_CHANGE
BEGIN_SHADER_PARAMETER_STRUCT(FOpaqueBasePassParameters, )
SHADER_PARAMETER_STRUCT_INCLUDE(FViewShaderParameters, View)
// BEGIN_CHANGE
SHADER_PARAMETER_RDG_UNIFORM_BUFFER(FTestParams, PassUBO)
// END_CHANGE
SHADER_PARAMETER_STRUCT_REF(FReflectionCaptureShaderData, ReflectionCapture)
…
END_SHADER_PARAMETER_STRUCT()
…
PassParameters->RenderTargets.ShadingRateTexture = GVRSImageManager.GetVariableRateShadingImage(GraphBuilder, View, FVariableRateShadingImageManager::EVRSPassType::BasePass);
// BEGIN_CHANGE
FTestParams* TestParameters = GraphBuilder.AllocParameters<FTestParams>();
TestParameters->TestMatrix = FMatrix44f::Identity;
PassParameters->PassUBO = GraphBuilder.CreateUniformBuffer(TestParameters);
// END_CHANGE
const bool bShouldRenderView = View.ShouldRenderView();…
SkyPassPassParameters->ReflectionCapture = View.ReflectionCaptureUniformBuffer;
// BEGIN_CHANGE
SkyPassPassParameters->PassUBO = GraphBuilder.CreateUniformBuffer(TestParameters);
// END_CHANGE
// Remove all but the SceneColor
```
2. Compile and launch any project, with the debugger attached.
3. Observe the failed check:
"Uniform Buffer FOpaqueBasePassUniformParameters was added multiple times to the binding array but with different values."
> UnrealEditor-RHI.dll!FUniformBufferStaticBindings::AddUniformBuffer(FRHIUniformBuffer * UniformBuffer) Line 76 C++
[Inline Frame] UnrealEditor-RenderCore.dll!FRDGParameterStruct::GetStaticUniformBuffers::__l2::<lambda_1>::operator()(FRDGUniformBufferBinding) Line 28 C++
UnrealEditor-RenderCore.dll!FRDGParameterStruct::EnumerateUniformBuffers<`FRDGParameterStruct::GetStaticUniformBuffers'::`2'::<lambda_1>>(FRDGParameterStruct::GetStaticUniformBuffers::__l2::<lambda_1> Function) Line 50 C++
UnrealEditor-RenderCore.dll!FRDGParameterStruct::GetStaticUniformBuffers() Line 32 C++
[Inline Frame] UnrealEditor-RenderCore.dll!FRDGDispatchPassBuilder::
(FRDGDispatchPass *) Line 745 C++
UnrealEditor-RenderCore.dll!FRDGBuilder::SetupDispatchPassExecute() Line 2953 C++
[Inline Frame] UnrealEditor-RenderCore.dll!FRDGBuilder::Execute::__l59::<lambda_15>::operator()() Line 2020 C++
[Inline Frame] UnrealEditor-RenderCore.dll!Invoke(FRDGBuilder::Execute::__l59::<lambda_15> &) Line 47 C++
UnrealEditor-RenderCore.dll!UE::Tasks::Private::TExecutableTaskBase<`FRDGBuilder::Execute'::`59'::<lambda_15>,void,void>::ExecuteTask() Line 873 C++
UnrealEditor-RenderCore.dll!UE::Tasks::Private::FTaskBase::TryExecuteTask() Line 504 C++
[Inline Frame] UnrealEditor-RenderCore.dll!UE::Tasks::Private::FTaskBase::Init::__l2::<lambda_1>::operator()() Line 185 C++
[Inline Frame] UnrealEditor-RenderCore.dll!LowLevelTasks::FTask::Init::__l13::<lambda_1>::operator()(const bool) Line 499 C++
[Inline Frame] UnrealEditor-RenderCore.dll!Invoke(LowLevelTasks::FTask::Init::__l13::<lambda_1> &) Line 47 C++
[Inline Frame] UnrealEditor-RenderCore.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`UE::Tasks::Private::FTaskBase::Init'::`2'::<lambda_1>>'::`13'::<lambda_1>,0>::Call(void *) Line 162 C++
UnrealEditor-RenderCore.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`UE::Tasks::Private::FTaskBase::Init'::`2'::<lambda_1>>'::`13'::<lambda_1>,0>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> & Destination, void * InlineData, unsigned int DestInlineSize, bool <Params_0>) Line 171 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> &) Line 308 C++
UnrealEditor-Core.dll!LowLevelTasks::FTask::ExecuteTask() Line 627 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::ExecuteTask(LowLevelTasks::FTask * InTask) Line 245 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::FScheduler::TryExecuteTaskFrom(LowLevelTasks::Private::FWaitEvent *) Line 457 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerLoop(LowLevelTasks::Private::FWaitEvent * WorkerEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024,1024>::TLocalQueue * WorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 514 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerMain(LowLevelTasks::Private::FWaitEvent * WorkerEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024,1024>::TLocalQueue * WorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 571 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::CreateWorker::__l2::<lambda>() Line 75 C++
[Inline Frame] UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::TFunctionStorage<1>,void __cdecl(void)>::operator()() Line 470 C++
UnrealEditor-Core.dll!FThreadImpl::Run() Line 69 C++
UnrealEditor-Core.dll!FRunnableThreadWin::Run() Line 159 C++
UnrealEditor-Core.dll!FRunnableThreadWin::GuardedRun() Line 71 C++
[External Code]
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-247704 in the post.
0 |
Component | UE - Rendering Architecture - RHI |
---|---|
Affects Versions | 5.5 |
Created | Feb 12, 2025 |
---|---|
Resolved | Feb 14, 2025 |
Updated | Feb 18, 2025 |