I found 2 Shader output format mismatch with their Render Target, after enabling AGC validation.
1st one in ‘FVelocityPS’. I saw that it got refactored recently, but it is missing changes A & B for shader compatibility. B change is of particular importance for PC PSO compatibility.
2nd one is in Lumen Front Layer Translucency. This also got refactored to ‘FFrontLayerTranslucencyGBufferPS’ but still not taking into account the Render Target format as defined by ‘Lumen::GetFrontLayerTranslucencyNormalFormat()’ and allocated in ‘RenderFrontLayerTranslucency()’.
**** CHANGE A ****
class FVelocityPS : public FMeshMaterialShader
{
public:
...
static void ModifyCompilationEnvironment
{
...
OutEnvironment.SetRenderTargetOutputFormat(0, FVelocityRendering::GetFormat(Parameters.Platform)); <== CODE CHANGE
OutEnvironment.SetRenderTargetOutputFormat(1, FVelocityRendering::GetFormat(Parameters.Platform)); <== CODE CHANGE
}
...
}
**** CHANGE B ****
void ModifyBasePassCSPSCompilationEnvironment(const FMeshMaterialShaderPermutationParameters& Parameters, EGBufferLayout GBufferLayout, bool bEnableSkyLight, FShaderCompilerEnvironment& OutEnvironment)
{
...
const bool bOutputVelocity = (GBufferLayout == GBL_ForceVelocity) ||
FVelocityRendering::BasePassCanOutputVelocity(Parameters.Platform);
if (bOutputVelocity)
{
// As defined in BasePassPixelShader.usf. Also account for Substrate setting velocity in slot 1 as described in FetchLegacyGBufferInfo.
const int32 VelocityIndex = (Substrate::IsSubstrateEnabled() && !Substrate::IsSubstrateBlendableGBufferEnabled(Parameters.Platform)) ? 1 : (IsForwardShadingEnabled(Parameters.Platform) ? 1 : 4);
OutEnvironment.SetRenderTargetOutputFormat(VelocityIndex, FVelocityRendering::GetFormat(Parameters.Platform)); <== CODE CHANGE
}
...
}
**** CHANGE C ****
class FLumenFrontLayerTranslucencyClearGBufferPS : public FGlobalShader
{
...
<= METHOD ADDED =>
static void ModifyCompilationEnvironment(const FGlobalShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment)
{
FGlobalShader::ModifyCompilationEnvironment(Parameters, OutEnvironment);
OutEnvironment.SetRenderTargetOutputFormat(0, Lumen::GetFrontLayerTranslucencyNormalFormat());
}
};
**** CHANGE D ****
class FLumenFrontLayerTranslucencyGBufferPS : public FMeshMaterialShader
{
...
<= METHOD ADDED =>
static void ModifyCompilationEnvironment(const FMeshMaterialShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment)
{
FMeshMaterialShader::ModifyCompilationEnvironment(Parameters, OutEnvironment);
OutEnvironment.SetRenderTargetOutputFormat(0, Lumen::GetFrontLayerTranslucencyNormalFormat());
}
};
[Attachment Removed]