Skip to content

Commit 94df84d

Browse files
committed
Remove ownership tracked list
* This list on replay is used to free all replay-created resources, but we can re-use the resource map for this.
1 parent 72a16ff commit 94df84d

40 files changed

+21
-599
lines changed

renderdoc/core/resource_manager.h

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -632,9 +632,6 @@ class ResourceManager : public ResourceRecordHandler
632632
///////////////////////////////////////////
633633
// Replay-side methods
634634

635-
// resources which are owned by the resource manager and so automatically released on shutdown
636-
void TakeResourceOwnership(WrappedResourceType res);
637-
638635
// when asked for a given id, return the resource for a replacement id
639636
void ReplaceResource(ResourceId from, ResourceId to);
640637
bool HasReplacement(ResourceId from);
@@ -744,9 +741,6 @@ class ResourceManager : public ResourceRecordHandler
744741
// capture and replay.
745742
std::unordered_map<ResourceId, WrappedResourceType> m_ResourceMap;
746743

747-
// used during replay - holds resources allocated for replay which should be automatically destroyed on shutdown
748-
rdcarray<WrappedResourceType> m_OwnedResources;
749-
750744
// used during capture - holds resource records by id.
751745
std::unordered_map<ResourceId, RecordType *> m_ResourceRecords;
752746
Threading::RWLock m_ResourceRecordLock;
@@ -809,13 +803,18 @@ void ResourceManager<Configuration>::Shutdown()
809803
{
810804
FreeInitialContents();
811805

812-
while(!m_OwnedResources.empty())
806+
if(!m_Capturing)
813807
{
814-
WrappedResourceType it = m_OwnedResources.back();
815-
ResourceTypeRelease(it);
808+
while(!m_ResourceMap.empty())
809+
{
810+
auto it = m_ResourceMap.begin();
811+
ResourceId id = it->first;
812+
ResourceTypeRelease(it->second);
816813

817-
if(it == m_OwnedResources.back())
818-
m_OwnedResources.pop_back();
814+
auto removeit = m_ResourceMap.find(id);
815+
if(removeit != m_ResourceMap.end())
816+
m_ResourceMap.erase(removeit);
817+
}
819818
}
820819

821820
RDCASSERT(m_ResourceRecords.empty());
@@ -824,7 +823,7 @@ void ResourceManager<Configuration>::Shutdown()
824823
template <typename Configuration>
825824
ResourceManager<Configuration>::~ResourceManager()
826825
{
827-
RDCASSERT(m_OwnedResources.empty());
826+
RDCASSERT(m_ResourceMap.empty());
828827
RDCASSERT(m_InitialContents.empty());
829828
RDCASSERT(m_ResourceRecords.empty());
830829

@@ -1829,14 +1828,6 @@ typename Configuration::WrappedResourceType ResourceManager<Configuration>::GetW
18291828
return m_WrapperMap[real];
18301829
}
18311830

1832-
template <typename Configuration>
1833-
void ResourceManager<Configuration>::TakeResourceOwnership(WrappedResourceType res)
1834-
{
1835-
RDCASSERT(!m_Capturing);
1836-
1837-
m_OwnedResources.push_back(res);
1838-
}
1839-
18401831
template <typename Configuration>
18411832
typename Configuration::WrappedResourceType ResourceManager<Configuration>::GetResource(ResourceId id,
18421833
bool optional)
@@ -1900,12 +1891,7 @@ void ResourceManager<Configuration>::ReleaseResource(ResourceId id)
19001891
if(IsActiveCapturing(m_State))
19011892
Prepare_InitialStateIfPostponed(id, true);
19021893

1903-
{
1904-
auto it = m_ResourceMap.find(id);
1905-
m_OwnedResources.removeOne(it->second);
1906-
m_ResourceMap.erase(it);
1907-
}
1908-
1894+
m_ResourceMap.erase(id);
19091895
m_DirtyResources.erase(id);
19101896

19111897
auto it = std::lower_bound(m_ResourceRefTimes.begin(), m_ResourceRefTimes.end(), id);

renderdoc/driver/d3d11/d3d11_device.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,7 +1036,6 @@ bool WrappedID3D11Device::ProcessChunk(ReadSerialiser &ser, D3D11Chunk context)
10361036
{
10371037
m_pImmediateContext->AddRef();
10381038
m_pImmediateContext->SetReplayResourceID(ImmediateContext);
1039-
m_ResourceManager->TakeResourceOwnership(m_pImmediateContext);
10401039

10411040
ResourceId descId = m_pImmediateContext->GetDescriptorsID();
10421041
AddResource(descId, ResourceType::DescriptorStore, "");
@@ -1734,8 +1733,6 @@ bool WrappedID3D11Device::Serialise_WrapSwapchainBuffer(SerialiserType &ser, IDX
17341733
wrapped->m_RealDescriptor = new D3D11_TEXTURE2D_DESC(realDescriptor);
17351734

17361735
SetDebugName(fakeBB, "Serialised Swap Chain Buffer");
1737-
1738-
GetResourceManager()->TakeResourceOwnership(fakeBB);
17391736
}
17401737
}
17411738

@@ -1800,10 +1797,6 @@ IUnknown *WrappedID3D11Device::WrapSwapchainBuffer(IDXGISwapper *swapper, DXGI_F
18001797

18011798
record->AddChunk(scope.Get());
18021799
}
1803-
else
1804-
{
1805-
GetResourceManager()->TakeResourceOwnership(pTex);
1806-
}
18071800
}
18081801

