diff --git a/ReleaseNotes.md b/ReleaseNotes.md index f9a52acec..ee98fcc6a 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -13,7 +13,7 @@ Current Support ======== * A single VkInstance/VkQueue/VkDevice triple is supported. -* Capture and replay of a single frame at a time. +* Capture and replay of single-frame captures. * On replay you can step into each vkQueueSubmit call to see the command buffers submitted, and step into them to browse through the commands. * The pipeline state will be displayed at each command, roughly showing the data contained in each member of the pipeline createinfo struct, as well as dynamic state. * Simple disassembly/reflection of SPIR-V to determine which descriptors to read for read-only resources and uniform buffers. The uniform buffers will be listed separately and the member variables filled out. @@ -31,6 +31,8 @@ On capture: * Memory maps are not intercepted, so any modifications are saved by reading back from the mapped pointer, even if it is uncached/write combined. * Image contents are saved out by copying aliasing their backing memory to a buffer, so will not be GPU-portable. * Captures will not be GPU-portable where memory indices etc change. +* There might be memory leaks per-capture. +* Memory leaks each time a new capture is loaded in the replay UI. * Unsupported or untested features: * Subpasses * Nested command buffer execution diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index 274fff343..b73f78be4 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -936,6 +936,8 @@ VkResult WrappedVulkan::vkQueuePresentKHR( // delete cmd buffers now - had to keep them alive until after serialiser flush. for(size_t i=0; i < m_CmdBufferRecords.size(); i++) m_CmdBufferRecords[i]->Delete(GetResourceManager()); + + m_CmdBufferRecords.clear(); GetResourceManager()->MarkUnwrittenResources(); @@ -945,7 +947,7 @@ VkResult WrappedVulkan::vkQueuePresentKHR( } } - if(RenderDoc::Inst().ShouldTriggerCapture(m_FrameCounter) && m_State == WRITING_IDLE && m_FrameRecord.empty()) + if(RenderDoc::Inst().ShouldTriggerCapture(m_FrameCounter) && m_State == WRITING_IDLE) { FetchFrameRecord record; record.frameInfo.frameNumber = m_FrameCounter+1;