mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-11 01:01:05 +00:00
D3D11 views now get separate lifetime tracking
* This means that rapidly creating and destroying views doesn't 'leak' and create more and more chunks in-program and more and more uselessly created views on replay.
This commit is contained in:
@@ -460,7 +460,6 @@ void WrappedID3D11DeviceContext::ClearView(ID3D11View *pView, const FLOAT Color[
|
||||
ID3D11Resource *viewRes = NULL;
|
||||
pView->GetResource(&viewRes);
|
||||
|
||||
m_MissingTracks.insert(GetIDForResource(pView));
|
||||
m_MissingTracks.insert(GetIDForResource(viewRes));
|
||||
|
||||
SAFE_RELEASE(viewRes);
|
||||
@@ -472,13 +471,8 @@ void WrappedID3D11DeviceContext::ClearView(ID3D11View *pView, const FLOAT Color[
|
||||
SCOPED_SERIALISE_CONTEXT(CLEAR_VIEW);
|
||||
m_pSerialiser->Serialise("context", m_ResourceID);
|
||||
Serialise_ClearView(pView, Color, pRect, NumRects);
|
||||
|
||||
ID3D11Resource *viewRes = NULL;
|
||||
pView->GetResource(&viewRes);
|
||||
ResourceId id = GetIDForResource(viewRes);
|
||||
SAFE_RELEASE(viewRes);
|
||||
|
||||
D3D11ResourceRecord *record = m_pDevice->GetResourceManager()->GetResourceRecord(id);
|
||||
D3D11ResourceRecord *record = m_pDevice->GetResourceManager()->GetResourceRecord(GetIDForResource(pView));
|
||||
RDCASSERT(record);
|
||||
|
||||
record->AddChunk(scope.Get());
|
||||
|
||||
@@ -706,6 +706,7 @@ void WrappedID3D11DeviceContext::VSSetShaderResources(UINT StartSlot, UINT NumVi
|
||||
{
|
||||
ID3D11Resource *res = NULL;
|
||||
ppShaderResourceViews[i]->GetResource(&res);
|
||||
MarkResourceReferenced(GetIDForResource(ppShaderResourceViews[i]), eFrameRef_Read);
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
}
|
||||
@@ -1067,6 +1068,7 @@ void WrappedID3D11DeviceContext::HSSetShaderResources(UINT StartSlot, UINT NumVi
|
||||
{
|
||||
ID3D11Resource *res = NULL;
|
||||
ppShaderResourceViews[i]->GetResource(&res);
|
||||
MarkResourceReferenced(GetIDForResource(ppShaderResourceViews[i]), eFrameRef_Read);
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
}
|
||||
@@ -1427,6 +1429,7 @@ void WrappedID3D11DeviceContext::DSSetShaderResources(UINT StartSlot, UINT NumVi
|
||||
{
|
||||
ID3D11Resource *res = NULL;
|
||||
ppShaderResourceViews[i]->GetResource(&res);
|
||||
MarkResourceReferenced(GetIDForResource(ppShaderResourceViews[i]), eFrameRef_Read);
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
}
|
||||
@@ -1787,6 +1790,7 @@ void WrappedID3D11DeviceContext::GSSetShaderResources(UINT StartSlot, UINT NumVi
|
||||
{
|
||||
ID3D11Resource *res = NULL;
|
||||
ppShaderResourceViews[i]->GetResource(&res);
|
||||
MarkResourceReferenced(GetIDForResource(ppShaderResourceViews[i]), eFrameRef_Read);
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
}
|
||||
@@ -2559,6 +2563,7 @@ void WrappedID3D11DeviceContext::PSSetShaderResources(UINT StartSlot, UINT NumVi
|
||||
{
|
||||
ID3D11Resource *res = NULL;
|
||||
ppShaderResourceViews[i]->GetResource(&res);
|
||||
MarkResourceReferenced(GetIDForResource(ppShaderResourceViews[i]), eFrameRef_Read);
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
}
|
||||
@@ -2930,6 +2935,7 @@ void WrappedID3D11DeviceContext::OMSetRenderTargets(UINT NumViews, ID3D11RenderT
|
||||
{
|
||||
ID3D11Resource *res = NULL;
|
||||
ppRenderTargetViews[i]->GetResource(&res);
|
||||
MarkResourceReferenced(GetIDForResource(ppRenderTargetViews[i]), eFrameRef_Read);
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
}
|
||||
@@ -2939,6 +2945,7 @@ void WrappedID3D11DeviceContext::OMSetRenderTargets(UINT NumViews, ID3D11RenderT
|
||||
{
|
||||
ID3D11Resource *res = NULL;
|
||||
pDepthStencilView->GetResource(&res);
|
||||
MarkResourceReferenced(GetIDForResource(pDepthStencilView), eFrameRef_Read);
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
}
|
||||
@@ -3129,6 +3136,7 @@ void WrappedID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews(UINT
|
||||
{
|
||||
ID3D11Resource *res = NULL;
|
||||
ppRenderTargetViews[i]->GetResource(&res);
|
||||
MarkResourceReferenced(GetIDForResource(ppRenderTargetViews[i]), eFrameRef_Read);
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
}
|
||||
@@ -3138,6 +3146,7 @@ void WrappedID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews(UINT
|
||||
{
|
||||
ID3D11Resource *res = NULL;
|
||||
pDepthStencilView->GetResource(&res);
|
||||
MarkResourceReferenced(GetIDForResource(pDepthStencilView), eFrameRef_Read);
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
}
|
||||
@@ -5336,10 +5345,7 @@ void WrappedID3D11DeviceContext::CopyStructureCount(ID3D11Buffer *pDstBuffer, UI
|
||||
MarkResourceReferenced(GetIDForResource(pDstBuffer), eFrameRef_Read);
|
||||
MarkResourceReferenced(GetIDForResource(pDstBuffer), eFrameRef_Write);
|
||||
|
||||
ID3D11Resource *res = NULL;
|
||||
pSrcView->GetResource(&res);
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
MarkResourceReferenced(GetIDForResource(pSrcView), eFrameRef_Read);
|
||||
}
|
||||
else if(m_State >= WRITING)
|
||||
{
|
||||
@@ -5348,7 +5354,7 @@ void WrappedID3D11DeviceContext::CopyStructureCount(ID3D11Buffer *pDstBuffer, UI
|
||||
D3D11ResourceRecord *record = m_pDevice->GetResourceManager()->GetResourceRecord(GetIDForResource(pDstBuffer));
|
||||
RDCASSERT(record);
|
||||
|
||||
D3D11ResourceRecord *srcRecord = ((WrappedID3D11UnorderedAccessView *)pSrcView)->GetResourceRecord();
|
||||
D3D11ResourceRecord *srcRecord = m_pDevice->GetResourceManager()->GetResourceRecord(GetIDForResource(pSrcView));
|
||||
RDCASSERT(srcRecord);
|
||||
|
||||
record->AddParent(srcRecord);
|
||||
@@ -5568,10 +5574,10 @@ void WrappedID3D11DeviceContext::GenerateMips(ID3D11ShaderResourceView *pShaderR
|
||||
pShaderResourceView->GetResource(&res);
|
||||
|
||||
m_MissingTracks.insert(GetIDForResource(res));
|
||||
m_MissingTracks.insert(GetIDForResource(pShaderResourceView));
|
||||
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Read);
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Write);
|
||||
MarkResourceReferenced(GetIDForResource(pShaderResourceView), eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
}
|
||||
else if(m_State >= WRITING)
|
||||
@@ -5684,7 +5690,6 @@ void WrappedID3D11DeviceContext::ClearRenderTargetView(ID3D11RenderTargetView *p
|
||||
pRenderTargetView->GetResource(&res);
|
||||
|
||||
m_MissingTracks.insert(GetIDForResource(res));
|
||||
m_MissingTracks.insert(GetIDForResource(pRenderTargetView));
|
||||
|
||||
SAFE_RELEASE(res);
|
||||
|
||||
@@ -5736,7 +5741,10 @@ void WrappedID3D11DeviceContext::ClearRenderTargetView(ID3D11RenderTargetView *p
|
||||
pRenderTargetView->GetResource(&res);
|
||||
|
||||
if(m_State == WRITING_CAPFRAME)
|
||||
{
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Write);
|
||||
MarkResourceReferenced(GetIDForResource(pRenderTargetView), eFrameRef_Read);
|
||||
}
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
m_pDevice->GetResourceManager()->MarkCleanResource(GetIDForResource(res));
|
||||
@@ -5801,7 +5809,6 @@ void WrappedID3D11DeviceContext::ClearUnorderedAccessViewUint(ID3D11UnorderedAcc
|
||||
pUnorderedAccessView->GetResource(&res);
|
||||
|
||||
m_MissingTracks.insert(GetIDForResource(res));
|
||||
m_MissingTracks.insert(GetIDForResource(pUnorderedAccessView));
|
||||
|
||||
SAFE_RELEASE(res);
|
||||
|
||||
@@ -5813,12 +5820,7 @@ void WrappedID3D11DeviceContext::ClearUnorderedAccessViewUint(ID3D11UnorderedAcc
|
||||
m_pSerialiser->Serialise("context", m_ResourceID);
|
||||
Serialise_ClearUnorderedAccessViewUint(pUnorderedAccessView, Values);
|
||||
|
||||
ID3D11Resource *viewRes = NULL;
|
||||
pUnorderedAccessView->GetResource(&viewRes);
|
||||
ResourceId id = GetIDForResource(viewRes);
|
||||
SAFE_RELEASE(viewRes);
|
||||
|
||||
D3D11ResourceRecord *record = m_pDevice->GetResourceManager()->GetResourceRecord(id);
|
||||
D3D11ResourceRecord *record = m_pDevice->GetResourceManager()->GetResourceRecord(GetIDForResource(pUnorderedAccessView));
|
||||
RDCASSERT(record);
|
||||
|
||||
record->LockChunks();
|
||||
@@ -5853,7 +5855,10 @@ void WrappedID3D11DeviceContext::ClearUnorderedAccessViewUint(ID3D11UnorderedAcc
|
||||
pUnorderedAccessView->GetResource(&res);
|
||||
|
||||
if(m_State == WRITING_CAPFRAME)
|
||||
{
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Write);
|
||||
MarkResourceReferenced(GetIDForResource(pUnorderedAccessView), eFrameRef_Read);
|
||||
}
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
m_pDevice->GetResourceManager()->MarkCleanResource(GetIDForResource(res));
|
||||
@@ -5919,7 +5924,6 @@ void WrappedID3D11DeviceContext::ClearUnorderedAccessViewFloat(ID3D11UnorderedAc
|
||||
pUnorderedAccessView->GetResource(&res);
|
||||
|
||||
m_MissingTracks.insert(GetIDForResource(res));
|
||||
m_MissingTracks.insert(GetIDForResource(pUnorderedAccessView));
|
||||
|
||||
SAFE_RELEASE(res);
|
||||
|
||||
@@ -5931,12 +5935,7 @@ void WrappedID3D11DeviceContext::ClearUnorderedAccessViewFloat(ID3D11UnorderedAc
|
||||
m_pSerialiser->Serialise("context", m_ResourceID);
|
||||
Serialise_ClearUnorderedAccessViewFloat(pUnorderedAccessView, Values);
|
||||
|
||||
ID3D11Resource *viewRes = NULL;
|
||||
pUnorderedAccessView->GetResource(&viewRes);
|
||||
ResourceId id = GetIDForResource(viewRes);
|
||||
SAFE_RELEASE(viewRes);
|
||||
|
||||
D3D11ResourceRecord *record = m_pDevice->GetResourceManager()->GetResourceRecord(id);
|
||||
D3D11ResourceRecord *record = m_pDevice->GetResourceManager()->GetResourceRecord(GetIDForResource(pUnorderedAccessView));
|
||||
RDCASSERT(record);
|
||||
|
||||
record->LockChunks();
|
||||
@@ -5971,7 +5970,10 @@ void WrappedID3D11DeviceContext::ClearUnorderedAccessViewFloat(ID3D11UnorderedAc
|
||||
pUnorderedAccessView->GetResource(&res);
|
||||
|
||||
if(m_State == WRITING_CAPFRAME)
|
||||
{
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Write);
|
||||
MarkResourceReferenced(GetIDForResource(pUnorderedAccessView), eFrameRef_Read);
|
||||
}
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
m_pDevice->GetResourceManager()->MarkCleanResource(GetIDForResource(res));
|
||||
@@ -6039,7 +6041,6 @@ void WrappedID3D11DeviceContext::ClearDepthStencilView(ID3D11DepthStencilView *p
|
||||
pDepthStencilView->GetResource(&res);
|
||||
|
||||
m_MissingTracks.insert(GetIDForResource(res));
|
||||
m_MissingTracks.insert(GetIDForResource(pDepthStencilView));
|
||||
|
||||
SAFE_RELEASE(res);
|
||||
|
||||
@@ -6051,12 +6052,7 @@ void WrappedID3D11DeviceContext::ClearDepthStencilView(ID3D11DepthStencilView *p
|
||||
m_pSerialiser->Serialise("context", m_ResourceID);
|
||||
Serialise_ClearDepthStencilView(pDepthStencilView, ClearFlags, Depth, Stencil);
|
||||
|
||||
ID3D11Resource *viewRes = NULL;
|
||||
pDepthStencilView->GetResource(&viewRes);
|
||||
ResourceId id = GetIDForResource(viewRes);
|
||||
SAFE_RELEASE(viewRes);
|
||||
|
||||
D3D11ResourceRecord *record = m_pDevice->GetResourceManager()->GetResourceRecord(id);
|
||||
D3D11ResourceRecord *record = m_pDevice->GetResourceManager()->GetResourceRecord(GetIDForResource(pDepthStencilView));
|
||||
RDCASSERT(record);
|
||||
|
||||
record->LockChunks();
|
||||
@@ -6091,7 +6087,10 @@ void WrappedID3D11DeviceContext::ClearDepthStencilView(ID3D11DepthStencilView *p
|
||||
pDepthStencilView->GetResource(&res);
|
||||
|
||||
if(m_State == WRITING_CAPFRAME)
|
||||
{
|
||||
MarkResourceReferenced(GetIDForResource(res), eFrameRef_Write);
|
||||
MarkResourceReferenced(GetIDForResource(pDepthStencilView), eFrameRef_Read);
|
||||
}
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
m_pDevice->GetResourceManager()->MarkCleanResource(GetIDForResource(res));
|
||||
|
||||
@@ -3269,46 +3269,6 @@ bool WrappedID3D11Device::Serialise_ReleaseResource(ID3D11DeviceChild *res)
|
||||
D3D11ResourceRecord *record = GetResourceManager()->GetResourceRecord(resource);
|
||||
if(record)
|
||||
record->Delete(m_ResourceManager);
|
||||
|
||||
switch(resourceType)
|
||||
{
|
||||
case Resource_RenderTargetView:
|
||||
{
|
||||
WrappedID3D11RenderTargetView* view = (WrappedID3D11RenderTargetView *)res;
|
||||
|
||||
D3D11ResourceRecord *viewRecord = view->GetResourceRecord();
|
||||
if(viewRecord)
|
||||
viewRecord->Delete(m_ResourceManager);
|
||||
break;
|
||||
}
|
||||
case Resource_ShaderResourceView:
|
||||
{
|
||||
WrappedID3D11ShaderResourceView* view = (WrappedID3D11ShaderResourceView *)res;
|
||||
|
||||
D3D11ResourceRecord *viewRecord = view->GetResourceRecord();
|
||||
if(viewRecord)
|
||||
viewRecord->Delete(m_ResourceManager);
|
||||
break;
|
||||
}
|
||||
case Resource_DepthStencilView:
|
||||
{
|
||||
WrappedID3D11DepthStencilView* view = (WrappedID3D11DepthStencilView *)res;
|
||||
|
||||
D3D11ResourceRecord *viewRecord = view->GetResourceRecord();
|
||||
if(viewRecord)
|
||||
viewRecord->Delete(m_ResourceManager);
|
||||
break;
|
||||
}
|
||||
case Resource_UnorderedAccessView:
|
||||
{
|
||||
WrappedID3D11UnorderedAccessView* view = (WrappedID3D11UnorderedAccessView *)res;
|
||||
|
||||
D3D11ResourceRecord *viewRecord = view->GetResourceRecord();
|
||||
if(viewRecord)
|
||||
viewRecord->Delete(m_ResourceManager);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(m_State < WRITING && GetResourceManager()->HasLiveResource(resource))
|
||||
{
|
||||
@@ -3339,8 +3299,6 @@ void WrappedID3D11Device::ReleaseResource(ID3D11DeviceChild *res)
|
||||
|
||||
D3D11ResourceRecord *record = m_DeviceRecord;
|
||||
|
||||
bool removegpu = true;
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(type == Resource_ShaderResourceView ||
|
||||
@@ -3353,21 +3311,6 @@ void WrappedID3D11Device::ReleaseResource(ID3D11DeviceChild *res)
|
||||
type == Resource_Texture3D ||
|
||||
type == Resource_CommandList)
|
||||
{
|
||||
if(type == Resource_ShaderResourceView ||
|
||||
type == Resource_DepthStencilView ||
|
||||
type == Resource_UnorderedAccessView ||
|
||||
type == Resource_RenderTargetView
|
||||
)
|
||||
{
|
||||
ID3D11View *view = (ID3D11View *)res;
|
||||
ID3D11Resource *viewRes = NULL;
|
||||
view->GetResource(&viewRes);
|
||||
idx = GetIDForResource(viewRes);
|
||||
SAFE_RELEASE(viewRes);
|
||||
|
||||
removegpu = false;
|
||||
}
|
||||
|
||||
record = GetResourceManager()->GetResourceRecord(idx);
|
||||
RDCASSERT(record);
|
||||
|
||||
@@ -3384,8 +3327,7 @@ void WrappedID3D11Device::ReleaseResource(ID3D11DeviceChild *res)
|
||||
}
|
||||
}
|
||||
|
||||
if(removegpu)
|
||||
GetResourceManager()->MarkCleanResource(idx);
|
||||
GetResourceManager()->MarkCleanResource(idx);
|
||||
|
||||
if(type == Resource_DeviceContext)
|
||||
{
|
||||
|
||||
@@ -694,16 +694,6 @@ bool WrappedID3D11Device::Serialise_CreateShaderResourceView(
|
||||
GetResourceManager()->AddLiveResource(pView, ret);
|
||||
}
|
||||
}
|
||||
else if(m_State >= WRITING)
|
||||
{
|
||||
D3D11ResourceRecord *record = GetResourceManager()->GetResourceRecord(Resource);
|
||||
|
||||
((WrappedID3D11ShaderResourceView *)*ppSRView)->SetResourceRecord(record);
|
||||
|
||||
RDCASSERT(record);
|
||||
|
||||
record->AddRef();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -740,8 +730,19 @@ HRESULT WrappedID3D11Device::CreateShaderResourceView(
|
||||
WrappedID3D11Texture3D::IsAlloc(pResource) ||
|
||||
WrappedID3D11Buffer::IsAlloc(pResource))
|
||||
{
|
||||
D3D11ResourceRecord *record = GetResourceManager()->GetResourceRecord(GetIDForResource(pResource));
|
||||
RDCASSERT(record);
|
||||
D3D11ResourceRecord *parent = GetResourceManager()->GetResourceRecord(GetIDForResource(pResource));
|
||||
|
||||
RDCASSERT(parent);
|
||||
|
||||
WrappedID3D11ShaderResourceView *view = (WrappedID3D11ShaderResourceView *)wrapped;
|
||||
ResourceId id = view->GetResourceID();
|
||||
|
||||
RDCASSERT(GetResourceManager()->GetResourceRecord(id) == NULL);
|
||||
|
||||
D3D11ResourceRecord *record = GetResourceManager()->AddResourceRecord(id);
|
||||
record->Length = 0;
|
||||
|
||||
record->AddParent(parent);
|
||||
|
||||
record->AddChunk(chunk);
|
||||
}
|
||||
@@ -792,16 +793,6 @@ bool WrappedID3D11Device::Serialise_CreateUnorderedAccessView(
|
||||
GetResourceManager()->AddLiveResource(pView, ret);
|
||||
}
|
||||
}
|
||||
else if(m_State >= WRITING)
|
||||
{
|
||||
D3D11ResourceRecord *record = GetResourceManager()->GetResourceRecord(ResourceId(Resource));
|
||||
|
||||
((WrappedID3D11UnorderedAccessView *)*ppUAView)->SetResourceRecord(record);
|
||||
|
||||
RDCASSERT(record);
|
||||
|
||||
record->AddRef();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -838,9 +829,19 @@ HRESULT WrappedID3D11Device::CreateUnorderedAccessView(
|
||||
WrappedID3D11Texture3D::IsAlloc(pResource) ||
|
||||
WrappedID3D11Buffer::IsAlloc(pResource))
|
||||
{
|
||||
D3D11ResourceRecord *record = GetResourceManager()->GetResourceRecord(GetIDForResource(pResource));
|
||||
D3D11ResourceRecord *parent = GetResourceManager()->GetResourceRecord(GetIDForResource(pResource));
|
||||
|
||||
RDCASSERT(record);
|
||||
RDCASSERT(parent);
|
||||
|
||||
WrappedID3D11UnorderedAccessView *view = (WrappedID3D11UnorderedAccessView *)wrapped;
|
||||
ResourceId id = view->GetResourceID();
|
||||
|
||||
RDCASSERT(GetResourceManager()->GetResourceRecord(id) == NULL);
|
||||
|
||||
D3D11ResourceRecord *record = GetResourceManager()->AddResourceRecord(id);
|
||||
record->Length = 0;
|
||||
|
||||
record->AddParent(parent);
|
||||
|
||||
record->AddChunk(chunk);
|
||||
}
|
||||
@@ -917,16 +918,6 @@ bool WrappedID3D11Device::Serialise_CreateRenderTargetView(
|
||||
GetResourceManager()->AddLiveResource(pView, ret);
|
||||
}
|
||||
}
|
||||
else if(m_State >= WRITING)
|
||||
{
|
||||
D3D11ResourceRecord *record = GetResourceManager()->GetResourceRecord(ResourceId(Resource));
|
||||
|
||||
RDCASSERT(record);
|
||||
|
||||
((WrappedID3D11RenderTargetView *)*ppRTView)->SetResourceRecord(record);
|
||||
|
||||
record->AddRef();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -963,9 +954,19 @@ HRESULT WrappedID3D11Device::CreateRenderTargetView(
|
||||
WrappedID3D11Texture3D::IsAlloc(pResource) ||
|
||||
WrappedID3D11Buffer::IsAlloc(pResource))
|
||||
{
|
||||
D3D11ResourceRecord *record = GetResourceManager()->GetResourceRecord(GetIDForResource(pResource));
|
||||
D3D11ResourceRecord *parent = GetResourceManager()->GetResourceRecord(GetIDForResource(pResource));
|
||||
|
||||
RDCASSERT(record);
|
||||
RDCASSERT(parent);
|
||||
|
||||
WrappedID3D11RenderTargetView *view = (WrappedID3D11RenderTargetView *)wrapped;
|
||||
ResourceId id = view->GetResourceID();
|
||||
|
||||
RDCASSERT(GetResourceManager()->GetResourceRecord(id) == NULL);
|
||||
|
||||
D3D11ResourceRecord *record = GetResourceManager()->AddResourceRecord(id);
|
||||
record->Length = 0;
|
||||
|
||||
record->AddParent(parent);
|
||||
|
||||
record->AddChunk(chunk);
|
||||
}
|
||||
@@ -1015,16 +1016,6 @@ bool WrappedID3D11Device::Serialise_CreateDepthStencilView(
|
||||
GetResourceManager()->AddLiveResource(pView, ret);
|
||||
}
|
||||
}
|
||||
else if(m_State >= WRITING)
|
||||
{
|
||||
D3D11ResourceRecord *record = GetResourceManager()->GetResourceRecord(ResourceId(Resource));
|
||||
|
||||
((WrappedID3D11DepthStencilView *)*ppDepthStencilView)->SetResourceRecord(record);
|
||||
|
||||
RDCASSERT(record);
|
||||
|
||||
record->AddRef();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1061,9 +1052,19 @@ HRESULT WrappedID3D11Device::CreateDepthStencilView(
|
||||
WrappedID3D11Texture3D::IsAlloc(pResource) ||
|
||||
WrappedID3D11Buffer::IsAlloc(pResource))
|
||||
{
|
||||
D3D11ResourceRecord *record = GetResourceManager()->GetResourceRecord(GetIDForResource(pResource));
|
||||
D3D11ResourceRecord *parent = GetResourceManager()->GetResourceRecord(GetIDForResource(pResource));
|
||||
|
||||
RDCASSERT(record);
|
||||
RDCASSERT(parent);
|
||||
|
||||
WrappedID3D11DepthStencilView *view = (WrappedID3D11DepthStencilView *)wrapped;
|
||||
ResourceId id = view->GetResourceID();
|
||||
|
||||
RDCASSERT(GetResourceManager()->GetResourceRecord(id) == NULL);
|
||||
|
||||
D3D11ResourceRecord *record = GetResourceManager()->AddResourceRecord(id);
|
||||
record->Length = 0;
|
||||
|
||||
record->AddParent(parent);
|
||||
|
||||
record->AddChunk(chunk);
|
||||
}
|
||||
|
||||
@@ -226,6 +226,7 @@ void D3D11RenderState::MarkReferenced(WrappedID3D11DeviceContext *ctx, bool init
|
||||
if(sh->SRVs[i])
|
||||
{
|
||||
sh->SRVs[i]->GetResource(&res);
|
||||
ctx->MarkResourceReferenced(GetIDForResource(sh->SRVs[i]), initial ? eFrameRef_Unknown : eFrameRef_Read);
|
||||
ctx->MarkResourceReferenced(GetIDForResource(res), initial ? eFrameRef_Unknown : eFrameRef_Read);
|
||||
SAFE_RELEASE(res);
|
||||
}
|
||||
@@ -241,7 +242,6 @@ void D3D11RenderState::MarkReferenced(WrappedID3D11DeviceContext *ctx, bool init
|
||||
{
|
||||
CSUAVs[i]->GetResource(&res);
|
||||
ctx->m_MissingTracks.insert(GetIDForResource(res));
|
||||
ctx->m_MissingTracks.insert(GetIDForResource(CSUAVs[i]));
|
||||
// UAVs we always assume to be partial updates
|
||||
ctx->MarkResourceReferenced(GetIDForResource(CSUAVs[i]), initial ? eFrameRef_Unknown : eFrameRef_Read);
|
||||
ctx->MarkResourceReferenced(GetIDForResource(CSUAVs[i]), initial ? eFrameRef_Unknown : eFrameRef_Write);
|
||||
@@ -348,6 +348,7 @@ void D3D11RenderState::MarkReferenced(WrappedID3D11DeviceContext *ctx, bool init
|
||||
{
|
||||
OM.RenderTargets[i]->GetResource(&res);
|
||||
ctx->m_MissingTracks.insert(GetIDForResource(res));
|
||||
ctx->MarkResourceReferenced(GetIDForResource(OM.RenderTargets[i]), initial ? eFrameRef_Unknown : eFrameRef_Read);
|
||||
if(viewportScissorPartial)
|
||||
ctx->MarkResourceReferenced(GetIDForResource(res), initial ? eFrameRef_Unknown : eFrameRef_Read);
|
||||
ctx->MarkResourceReferenced(GetIDForResource(res), initial ? eFrameRef_Unknown : eFrameRef_Write);
|
||||
@@ -361,7 +362,6 @@ void D3D11RenderState::MarkReferenced(WrappedID3D11DeviceContext *ctx, bool init
|
||||
if(OM.UAVs[i])
|
||||
{
|
||||
OM.UAVs[i]->GetResource(&res);
|
||||
ctx->m_MissingTracks.insert(GetIDForResource(OM.UAVs[i]));
|
||||
ctx->m_MissingTracks.insert(GetIDForResource(res));
|
||||
// UAVs we always assume to be partial updates
|
||||
ctx->MarkResourceReferenced(GetIDForResource(OM.UAVs[i]), initial ? eFrameRef_Unknown : eFrameRef_Read);
|
||||
@@ -378,6 +378,7 @@ void D3D11RenderState::MarkReferenced(WrappedID3D11DeviceContext *ctx, bool init
|
||||
{
|
||||
OM.DepthView->GetResource(&res);
|
||||
ctx->m_MissingTracks.insert(GetIDForResource(res));
|
||||
ctx->MarkResourceReferenced(GetIDForResource(OM.DepthView), initial ? eFrameRef_Unknown : eFrameRef_Read);
|
||||
if(viewportScissorPartial)
|
||||
ctx->MarkResourceReferenced(GetIDForResource(res), initial ? eFrameRef_Unknown : eFrameRef_Read);
|
||||
ctx->MarkResourceReferenced(GetIDForResource(res), initial ? eFrameRef_Unknown : eFrameRef_Write);
|
||||
|
||||
@@ -981,13 +981,11 @@ class WrappedView : public WrappedDeviceChild<NestedType>
|
||||
{
|
||||
protected:
|
||||
ID3D11Resource *m_pResource;
|
||||
D3D11ResourceRecord *m_pResourceRecord;
|
||||
ResourceId m_ResourceResID;
|
||||
|
||||
WrappedView(NestedType* real, WrappedID3D11Device* device, ID3D11Resource* res)
|
||||
: WrappedDeviceChild(real, device),
|
||||
m_pResource(res),
|
||||
m_pResourceRecord(NULL)
|
||||
m_pResource(res)
|
||||
{
|
||||
m_ResourceResID = GetIDForResource(m_pResource);
|
||||
// cast is potentially invalid but functions in WrappedResource will be identical across each
|
||||
@@ -1007,9 +1005,6 @@ protected:
|
||||
}
|
||||
|
||||
public:
|
||||
D3D11ResourceRecord *GetResourceRecord() { return m_pResourceRecord; }
|
||||
void SetResourceRecord(D3D11ResourceRecord *r) { m_pResourceRecord = r; }
|
||||
|
||||
ResourceId GetResourceResID() { return m_ResourceResID; }
|
||||
|
||||
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject)
|
||||
|
||||
Reference in New Issue
Block a user