Distance field rhi validation fixes for missing/wrong transitions

#jira none
#rb Mihnea.Balta, Jonas.Meyer

[CL 14691291 by Kenzo Terelst in ue5-main branch]
This commit is contained in:
Kenzo Terelst
2020-11-09 12:52:29 -04:00
parent dd1fb93374
commit fde71a76d9
2 changed files with 12 additions and 5 deletions

View File

@@ -142,8 +142,8 @@ public:
UAVTransitions[1] = FRHITransitionInfo(GAOCulledObjectBuffers.Buffers.Bounds.UAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute);
UAVTransitions[2] = FRHITransitionInfo(GAOCulledObjectBuffers.Buffers.Data.UAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute);
UAVTransitions[3] = FRHITransitionInfo(GAOCulledObjectBuffers.Buffers.BoxBounds.UAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute);
UAVTransitions[4] = FRHITransitionInfo(Scene->DistanceFieldSceneData.GetCurrentObjectBuffers()->Data.UAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute);
UAVTransitions[5] = FRHITransitionInfo(Scene->DistanceFieldSceneData.GetCurrentObjectBuffers()->Bounds.UAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute);
UAVTransitions[4] = FRHITransitionInfo(Scene->DistanceFieldSceneData.GetCurrentObjectBuffers()->Data.UAV, ERHIAccess::Unknown, ERHIAccess::SRVCompute);
UAVTransitions[5] = FRHITransitionInfo(Scene->DistanceFieldSceneData.GetCurrentObjectBuffers()->Bounds.UAV, ERHIAccess::Unknown, ERHIAccess::SRVCompute);
RHICmdList.Transition(MakeArrayView(UAVTransitions, UE_ARRAY_COUNT(UAVTransitions)));
FRHIComputeShader* ShaderRHI = RHICmdList.GetBoundComputeShader();
@@ -514,6 +514,7 @@ public:
{
TransitionInfos.Add(FRHITransitionInfo(UAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute));
}
TransitionInfos.Add(FRHITransitionInfo(TileIntersectionResources->NumCulledTilesArray.UAV, ERHIAccess::Unknown, ERHIAccess::SRVMask));
RHICmdList.Transition(MakeArrayView(TransitionInfos.GetData(), TransitionInfos.Num()));
TileIntersectionParameters.Set(RHICmdList, ShaderRHI, *TileIntersectionResources);
@@ -549,7 +550,7 @@ void ScatterTilesToObjects(FRHICommandListImmediate& RHICmdList, const FViewInfo
TArray<FRHITransitionInfo> TransitionInfos;
for (FRHIUnorderedAccessView* UAV : UAVs)
{
TransitionInfos.Add(FRHITransitionInfo(UAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute));
TransitionInfos.Add(FRHITransitionInfo(UAV, ERHIAccess::Unknown, ERHIAccess::UAVMask));
}
RHICmdList.Transition(MakeArrayView(TransitionInfos.GetData(), TransitionInfos.Num()));

View File

@@ -155,6 +155,8 @@ public:
FTileIntersectionResources* TileIntersectionResources = View.ViewState->AOTileIntersectionResources;
SetSRVParameter(RHICmdList, ShaderRHI, TileConeDepthRanges, TileIntersectionResources->TileConeDepthRanges.SRV);
RHICmdList.Transition(FRHITransitionInfo(TileIntersectionResources->CulledTileDataArray.UAV, ERHIAccess::Unknown, ERHIAccess::SRVMask));
TileIntersectionParameters.Set(RHICmdList, ShaderRHI, *TileIntersectionResources);
extern float GAOConeHalfAngle;
@@ -306,7 +308,9 @@ public:
SetShaderValue(RHICmdList, ShaderRHI, BentNormalNormalizeFactor, BentNormalNormalizeFactorValue);
FAOScreenGridResources* ScreenGridResources = View.ViewState->AOScreenGridResources;
RHICmdList.Transition(FRHITransitionInfo(ScreenGridResources->ScreenGridConeVisibility.UAV, ERHIAccess::Unknown, ERHIAccess::UAVMask));
// Note: no transition, want to overlap object cone tracing and global DF cone tracing since both shaders use atomics to ScreenGridConeVisibility
RHICmdList.BeginUAVOverlap(ScreenGridResources->ScreenGridConeVisibility.UAV);
@@ -317,6 +321,8 @@ public:
{
ScreenGridConeVisibility.UnsetUAV(RHICmdList, RHICmdList.GetBoundComputeShader());
RHICmdList.EndUAVOverlap(View.ViewState->AOScreenGridResources->ScreenGridConeVisibility.UAV);
RHICmdList.Transition(FRHITransitionInfo(View.ViewState->AOScreenGridResources->ScreenGridConeVisibility.UAV, ERHIAccess::UAVMask, ERHIAccess::SRVMask));
}
private:
@@ -566,7 +572,7 @@ void FDeferredShadingSceneRenderer::RenderDistanceFieldAOScreenGrid(
SCOPED_DRAW_EVENT(RHICmdList, ConeTraceObjects);
FTileIntersectionResources* TileIntersectionResources = ((FSceneViewState*)View.State)->AOTileIntersectionResources;
RHICmdList.Transition(FRHITransitionInfo(ScreenGridResources->ScreenGridConeVisibility.UAV, ERHIAccess::UAVCompute, ERHIAccess::UAVCompute));
RHICmdList.Transition(FRHITransitionInfo(ScreenGridResources->ScreenGridConeVisibility.UAV, ERHIAccess::Unknown, ERHIAccess::UAVCompute));
if (bUseGlobalDistanceField)
{