From aad7551e4be7ff437ea033ebd0bb10b84d2c0b08 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 4 Dec 2018 23:53:41 +0000 Subject: [PATCH] Fix a couple of CPU memory leaks in D3D12 --- renderdoc/driver/d3d12/d3d12_commands.cpp | 2 ++ renderdoc/driver/d3d12/d3d12_commands.h | 9 +++++---- renderdoc/driver/dxgi/dxgi_wrapped.h | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_commands.cpp b/renderdoc/driver/d3d12/d3d12_commands.cpp index da98ea99c..9af378ff3 100644 --- a/renderdoc/driver/d3d12/d3d12_commands.cpp +++ b/renderdoc/driver/d3d12/d3d12_commands.cpp @@ -238,6 +238,8 @@ WrappedID3D12CommandQueue::WrappedID3D12CommandQueue(ID3D12CommandQueue *real, WrappedID3D12CommandQueue::~WrappedID3D12CommandQueue() { + SAFE_DELETE(m_FrameReader); + if(m_QueueRecord) m_QueueRecord->Delete(m_pDevice->GetResourceManager()); m_pDevice->GetResourceManager()->ReleaseCurrentResource(GetResourceID()); diff --git a/renderdoc/driver/d3d12/d3d12_commands.h b/renderdoc/driver/d3d12/d3d12_commands.h index 3c2c7e7b8..799e13869 100644 --- a/renderdoc/driver/d3d12/d3d12_commands.h +++ b/renderdoc/driver/d3d12/d3d12_commands.h @@ -152,6 +152,7 @@ class WrappedID3D12CommandSignature; struct BakedCmdListInfo { + ~BakedCmdListInfo() { SAFE_DELETE(draw); } void ShiftForRemoved(uint32_t shiftDrawID, uint32_t shiftEID, size_t idx); struct ExecuteData @@ -193,10 +194,10 @@ struct BakedCmdListInfo uint32_t beginChunk = 0; uint32_t endChunk = 0; - D3D12DrawcallTreeNode *draw; // the root draw to copy from when submitting - uint32_t eventCount; // how many events are in this cmd list, for quick skipping - uint32_t curEventID; // current event ID while reading or executing - uint32_t drawCount; // similar to above + D3D12DrawcallTreeNode *draw = NULL; // the root draw to copy from when submitting + uint32_t eventCount; // how many events are in this cmd list, for quick skipping + uint32_t curEventID; // current event ID while reading or executing + uint32_t drawCount; // similar to above }; class WrappedID3D12Device; diff --git a/renderdoc/driver/dxgi/dxgi_wrapped.h b/renderdoc/driver/dxgi/dxgi_wrapped.h index 7149aa936..549494b04 100644 --- a/renderdoc/driver/dxgi/dxgi_wrapped.h +++ b/renderdoc/driver/dxgi/dxgi_wrapped.h @@ -568,7 +568,8 @@ public: static void RegisterD3DDeviceCallback(D3DDeviceCallback callback) { - m_D3DCallbacks.push_back(callback); + if(std::find(m_D3DCallbacks.begin(), m_D3DCallbacks.end(), callback) == m_D3DCallbacks.end()) + m_D3DCallbacks.push_back(callback); } static ID3DDevice *GetD3DDevice(IUnknown *dev)