From 15cfee632b1a65c9ab6de94fe1043ba58f5f0293 Mon Sep 17 00:00:00 2001 From: Julien Ignace Date: Thu, 25 Jun 2020 18:22:35 +0200 Subject: [PATCH] Fixed a number of small issue when running XR and Render Graph at the same time. --- .../HDRenderPipeline.RenderGraph.cs | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs index 9c9d5f0ce74..c3d27144348 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs @@ -45,11 +45,11 @@ void ExecuteWithRenderGraph( RenderRequest renderRequest, if (m_CurrentDebugDisplaySettings.IsDebugMaterialDisplayEnabled() || m_CurrentDebugDisplaySettings.IsMaterialValidationEnabled() || CoreUtils.IsSceneLightingDisabled(hdCamera.camera)) { - using (new XRSinglePassScope(m_RenderGraph, hdCamera)) - { - colorBuffer = RenderDebugViewMaterial(m_RenderGraph, cullingResults, hdCamera); - colorBuffer = ResolveMSAAColor(m_RenderGraph, hdCamera, colorBuffer); - } + // Stop Single Pass is after post process. + StartXRSinglePass(m_RenderGraph, hdCamera); + + colorBuffer = RenderDebugViewMaterial(m_RenderGraph, cullingResults, hdCamera); + colorBuffer = ResolveMSAAColor(m_RenderGraph, hdCamera, colorBuffer); } else if (hdCamera.frameSettings.IsEnabled(FrameSettingsField.RayTracing) && hdCamera.volumeStack.GetComponent().enable.value) @@ -266,11 +266,16 @@ void ExecuteWithRenderGraph( RenderRequest renderRequest, shadowResult, cullingResults); - BlitFinalCameraTexture(m_RenderGraph, hdCamera, postProcessDest, backBuffer, prepassOutput.resolvedMotionVectorsBuffer, prepassOutput.resolvedNormalBuffer); + StopXRSinglePass(m_RenderGraph, hdCamera); - if (target.targetDepth != null) + for (int viewIndex = 0; viewIndex < hdCamera.viewCount; ++viewIndex) { - BlitFinalCameraTexture(m_RenderGraph, hdCamera, prepassOutput.depthBuffer, m_RenderGraph.ImportTexture(target.targetDepth), prepassOutput.resolvedMotionVectorsBuffer, prepassOutput.resolvedNormalBuffer); + BlitFinalCameraTexture(m_RenderGraph, hdCamera, postProcessDest, backBuffer, prepassOutput.resolvedMotionVectorsBuffer, prepassOutput.resolvedNormalBuffer, viewIndex); + + if (target.targetDepth != null) + { + BlitFinalCameraTexture(m_RenderGraph, hdCamera, prepassOutput.depthBuffer, m_RenderGraph.ImportTexture(target.targetDepth), prepassOutput.resolvedMotionVectorsBuffer, prepassOutput.resolvedNormalBuffer, viewIndex); + } } aovRequest.PushCameraTexture(m_RenderGraph, AOVBuffers.Output, hdCamera, postProcessDest, aovBuffers); @@ -312,11 +317,11 @@ class FinalBlitPassData public TextureHandle destination; } - void BlitFinalCameraTexture(RenderGraph renderGraph, HDCamera hdCamera, TextureHandle source, TextureHandle destination, TextureHandle motionVectors, TextureHandle normalBuffer) + void BlitFinalCameraTexture(RenderGraph renderGraph, HDCamera hdCamera, TextureHandle source, TextureHandle destination, TextureHandle motionVectors, TextureHandle normalBuffer, int viewIndex) { using (var builder = renderGraph.AddRenderPass("Final Blit (Dev Build Only)", out var passData)) { - passData.parameters = PrepareFinalBlitParameters(hdCamera, 0); // todo viewIndex + passData.parameters = PrepareFinalBlitParameters(hdCamera, viewIndex); // todo viewIndex passData.source = builder.ReadTexture(source); passData.destination = builder.WriteTexture(destination);