18091802
if(buffer == 0 && IsCaptureMode(m_State) && m_SwapChains[swapper] == NULL)

renderdoc/driver/d3d11/d3d11_device1_wrap.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,10 @@ bool WrappedID3D11Device::Serialise_CreateBlendState1(SerialiserType &ser,
107107
ret->Release();
108108
ret = (ID3D11BlendState1 *)GetResourceManager()->GetWrapper(ret);
109109
ret->AddRef();
110-
111-
GetResourceManager()->TakeResourceOwnership(ret);
112110
}
113111
else
114112
{
115113
ret = new WrappedID3D11BlendState1(pState, ret, this);
116-
117-
GetResourceManager()->TakeResourceOwnership(ret);
118114
}
119115
}
120116

@@ -225,14 +221,10 @@ bool WrappedID3D11Device::Serialise_CreateRasterizerState1(
225221
ret->Release();
226222
ret = (ID3D11RasterizerState1 *)GetResourceManager()->GetWrapper(ret);
227223
ret->AddRef();
228-
229-
GetResourceManager()->TakeResourceOwnership(ret);
230224
}
231225
else
232226
{
233227
ret = new WrappedID3D11RasterizerState2(pState, ret, this);
234-
235-
GetResourceManager()->TakeResourceOwnership(ret);
236228
}
237229
}
238230

renderdoc/driver/d3d11/d3d11_device3_wrap.cpp

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,6 @@ bool WrappedID3D11Device::Serialise_CreateTexture2D1(SerialiserType &ser,
9797
else
9898
{
9999
ret = new WrappedID3D11Texture2D1(pTexture, (ID3D11Texture2D1 *)ret, this, dispType);
100-
101-
GetResourceManager()->TakeResourceOwnership(ret);
102100
}
103101

104102
const char *prefix = Descriptor.ArraySize > 1 ? "2D TextureArray" : "2D Texture";
@@ -163,10 +161,6 @@ HRESULT WrappedID3D11Device::CreateTexture2D1(const D3D11_TEXTURE2D_DESC1 *pDesc
163161
record->AddChunk(chunk);
164162
record->SetDataPtr(chunk->GetData());
165163
}
166-
else
167-
{
168-
GetResourceManager()->TakeResourceOwnership(wrapped);
169-
}
170164

171165
*ppTexture2D = wrapped;
172166
}
@@ -240,8 +234,6 @@ bool WrappedID3D11Device::Serialise_CreateTexture3D1(SerialiserType &ser,
240234
else
241235
{
242236
ret = new WrappedID3D11Texture3D1(pTexture, (ID3D11Texture3D1 *)ret, this, dispType);
243-
244-
GetResourceManager()->TakeResourceOwnership(ret);
245237
}
246238

247239
const char *prefix = "3D Texture";
@@ -302,10 +294,6 @@ HRESULT WrappedID3D11Device::CreateTexture3D1(const D3D11_TEXTURE3D_DESC1 *pDesc
302294
record->AddChunk(chunk);
303295
record->SetDataPtr(chunk->GetData());
304296
}
305-
else
306-
{
307-
GetResourceManager()->TakeResourceOwnership(wrapped);
308-
}
309297

310298
*ppTexture3D = wrapped;
311299
}
@@ -386,8 +374,6 @@ bool WrappedID3D11Device::Serialise_CreateShaderResourceView1(
386374
else
387375
{
388376
ret = new WrappedID3D11ShaderResourceView1(pView, ret, pResource, this);
389-
390-
GetResourceManager()->TakeResourceOwnership(ret);
391377
}
392378

393379
AddResource(pView, ResourceType::View, "Shader Resource View");
@@ -525,8 +511,6 @@ bool WrappedID3D11Device::Serialise_CreateRenderTargetView1(SerialiserType &ser,
525511
else
526512
{
527513
ret = new WrappedID3D11RenderTargetView1(pView, ret, pResource, this);
528-
529-
GetResourceManager()->TakeResourceOwnership(ret);
530514
}
531515

532516
AddResource(pView, ResourceType::View, "Render Target View");
@@ -634,8 +618,6 @@ bool WrappedID3D11Device::Serialise_CreateUnorderedAccessView1(
634618
else
635619
{
636620
ret = new WrappedID3D11UnorderedAccessView1(pView, ret, pResource, this);
637-
638-
GetResourceManager()->TakeResourceOwnership(ret);
639621
}
640622

641623
AddResource(pView, ResourceType::View, "Unordered Access View");
@@ -757,14 +739,10 @@ bool WrappedID3D11Device::Serialise_CreateRasterizerState2(
757739
ret->Release();
758740
ret = (ID3D11RasterizerState2 *)GetResourceManager()->GetWrapper(ret);
759741
ret->AddRef();
760-
761-
GetResourceManager()->TakeResourceOwnership(ret);
762742
}
763743
else
764744
{
765745
ret = new WrappedID3D11RasterizerState2(pState, ret, this);
766-
767-
GetResourceManager()->TakeResourceOwnership(ret);
768746
}
769747
}
770748

@@ -873,8 +851,6 @@ bool WrappedID3D11Device::Serialise_CreateQuery1(SerialiserType &ser,
873851
else
874852
{
875853
ret = new WrappedID3D11Query1(pQuery, ret, this);
876-
877-
GetResourceManager()->TakeResourceOwnership(ret);
878854
}
879855

880856
AddResource(pQuery, ResourceType::Query, "Query");

0 commit comments

Comments
 (0)