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);