From a19b7ea3c436d392ca64250bcce8f3ee97edfa3a Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 22 Nov 2024 18:48:21 +0000 Subject: [PATCH] Use more efficient storage for forced references on D3D12 --- renderdoc/driver/d3d12/d3d12_device.cpp | 4 ++-- renderdoc/driver/d3d12/d3d12_device.h | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index e19215cd7..300f3c4bc 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -3346,7 +3346,7 @@ void WrappedID3D12Device::AddForcedReference(D3D12ResourceRecord *record) { { SCOPED_LOCK(m_ForcedReferencesLock); - m_ForcedReferences.push_back(record); + m_ForcedReferences.insert(record); } // in case we're currently capturing, immediately consider the resource as referenced. If we're @@ -3368,7 +3368,7 @@ void WrappedID3D12Device::ReleaseResource(ID3D12DeviceChild *res) { SCOPED_LOCK(m_ForcedReferencesLock); - m_ForcedReferences.removeOne(GetRecord(res)); + m_ForcedReferences.erase(GetRecord(res)); } { diff --git a/renderdoc/driver/d3d12/d3d12_device.h b/renderdoc/driver/d3d12/d3d12_device.h index dd981b06b..ea51c7c3d 100644 --- a/renderdoc/driver/d3d12/d3d12_device.h +++ b/renderdoc/driver/d3d12/d3d12_device.h @@ -585,7 +585,7 @@ private: rdcarray m_RefQueues; rdcarray m_RefBuffers; - rdcarray m_ForcedReferences; + std::unordered_set m_ForcedReferences; Threading::CriticalSection m_ForcedReferencesLock; bool m_HaveSeenASBuild = false; Intervals m_ASDebugTracking; @@ -598,7 +598,9 @@ private: { SCOPED_LOCK(m_ForcedReferencesLock); - ret = m_ForcedReferences; + ret.reserve(m_ForcedReferences.size()); + for(auto it = m_ForcedReferences.begin(); it != m_ForcedReferences.end(); ++it) + ret.push_back(*it); } return ret;