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;