diff --git a/renderdoc/driver/vulkan/vk_overlay.cpp b/renderdoc/driver/vulkan/vk_overlay.cpp index dbb0d98a2..1143be6cb 100644 --- a/renderdoc/driver/vulkan/vk_overlay.cpp +++ b/renderdoc/driver/vulkan/vk_overlay.cpp @@ -497,18 +497,6 @@ ResourceId VulkanReplay::RenderOverlay(ResourceId texid, FloatVector clearCol, D VulkanCreationInfo::Image &iminfo = m_pDriver->m_CreationInfo.m_Image[texid]; - // bail out if the framebuffer dimensions don't match the current framebuffer, or draws will fail. - // This is an order-of-operations problem, if the overlay is set when the event is changed it is - // refreshed before the UI layer can update the current texture. - { - const VulkanCreationInfo::Framebuffer &fb = - m_pDriver->m_CreationInfo.m_Framebuffer[m_pDriver->m_RenderState.GetFramebuffer()]; - - if(fb.width != RDCMAX(1U, iminfo.extent.width >> sub.mip) || - fb.height != RDCMAX(1U, iminfo.extent.height >> sub.mip)) - return GetResID(m_Overlay.Image); - } - VkCommandBuffer cmd = m_pDriver->GetNextCmd(); VkCommandBufferBeginInfo beginInfo = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, NULL, @@ -712,6 +700,17 @@ ResourceId VulkanReplay::RenderOverlay(ResourceId texid, FloatVector clearCol, D // needs to match the depth texture type wherever our draw is. } + // bail out if the render area is outside our image. + // This is an order-of-operations problem, if the overlay is set when the event is changed it is + // refreshed before the UI layer can update the current texture. + if(m_pDriver->m_RenderState.renderArea.offset.x + m_pDriver->m_RenderState.renderArea.extent.width > + (m_Overlay.ImageDim.width >> sub.mip) || + m_pDriver->m_RenderState.renderArea.offset.y + m_pDriver->m_RenderState.renderArea.extent.height > + (m_Overlay.ImageDim.height >> sub.mip)) + { + return GetResID(m_Overlay.Image); + } + { VkImageSubresourceRange fullSubRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS};