diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 6c22c64d3..5413a3178 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1483,6 +1483,8 @@ ReplayStatus WrappedVulkan::ReadLogInitialisation(RDCFile *rdc, bool storeStruct { int sectionIdx = rdc->SectionIndex(SectionType::FrameCapture); + GetResourceManager()->SetState(m_State); + if(sectionIdx < 0) return ReplayStatus::FileCorrupted; @@ -1788,13 +1790,13 @@ ReplayStatus WrappedVulkan::ContextReplayLog(CaptureState readType, uint32_t sta // destroy any events we created for waiting on for(size_t i = 0; i < m_CleanupEvents.size(); i++) ObjDisp(GetDev())->DestroyEvent(Unwrap(GetDev()), m_CleanupEvents[i], NULL); + + vkFreeCommandBuffers(GetDev(), m_InternalCmds.cmdpool, (uint32_t)m_RerecordCmdList.size(), + m_RerecordCmdList.data()); } m_CleanupEvents.clear(); - vkFreeCommandBuffers(GetDev(), m_InternalCmds.cmdpool, (uint32_t)m_RerecordCmdList.size(), - m_RerecordCmdList.data()); - m_RerecordCmds.clear(); m_RerecordCmdList.clear(); diff --git a/renderdoc/driver/vulkan/vk_manager.h b/renderdoc/driver/vulkan/vk_manager.h index a7bc9d732..82755a204 100644 --- a/renderdoc/driver/vulkan/vk_manager.h +++ b/renderdoc/driver/vulkan/vk_manager.h @@ -182,6 +182,8 @@ public: : ResourceManager(), m_State(state), m_Core(core) { } + void SetState(CaptureState state) { m_State = state; } + CaptureState GetState() { return m_State; } ~VulkanResourceManager() {} void ClearWithoutReleasing() { diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 922732855..d6869b1a0 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -87,7 +87,7 @@ void DoSerialiseViaResourceId(SerialiserType &ser, type &el) DoSerialise(ser, id); - if(ser.IsReading()) + if(ser.IsReading() && !IsStructuredExporting(rm->GetState())) { el = VK_NULL_HANDLE;