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:
baldurk
2015-07-07 21:40:09 +02:00
parent 3e7b581250
commit a9b5fdbd31
6 changed files with 82 additions and 150 deletions
@@ -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());
+27 -28
View File
@@ -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));
+1 -59
View File
@@ -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)
{
+49 -48
View File
@@ -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);
}
+3 -2
View File
@@ -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);
+1 -6
View File
@@ -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)