diff --git a/renderdoc/driver/d3d11/d3d11_context.cpp b/renderdoc/driver/d3d11/d3d11_context.cpp index 7c31de16b..93427e487 100644 --- a/renderdoc/driver/d3d11/d3d11_context.cpp +++ b/renderdoc/driver/d3d11/d3d11_context.cpp @@ -997,11 +997,7 @@ void WrappedID3D11DeviceContext::AddDrawcall(const DrawcallDescription &d, bool // should have at least the root drawcall here, push this drawcall // onto the back's children list. if(!m_DrawcallStack.empty()) - { - DrawcallTreeNode node(draw); - node.children.insert(node.children.begin(), draw.children.begin(), draw.children.end()); - m_DrawcallStack.back()->children.push_back(node); - } + m_DrawcallStack.back()->children.push_back(draw); else RDCERR("Somehow lost drawcall stack!"); } @@ -1483,7 +1479,7 @@ void WrappedID3D11DeviceContext::ReplayLog(LogState readType, uint32_t startEven if(m_State == READING) { - m_pDevice->GetFrameRecord().drawcallList = m_ParentDrawcall.Bake(); + m_pDevice->GetFrameRecord().drawcallList = m_ParentDrawcall.children; m_pDevice->GetFrameRecord().frameInfo.debugMessages = m_pDevice->GetDebugMessages(); for(auto it = WrappedID3D11Buffer::m_BufferList.begin(); diff --git a/renderdoc/driver/d3d11/d3d11_context.h b/renderdoc/driver/d3d11/d3d11_context.h index d88577e92..99c0cf7f2 100644 --- a/renderdoc/driver/d3d11/d3d11_context.h +++ b/renderdoc/driver/d3d11/d3d11_context.h @@ -98,30 +98,6 @@ enum CaptureFailReason CaptureFailed_UncappedCmdlist, }; -struct DrawcallTreeNode -{ - DrawcallTreeNode() {} - explicit DrawcallTreeNode(const DrawcallDescription &d) : draw(d) {} - DrawcallDescription draw; - vector children; - - vector Bake() - { - vector ret; - if(children.empty()) - return ret; - - ret.resize(children.size()); - for(size_t i = 0; i < children.size(); i++) - { - ret[i] = children[i].draw; - ret[i].children = children[i].Bake(); - } - - return ret; - } -}; - class WrappedID3D11DeviceContext : public RefCounter, public ID3D11DeviceContext3 { private: @@ -218,10 +194,10 @@ private: uint64_t m_CurChunkOffset; uint32_t m_CurEventID, m_CurDrawcallID; - DrawcallTreeNode m_ParentDrawcall; - map m_CmdLists; + DrawcallDescription m_ParentDrawcall; + map m_CmdLists; - list m_DrawcallStack; + list m_DrawcallStack; void FlattenLog(); @@ -318,7 +294,7 @@ public: uint32_t GetEventID() { return m_CurEventID; } const APIEvent &GetEvent(uint32_t eventID); - const DrawcallTreeNode &GetRootDraw() { return m_ParentDrawcall; } + const DrawcallDescription &GetRootDraw() { return m_ParentDrawcall; } void ThreadSafe_SetMarker(uint32_t col, const wchar_t *name); int ThreadSafe_BeginEvent(uint32_t col, const wchar_t *name); int ThreadSafe_EndEvent(); diff --git a/renderdoc/driver/d3d11/d3d11_counters.cpp b/renderdoc/driver/d3d11/d3d11_counters.cpp index ba190d8ca..067f08bee 100644 --- a/renderdoc/driver/d3d11/d3d11_counters.cpp +++ b/renderdoc/driver/d3d11/d3d11_counters.cpp @@ -220,7 +220,7 @@ struct D3D11CounterContext int reuseIdx; }; -void D3D11DebugManager::FillTimers(D3D11CounterContext &ctx, const DrawcallTreeNode &drawnode) +void D3D11DebugManager::FillTimers(D3D11CounterContext &ctx, const DrawcallDescription &drawnode) { const D3D11_QUERY_DESC qtimedesc = {D3D11_QUERY_TIMESTAMP, 0}; const D3D11_QUERY_DESC qstatsdesc = {D3D11_QUERY_PIPELINE_STATISTICS, 0}; @@ -231,7 +231,7 @@ void D3D11DebugManager::FillTimers(D3D11CounterContext &ctx, const DrawcallTreeN for(size_t i = 0; i < drawnode.children.size(); i++) { - const DrawcallDescription &d = drawnode.children[i].draw; + const DrawcallDescription &d = drawnode.children[i]; FillTimers(ctx, drawnode.children[i]); if(d.events.empty()) @@ -288,14 +288,14 @@ void D3D11DebugManager::FillTimers(D3D11CounterContext &ctx, const DrawcallTreeN } void D3D11DebugManager::FillTimersAMD(uint32_t &eventStartID, uint32_t &sampleIndex, - vector &eventIDs, const DrawcallTreeNode &drawnode) + vector &eventIDs, const DrawcallDescription &drawnode) { if(drawnode.children.empty()) return; for(size_t i = 0; i < drawnode.children.size(); i++) { - const DrawcallDescription &d = drawnode.children[i].draw; + const DrawcallDescription &d = drawnode.children[i]; FillTimersAMD(eventStartID, sampleIndex, eventIDs, drawnode.children[i]); diff --git a/renderdoc/driver/d3d11/d3d11_debug.h b/renderdoc/driver/d3d11/d3d11_debug.h index d5e2e7587..253769a2d 100644 --- a/renderdoc/driver/d3d11/d3d11_debug.h +++ b/renderdoc/driver/d3d11/d3d11_debug.h @@ -45,8 +45,6 @@ class WrappedID3D11DeviceContext; class AMDCounters; -struct DrawcallTreeNode; - struct D3D11CounterContext; class D3D11ResourceManager; @@ -584,10 +582,10 @@ private: // called before the device is shutdown, to shutdown any counters void PreDeviceShutdownCounters(); - void FillTimers(D3D11CounterContext &ctx, const DrawcallTreeNode &drawnode); + void FillTimers(D3D11CounterContext &ctx, const DrawcallDescription &drawnode); void FillTimersAMD(uint32_t &eventStartID, uint32_t &sampleIndex, vector &eventIDs, - const DrawcallTreeNode &drawnode); + const DrawcallDescription &drawnode); void FillCBuffer(ID3D11Buffer *buf, const void *data, size_t size); }; diff --git a/renderdoc/driver/gl/gl_counters.cpp b/renderdoc/driver/gl/gl_counters.cpp index 0adead7c9..b37b08aa8 100644 --- a/renderdoc/driver/gl/gl_counters.cpp +++ b/renderdoc/driver/gl/gl_counters.cpp @@ -206,7 +206,7 @@ GLenum glCounters[] = { eGL_COMPUTE_SHADER_INVOCATIONS_ARB // GPUCounter::CSInvocations }; -void GLReplay::FillTimers(GLCounterContext &ctx, const DrawcallTreeNode &drawnode, +void GLReplay::FillTimers(GLCounterContext &ctx, const DrawcallDescription &drawnode, const vector &counters) { if(drawnode.children.empty()) @@ -214,7 +214,7 @@ void GLReplay::FillTimers(GLCounterContext &ctx, const DrawcallTreeNode &drawnod for(size_t i = 0; i < drawnode.children.size(); i++) { - const DrawcallDescription &d = drawnode.children[i].draw; + const DrawcallDescription &d = drawnode.children[i]; FillTimers(ctx, drawnode.children[i], counters); if(d.events.empty()) diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index dfff083e2..1d66f2bb7 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -4028,7 +4028,7 @@ void WrappedOpenGL::ContextReplayLog(LogState readType, uint32_t startEventID, u if(m_State == READING) { - GetFrameRecord().drawcallList = m_ParentDrawcall.Bake(); + GetFrameRecord().drawcallList = m_ParentDrawcall.children; GetFrameRecord().frameInfo.debugMessages = GetDebugMessages(); DrawcallDescription *previous = NULL; @@ -4434,11 +4434,7 @@ void WrappedOpenGL::AddDrawcall(const DrawcallDescription &d, bool hasEvents) // should have at least the root drawcall here, push this drawcall // onto the back's children list. if(!context->m_DrawcallStack.empty()) - { - DrawcallTreeNode node(draw); - node.children.insert(node.children.begin(), draw.children.begin(), draw.children.end()); - context->m_DrawcallStack.back()->children.push_back(node); - } + m_DrawcallStack.back()->children.push_back(draw); else RDCERR("Somehow lost drawcall stack!"); } diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index f95510422..92f9ca22f 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -69,36 +69,6 @@ enum CaptureFailReason CaptureFailed_UncappedUnmap, }; -struct DrawcallTreeNode -{ - DrawcallTreeNode() {} - explicit DrawcallTreeNode(const DrawcallDescription &d) : draw(d) {} - DrawcallDescription draw; - vector children; - - DrawcallTreeNode &operator=(const DrawcallDescription &d) - { - *this = DrawcallTreeNode(d); - return *this; - } - - vector Bake() - { - vector ret; - if(children.empty()) - return ret; - - ret.resize(children.size()); - for(size_t i = 0; i < children.size(); i++) - { - ret[i] = children[i].draw; - ret[i].children = children[i].Bake(); - } - - return ret; - } -}; - struct Replacement { Replacement(ResourceId i, GLResource r) : id(i), res(r) {} @@ -229,9 +199,9 @@ private: uint32_t m_FirstEventID; uint32_t m_LastEventID; - DrawcallTreeNode m_ParentDrawcall; + DrawcallDescription m_ParentDrawcall; - list m_DrawcallStack; + list m_DrawcallStack; map > m_ResourceUses; @@ -578,7 +548,7 @@ public: FrameRecord &GetFrameRecord() { return m_FrameRecord; } const APIEvent &GetEvent(uint32_t eventID); - const DrawcallTreeNode &GetRootDraw() { return m_ParentDrawcall; } + const DrawcallDescription &GetRootDraw() { return m_ParentDrawcall; } const DrawcallDescription *GetDrawcall(uint32_t eventID); void SuppressDebugMessages(bool suppress) { m_SuppressDebugMessages = suppress; } diff --git a/renderdoc/driver/gl/gl_replay.h b/renderdoc/driver/gl/gl_replay.h index 9aea292f9..5e116fba1 100644 --- a/renderdoc/driver/gl/gl_replay.h +++ b/renderdoc/driver/gl/gl_replay.h @@ -35,7 +35,6 @@ using std::map; class WrappedOpenGL; struct GLCounterContext; -struct DrawcallTreeNode; struct GLPostVSData { @@ -384,7 +383,7 @@ private: // called before the context is destroyed, to shutdown any counters void PreContextShutdownCounters(); - void FillTimers(GLCounterContext &ctx, const DrawcallTreeNode &drawnode, + void FillTimers(GLCounterContext &ctx, const DrawcallDescription &drawnode, const vector &counters); GLuint CreateShaderProgram(const vector &vs, const vector &fs,