diff --git a/renderdoc/core/resource_manager.h b/renderdoc/core/resource_manager.h index f153e7156..a25cc27d8 100644 --- a/renderdoc/core/resource_manager.h +++ b/renderdoc/core/resource_manager.h @@ -638,7 +638,7 @@ public: // Live resources to replace serialised IDs void AddLiveResource(ResourceId origid, WrappedResourceType livePtr); bool HasLiveResource(ResourceId origid); - WrappedResourceType GetLiveResource(ResourceId origid); + WrappedResourceType GetLiveResource(ResourceId origid, bool optional = false); void EraseLiveResource(ResourceId origid); // when asked for a given id, return the resource for a replacement id @@ -1816,20 +1816,31 @@ bool ResourceManager::HasLiveResource(ResourceId origid) template typename Configuration::WrappedResourceType ResourceManager::GetLiveResource( - ResourceId origid) + ResourceId origid, bool optional) { SCOPED_LOCK_OPTIONAL(m_Lock, m_Capturing); if(origid == ResourceId()) return (WrappedResourceType)RecordType::NullResource; - RDCASSERT(HasLiveResource(origid), origid); +#if DISABLED(RDOC_RELEASE) + if(!optional) + { + RDCASSERT(HasLiveResource(origid), origid); + } +#endif - if(m_Replacements.find(origid) != m_Replacements.end()) - return GetLiveResource(m_Replacements[origid]); + { + auto it = m_Replacements.find(origid); + if(it != m_Replacements.end()) + return GetLiveResource(it->second); + } - if(m_LiveResourceMap.find(origid) != m_LiveResourceMap.end()) - return m_LiveResourceMap[origid]; + { + auto it = m_LiveResourceMap.find(origid); + if(it != m_LiveResourceMap.end()) + return it->second; + } return (WrappedResourceType)RecordType::NullResource; } diff --git a/renderdoc/driver/d3d12/d3d12_manager.cpp b/renderdoc/driver/d3d12/d3d12_manager.cpp index baa35cb0e..04f71cffc 100644 --- a/renderdoc/driver/d3d12/d3d12_manager.cpp +++ b/renderdoc/driver/d3d12/d3d12_manager.cpp @@ -629,10 +629,8 @@ D3D12Descriptor *DescriptorFromPortableHandle(D3D12ResourceManager *manager, Por if(handle.heap == ResourceId()) return NULL; - if(!manager->HasLiveResource(handle.heap)) - return NULL; - - WrappedID3D12DescriptorHeap *heap = manager->GetLiveAs(handle.heap); + WrappedID3D12DescriptorHeap *heap = + manager->GetLiveAs(handle.heap, true); if(heap) return heap->GetDescriptors() + handle.index; diff --git a/renderdoc/driver/d3d12/d3d12_manager.h b/renderdoc/driver/d3d12/d3d12_manager.h index aca09f375..9d32b4c97 100644 --- a/renderdoc/driver/d3d12/d3d12_manager.h +++ b/renderdoc/driver/d3d12/d3d12_manager.h @@ -693,9 +693,9 @@ public: { } template - T *GetLiveAs(ResourceId id) + T *GetLiveAs(ResourceId id, bool optional = false) { - return (T *)GetLiveResource(id); + return (T *)GetLiveResource(id, optional); } template