From 5b6f8e5e5c3a6d8213b8468ae07dd7422d3f4462 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 17 Jun 2014 21:07:35 +0100 Subject: [PATCH] After each command list execute, renumber child draws. Closes #62 --- renderdoc/driver/d3d11/d3d11_context.cpp | 16 ++++++++++++++++ renderdoc/driver/d3d11/d3d11_context.h | 1 + renderdoc/driver/d3d11/d3d11_context_wrap.cpp | 5 +++++ 3 files changed, 22 insertions(+) diff --git a/renderdoc/driver/d3d11/d3d11_context.cpp b/renderdoc/driver/d3d11/d3d11_context.cpp index 257addb9b..ab041ed42 100644 --- a/renderdoc/driver/d3d11/d3d11_context.cpp +++ b/renderdoc/driver/d3d11/d3d11_context.cpp @@ -900,6 +900,22 @@ void WrappedID3D11DeviceContext::AddUsage(FetchDrawcall d) m_ResourceUses[((WrappedID3D11RenderTargetView *)pipe->OM.RenderTargets[i])->GetResourceResID()].push_back(EventUsage(e, eUsage_OM_RTV)); } +void WrappedID3D11DeviceContext::RefreshDrawcallIDs(DrawcallTreeNode &node) +{ + if(GetType() == D3D11_DEVICE_CONTEXT_DEFERRED) + { + m_pDevice->GetImmediateContext()->RefreshDrawcallIDs(node); + return; + } + + // assign new drawcall IDs + for(size_t i=0; i < node.children.size(); i++) + { + node.children[i].draw.drawcallID = m_CurDrawcallID++; + RefreshDrawcallIDs(node.children[i]); + } +} + void WrappedID3D11DeviceContext::AddDrawcall(FetchDrawcall d, bool hasEvents) { if(d.context == ResourceId()) d.context = m_pDevice->GetResourceManager()->GetOriginalID(m_ResourceID); diff --git a/renderdoc/driver/d3d11/d3d11_context.h b/renderdoc/driver/d3d11/d3d11_context.h index d37584bb1..12323f864 100644 --- a/renderdoc/driver/d3d11/d3d11_context.h +++ b/renderdoc/driver/d3d11/d3d11_context.h @@ -219,6 +219,7 @@ private: void AddEvent(D3D11ChunkType type, string description, ResourceId ctx = ResourceId()); void AddDrawcall(FetchDrawcall draw, bool hasEvents); + void RefreshDrawcallIDs(DrawcallTreeNode &node); //////////////////////////////////////////////////////////////// // implement InterceptorSystem privately, since it is not thread safe (like all other context functions) diff --git a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp index 44095bef2..905121e38 100644 --- a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp @@ -4075,7 +4075,12 @@ bool WrappedID3D11DeviceContext::Serialise_ExecuteCommandList(ID3D11CommandList if(!m_DrawcallStack.empty() && !m_DrawcallStack.back()->children.empty() && cmdDrawChildren != m_CmdLists.end()) + { m_DrawcallStack.back()->children.back().children = cmdDrawChildren->second.children; + + // assign new drawcall IDs so that we don't get duplicates if this commandlist is executed again + RefreshDrawcallIDs(cmdDrawChildren->second); + } } return true;