From 6091271632d9e7672fa9e1cb09cd1806e86a8124 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 29 Nov 2017 10:34:59 +0000 Subject: [PATCH] Fix some resource descriptor cases around deferred contexts --- renderdoc/driver/d3d11/d3d11_context.cpp | 3 +-- renderdoc/driver/d3d11/d3d11_context.h | 2 ++ renderdoc/driver/d3d11/d3d11_context_wrap.cpp | 9 +++++++++ renderdoc/driver/d3d11/d3d11_device.cpp | 3 ++- renderdoc/driver/d3d11/d3d11_device.h | 10 +++++----- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/renderdoc/driver/d3d11/d3d11_context.cpp b/renderdoc/driver/d3d11/d3d11_context.cpp index 5e5fa095b..ef3d7fb06 100644 --- a/renderdoc/driver/d3d11/d3d11_context.cpp +++ b/renderdoc/driver/d3d11/d3d11_context.cpp @@ -621,8 +621,7 @@ bool WrappedID3D11DeviceContext::IsFL11_1() bool WrappedID3D11DeviceContext::ProcessChunk(ReadSerialiser &ser, D3D11Chunk chunk) { - ResourceId ctxId; - SERIALISE_ELEMENT(ctxId).Named("Context ID"); + SERIALISE_ELEMENT(m_CurContextId).Named("Context ID"); SERIALISE_CHECK_READ_ERRORS(); diff --git a/renderdoc/driver/d3d11/d3d11_context.h b/renderdoc/driver/d3d11/d3d11_context.h index fe8f11b56..8fc514874 100644 --- a/renderdoc/driver/d3d11/d3d11_context.h +++ b/renderdoc/driver/d3d11/d3d11_context.h @@ -151,6 +151,8 @@ private: WriteSerialiser m_ScratchSerialiser; std::set m_StringDB; + ResourceId m_CurContextId; + StreamReader *m_FrameReader = NULL; map m_MapResourceRecordAllocs; diff --git a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp index f9a8bf933..a99171f92 100644 --- a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp @@ -4960,6 +4960,15 @@ bool WrappedID3D11DeviceContext::Serialise_FinishCommandList(SerialiserType &ser draw.flags |= DrawFlags::CmdList; AddDrawcall(draw, true); + + m_pDevice->AddResource(pCommandList, ResourceType::CommandBuffer, "Command List"); + + // add the current deferred context ID as a parent + m_pDevice->GetReplay()->GetResourceDesc(m_CurContextId).derivedResources.push_back(pCommandList); + m_pDevice->GetReplay()->GetResourceDesc(pCommandList).parentResources.push_back(m_CurContextId); + + // don't include this as an 'initialisation chunk' + m_pDevice->GetReplay()->GetResourceDesc(pCommandList).initialisationChunks.clear(); } return true; diff --git a/renderdoc/driver/d3d11/d3d11_device.cpp b/renderdoc/driver/d3d11/d3d11_device.cpp index de94edc23..2d19c33da 100644 --- a/renderdoc/driver/d3d11/d3d11_device.cpp +++ b/renderdoc/driver/d3d11/d3d11_device.cpp @@ -2126,7 +2126,8 @@ void WrappedID3D11Device::AddResourceCurChunk(ResourceDescription &descr) void WrappedID3D11Device::AddResourceCurChunk(ResourceId id) { - AddResourceCurChunk(GetReplay()->GetResourceDesc(id)); + if(GetResourceManager()->HasLiveResource(id)) + AddResourceCurChunk(GetReplay()->GetResourceDesc(id)); } void WrappedID3D11Device::DerivedResource(ID3D11DeviceChild *parent, ResourceId child) diff --git a/renderdoc/driver/d3d11/d3d11_device.h b/renderdoc/driver/d3d11/d3d11_device.h index b26dc7cdd..1d92af11e 100644 --- a/renderdoc/driver/d3d11/d3d11_device.h +++ b/renderdoc/driver/d3d11/d3d11_device.h @@ -398,11 +398,6 @@ private: SDFile *m_StructuredFile = NULL; SDFile m_StoredStructuredData; - void AddResource(ResourceId id, ResourceType type, const char *defaultNamePrefix); - void DerivedResource(ID3D11DeviceChild *parent, ResourceId child); - void AddResourceCurChunk(ResourceDescription &descr); - void AddResourceCurChunk(ResourceId id); - vector m_DebugMessages; vector m_CapturedFrames; @@ -428,6 +423,11 @@ public: APIProperties APIProps; + void AddResource(ResourceId id, ResourceType type, const char *defaultNamePrefix); + void DerivedResource(ID3D11DeviceChild *parent, ResourceId child); + void AddResourceCurChunk(ResourceDescription &descr); + void AddResourceCurChunk(ResourceId id); + ID3D11Device *GetReal() { return m_pDevice; } static std::string GetChunkName(uint32_t idx); D3D11DebugManager *GetDebugManager() { return m_DebugManager; }