From 7fdd770b153aebe53718808c3f478470d0c681df Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 11 Jul 2017 19:53:59 +0100 Subject: [PATCH] Don't destroy events that we back into persistently recorded cmd buffers --- renderdoc/driver/vulkan/vk_core.h | 1 + renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp | 6 ++++++ renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp | 5 +++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index e59f7a7d6..b43f139b1 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -377,6 +377,7 @@ private: vector m_CleanupMems; vector m_CleanupEvents; + vector m_PersistentEvents; const VkPhysicalDeviceProperties &GetDeviceProps() { return m_PhysicalDeviceData.props; } VkDriverInfo GetDriverVersion() { return VkDriverInfo(m_PhysicalDeviceData.props); } diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index a3c1d2992..e817c09b7 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -418,6 +418,12 @@ void WrappedVulkan::Shutdown() SubmitSemaphores(); FlushQ(); + // destroy any events we created for waiting on + for(size_t i = 0; i < m_PersistentEvents.size(); i++) + ObjDisp(GetDev())->DestroyEvent(Unwrap(GetDev()), m_PersistentEvents[i], NULL); + + m_PersistentEvents.clear(); + // since we didn't create proper registered resources for our command buffers, // they won't be taken down properly with the pool. So we release them (just our // data) here. diff --git a/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp index 2b7013797..72f9b346a 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp @@ -765,8 +765,9 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents( (uint32_t)bufBarriers.size(), &bufBarriers[0], (uint32_t)imgBarriers.size(), &imgBarriers[0]); - // register to clean this event up once we're done replaying this section of the log - m_CleanupEvents.push_back(ev); + // since we cache and replay this command buffer we can't clean up this event just when we're + // done replaying this section. We have to keep this event until shutdown + m_PersistentEvents.push_back(ev); ResourceId cmd = GetResID(cmdBuffer); GetResourceManager()->RecordBarriers(m_BakedCmdBufferInfo[cmd].imgbarriers, m_ImageLayouts,