From ad0678a8868c7fcd82f32ec912eee93c60055a4f Mon Sep 17 00:00:00 2001 From: Yifei Li Date: Tue, 6 Mar 2018 12:26:40 -0800 Subject: [PATCH] Fixed the issues encountered when trying to capture Dilan frames --- renderdoc/driver/d3d12/d3d12_commands.cpp | 1 + renderdoc/driver/d3d12/d3d12_device.cpp | 11 +++++++++++ renderdoc/driver/d3d12/d3d12_device.h | 2 ++ 3 files changed, 14 insertions(+) diff --git a/renderdoc/driver/d3d12/d3d12_commands.cpp b/renderdoc/driver/d3d12/d3d12_commands.cpp index 482b5515b..a83c9a16b 100644 --- a/renderdoc/driver/d3d12/d3d12_commands.cpp +++ b/renderdoc/driver/d3d12/d3d12_commands.cpp @@ -178,6 +178,7 @@ WrappedID3D12CommandQueue::WrappedID3D12CommandQueue(ID3D12CommandQueue *real, WrappedID3D12CommandQueue::~WrappedID3D12CommandQueue() { m_pDevice->GetResourceManager()->ReleaseCurrentResource(GetResourceID()); + m_pDevice->RemoveQueue(this); for(size_t i = 0; i < m_Cmd.m_IndirectBuffers.size(); i++) SAFE_RELEASE(m_Cmd.m_IndirectBuffers[i]); diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index 35dbe727f..44cdb7535 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -39,6 +39,17 @@ WRAPPED_POOL_INST(WrappedID3D12Device); +void WrappedID3D12Device::RemoveQueue(WrappedID3D12CommandQueue *queue) +{ + auto it = std::remove_if(m_Queues.begin(), m_Queues.end(), + [queue](const WrappedID3D12CommandQueue *q) { return q == queue; }); + + if(it != m_Queues.end()) + m_Queues.erase(it); + else + RDCERR("Unknown wrapped queue %p being remvoed", queue); +} + std::string WrappedID3D12Device::GetChunkName(uint32_t idx) { if((SystemChunk)idx < SystemChunk::FirstDriverChunk) diff --git a/renderdoc/driver/d3d12/d3d12_device.h b/renderdoc/driver/d3d12/d3d12_device.h index b90f65e2a..153361666 100644 --- a/renderdoc/driver/d3d12/d3d12_device.h +++ b/renderdoc/driver/d3d12/d3d12_device.h @@ -374,6 +374,8 @@ public: return m_DescriptorIncrements[type]; } + void RemoveQueue(WrappedID3D12CommandQueue *queue); + //////////////////////////////////////////////////////////////// // non wrapping interface