From 90cc325b53514748746df80708a540cbda533d03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sun, 15 Nov 2020 22:30:16 +0100 Subject: [PATCH] Clears didn't always properly set the RenderArea. Should help #13664 --- Common/GPU/Vulkan/VulkanRenderManager.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Common/GPU/Vulkan/VulkanRenderManager.cpp b/Common/GPU/Vulkan/VulkanRenderManager.cpp index b70848cb28..f7f15e58f1 100644 --- a/Common/GPU/Vulkan/VulkanRenderManager.cpp +++ b/Common/GPU/Vulkan/VulkanRenderManager.cpp @@ -551,7 +551,7 @@ void VulkanRenderManager::EndCurRenderStep() { void VulkanRenderManager::BindFramebufferAsRenderTarget(VKRFramebuffer *fb, VKRRenderPassAction color, VKRRenderPassAction depth, VKRRenderPassAction stencil, uint32_t clearColor, float clearDepth, uint8_t clearStencil, const char *tag) { _dbg_assert_(insideFrame_); - // Eliminate dupes, instantly convert to a clear if possible. + // Eliminate dupes (bind of the framebuffer we already are rendering to), instantly convert to a clear if possible. if (!steps_.empty() && steps_.back()->stepType == VKRStepType::RENDER && steps_.back()->render.framebuffer == fb) { u32 clearMask = 0; if (color == VKRRenderPassAction::CLEAR) { @@ -587,6 +587,7 @@ void VulkanRenderManager::BindFramebufferAsRenderTarget(VKRFramebuffer *fb, VKRR data.clear.clearStencil = clearStencil; data.clear.clearMask = clearMask; curRenderStep_->commands.push_back(data); + curRenderArea_.SetRect(0, 0, curWidth_, curHeight_); } return; } @@ -667,6 +668,10 @@ void VulkanRenderManager::BindFramebufferAsRenderTarget(VKRFramebuffer *fb, VKRR } } + if (color == VKRRenderPassAction::CLEAR || depth == VKRRenderPassAction::CLEAR || stencil == VKRRenderPassAction::CLEAR) { + curRenderArea_.SetRect(0, 0, curWidth_, curHeight_); + } + // See above - we add a clear afterward if only one side for depth/stencil CLEAR/KEEP. if (lateClearMask != 0) { VkRenderData data{ VKRRenderCommand::CLEAR };