From d128d776ad906d6b8d3941eda7b7ee679346dbaf Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sat, 28 Sep 2019 03:29:52 +0200 Subject: [PATCH] [dxvk] Re-introduce state check for updateFramebuffer Turns out we broke batching render target clears earlier. --- src/dxvk/dxvk_context.cpp | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 5245319ce..b4f679fa2 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -3970,24 +3970,26 @@ namespace dxvk { void DxvkContext::updateFramebuffer() { - m_flags.clr(DxvkContextFlag::GpDirtyFramebuffer); - - this->spillRenderPass(); - - auto fb = m_device->createFramebuffer(m_state.om.renderTargets); - - m_state.gp.state.msSampleCount = fb->getSampleCount(); - m_state.om.framebuffer = fb; + if (m_flags.test(DxvkContextFlag::GpDirtyFramebuffer)) { + m_flags.clr(DxvkContextFlag::GpDirtyFramebuffer); - for (uint32_t i = 0; i < MaxNumRenderTargets; i++) { - Rc attachment = fb->getColorTarget(i).view; + this->spillRenderPass(); - m_state.gp.state.omComponentMapping[i] = attachment != nullptr - ? util::invertComponentMapping(attachment->info().swizzle) - : VkComponentMapping(); + auto fb = m_device->createFramebuffer(m_state.om.renderTargets); + + m_state.gp.state.msSampleCount = fb->getSampleCount(); + m_state.om.framebuffer = fb; + + for (uint32_t i = 0; i < MaxNumRenderTargets; i++) { + Rc attachment = fb->getColorTarget(i).view; + + m_state.gp.state.omComponentMapping[i] = attachment != nullptr + ? util::invertComponentMapping(attachment->info().swizzle) + : VkComponentMapping(); + } + + m_flags.set(DxvkContextFlag::GpDirtyPipelineState); } - - m_flags.set(DxvkContextFlag::GpDirtyPipelineState); }