So the error appears to be occurring in the function FMaterialRenderProxy::EvaluateUniformExpressions in the MaterialShared.cpp.
In UE 4.20 the function contains this line:
// Create and cache the material's uniform buffer.
OutUniformExpressionCache.UniformBuffer = UniformExpressionSet.CreateUniformBuffer(Context, CommandListIfLocalMode, &OutUniformExpressionCache.LocalUniformBuffer);
And in UE 4.22 that line has been replaced with:
const FShaderParametersMetadata& UniformBufferStruct = UniformExpressionSet.GetUniformBufferStruct();
FMemMark Mark(FMemStack::Get());
void* TempBuffer = FMemStack::Get().PushBytes(UniformBufferStruct.GetSize(), SHADER_PARAMETER_STRUCT_ALIGNMENT);
UniformExpressionSet.FillUniformBuffer(Context, TempBuffer);
if (CommandListIfLocalMode)
{
OutUniformExpressionCache.LocalUniformBuffer = CommandListIfLocalMode->BuildLocalUniformBuffer(TempBuffer, UniformBufferStruct.GetSize(), UniformBufferStruct.GetLayout());
check(OutUniformExpressionCache.LocalUniformBuffer.IsValid());
}
else
{
if (IsValidRef(OutUniformExpressionCache.UniformBuffer))
{
check(OutUniformExpressionCache.UniformBuffer->GetLayout() == UniformBufferStruct.GetLayout());
RHIUpdateUniformBuffer(OutUniformExpressionCache.UniformBuffer, TempBuffer);
}
else
{
OutUniformExpressionCache.UniformBuffer = RHICreateUniformBuffer(TempBuffer, UniformBufferStruct.GetLayout(), UniformBuffer_MultiFrame);
}
}
The line check(OutUniformExpressionCache.UniformBuffer->GetLayout() == UniformBufferStruct.GetLayout());
is where the error dialogue states the error occurs. Other than the line in 4.20 being changed to the code from 4.22 the rest of the function is unchanged.
Unfortunately I am not familiar enough with UE4’s source to really understand what has been changed and why.