From 3ad05614f96d588f3d3d7bd0a93aedc2fc3c335a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Thu, 23 Sep 2021 17:49:15 +0200 Subject: [PATCH] Graphics: Use debug regions inside render pass to fix an issue with OpenGL context switch --- examples/DeferredShading/main.cpp | 8 ++++---- src/Nazara/Graphics/BakedFrameGraph.cpp | 8 ++++---- src/Nazara/Graphics/ForwardFramePipeline.cpp | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/DeferredShading/main.cpp b/examples/DeferredShading/main.cpp index accfa12b4..1045f8df2 100644 --- a/examples/DeferredShading/main.cpp +++ b/examples/DeferredShading/main.cpp @@ -1114,9 +1114,9 @@ int main() builder.TextureBarrier(Nz::PipelineStage::ColorOutput, Nz::PipelineStage::FragmentShader, Nz::MemoryAccess::ColorWrite, Nz::MemoryAccess::ShaderRead, Nz::TextureLayout::ColorOutput, Nz::TextureLayout::ColorInput, *bakedGraph.GetAttachmentTexture(backbuffer)); - builder.BeginDebugRegion("Main window rendering", Nz::Color::Green); + builder.BeginRenderPass(windowRT->GetFramebuffer(frame.GetFramebufferIndex()), windowRT->GetRenderPass(), windowRenderRect); { - builder.BeginRenderPass(windowRT->GetFramebuffer(frame.GetFramebufferIndex()), windowRT->GetRenderPass(), windowRenderRect); + builder.BeginDebugRegion("Main window rendering", Nz::Color::Green); { builder.SetScissor(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) }); builder.SetViewport(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) }); @@ -1126,9 +1126,9 @@ int main() builder.BindVertexBuffer(0, *fullscreenVertexBuffer); builder.Draw(3); } - builder.EndRenderPass(); + builder.EndDebugRegion(); } - builder.EndDebugRegion(); + builder.EndRenderPass(); }, Nz::QueueType::Graphics); frame.Present(); diff --git a/src/Nazara/Graphics/BakedFrameGraph.cpp b/src/Nazara/Graphics/BakedFrameGraph.cpp index ae7cc09bc..24c543748 100644 --- a/src/Nazara/Graphics/BakedFrameGraph.cpp +++ b/src/Nazara/Graphics/BakedFrameGraph.cpp @@ -62,11 +62,11 @@ namespace Nz builder.TextureBarrier(textureTransition.srcStageMask, textureTransition.dstStageMask, textureTransition.srcAccessMask, textureTransition.dstAccessMask, textureTransition.oldLayout, textureTransition.newLayout, *texture); } + builder.BeginRenderPass(*passData.framebuffer, *passData.renderPass, passData.renderRect); + if (!passData.name.empty()) builder.BeginDebugRegion(passData.name, Nz::Color::Green); - builder.BeginRenderPass(*passData.framebuffer, *passData.renderPass, passData.renderRect); - bool first = true; for (auto& subpass : passData.subpasses) { @@ -78,10 +78,10 @@ namespace Nz subpass.commandCallback(builder, passData.renderRect); } - builder.EndRenderPass(); - if (!passData.name.empty()) builder.EndDebugRegion(); + + builder.EndRenderPass(); }); passData.forceCommandBufferRegeneration = false; diff --git a/src/Nazara/Graphics/ForwardFramePipeline.cpp b/src/Nazara/Graphics/ForwardFramePipeline.cpp index be0bf3f8a..6d44ee007 100644 --- a/src/Nazara/Graphics/ForwardFramePipeline.cpp +++ b/src/Nazara/Graphics/ForwardFramePipeline.cpp @@ -348,9 +348,9 @@ namespace Nz clearValues[1].depth = 1.f; clearValues[1].stencil = 0; - builder.BeginDebugRegion("Main window rendering", Color::Green); + builder.BeginRenderPass(renderTarget.GetFramebuffer(renderFrame.GetFramebufferIndex()), renderTarget.GetRenderPass(), renderRegion, { clearValues[0], clearValues[1] }); { - builder.BeginRenderPass(renderTarget.GetFramebuffer(renderFrame.GetFramebufferIndex()), renderTarget.GetRenderPass(), renderRegion, { clearValues[0], clearValues[1] }); + builder.BeginDebugRegion("Main window rendering", Color::Green); { builder.SetScissor(renderRegion); builder.SetViewport(renderRegion); @@ -361,9 +361,9 @@ namespace Nz builder.Draw(3); } - builder.EndRenderPass(); + builder.EndDebugRegion(); } - builder.EndDebugRegion(); + builder.EndRenderPass(); }, QueueType::Graphics); }