From b78f4b56248a82e643de005e19de2d0d7c7065e8 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 7 Feb 2022 20:42:28 +0000 Subject: [PATCH] Flush some commands before object destruction --- renderdoc/driver/vulkan/vk_core.cpp | 6 +++--- renderdoc/driver/vulkan/vk_outputwindow.cpp | 3 +++ renderdoc/driver/vulkan/vk_rendertexture.cpp | 5 +++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index b15c91aec..fa3213237 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -347,12 +347,12 @@ void WrappedVulkan::SubmitCmds(VkSemaphore *unwrappedWaitSemaphores, CheckVkResult(vkr); } + m_InternalCmds.submittedcmds.append(m_InternalCmds.pendingcmds); + m_InternalCmds.pendingcmds.clear(); + #if ENABLED(SINGLE_FLUSH_VALIDATE) FlushQ(); #endif - - m_InternalCmds.submittedcmds.append(m_InternalCmds.pendingcmds); - m_InternalCmds.pendingcmds.clear(); } VkSemaphore WrappedVulkan::GetNextSemaphore() diff --git a/renderdoc/driver/vulkan/vk_outputwindow.cpp b/renderdoc/driver/vulkan/vk_outputwindow.cpp index 3d3a3f2fd..959bdff76 100644 --- a/renderdoc/driver/vulkan/vk_outputwindow.cpp +++ b/renderdoc/driver/vulkan/vk_outputwindow.cpp @@ -85,6 +85,9 @@ VulkanReplay::OutputWindow::OutputWindow() void VulkanReplay::OutputWindow::Destroy(WrappedVulkan *driver, VkDevice device) { + driver->SubmitCmds(); + driver->FlushQ(); + const VkDevDispatchTable *vt = ObjDisp(device); vt->DeviceWaitIdle(Unwrap(device)); diff --git a/renderdoc/driver/vulkan/vk_rendertexture.cpp b/renderdoc/driver/vulkan/vk_rendertexture.cpp index 166bc097d..4c69022ec 100644 --- a/renderdoc/driver/vulkan/vk_rendertexture.cpp +++ b/renderdoc/driver/vulkan/vk_rendertexture.cpp @@ -39,6 +39,11 @@ void VulkanReplay::CreateTexImageView(VkImage liveIm, const VulkanCreationInfo:: if(views.typeCast != typeCast) { // if the type hint has changed, recreate the image views + + // flush any pending commands that might use the old views + m_pDriver->SubmitCmds(); + m_pDriver->FlushQ(); + for(size_t i = 0; i < ARRAY_COUNT(views.views); i++) { m_pDriver->vkDestroyImageView(dev, views.views[i], NULL);