diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index c3deeea88..590481089 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -3748,8 +3748,12 @@ void WrappedID3D12Device::DumpDRED(D3D12_AUTO_BREADCRUMB_NODE *node, if(ctx && numContexts > 0 && ctx->BreadcrumbIndex == i) { RDCLOG(" [%u]: %s -- %ls", i, ToStr(node->pCommandHistory[i]).c_str(), ctx->pContextString); - ctx++; - numContexts--; + // sometimes get duplicates? + while(ctx->BreadcrumbIndex == i) + { + ctx++; + numContexts--; + } } else { diff --git a/renderdoc/driver/d3d12/d3d12_device.h b/renderdoc/driver/d3d12/d3d12_device.h index 1169c0644..77de1437e 100644 --- a/renderdoc/driver/d3d12/d3d12_device.h +++ b/renderdoc/driver/d3d12/d3d12_device.h @@ -549,6 +549,26 @@ class WrappedID3D12CommandQueue; template \ bool CONCAT(Serialise_, func(SerialiserType &ser, __VA_ARGS__)); +template +inline void GetDREDContexts(const DRED_NODE *node, D3D12_DRED_BREADCRUMB_CONTEXT **contexts, + UINT &numContexts); + +template <> +inline void GetDREDContexts(const D3D12_AUTO_BREADCRUMB_NODE *node, + D3D12_DRED_BREADCRUMB_CONTEXT **contexts, UINT &numContexts) +{ + *contexts = NULL; + numContexts = 0; +} + +template <> +inline void GetDREDContexts(const D3D12_AUTO_BREADCRUMB_NODE1 *node, + D3D12_DRED_BREADCRUMB_CONTEXT **contexts, UINT &numContexts) +{ + *contexts = node->pBreadcrumbContexts; + numContexts = node->BreadcrumbContextsCount; +} + class WrappedID3D12Device : public IFrameCapturer, public ID3DDevice, public ID3D12Device14 { private: @@ -805,21 +825,6 @@ private: void DumpDREDPageFault(const D3D12_DRED_PAGE_FAULT_OUTPUT &DredPageFaultOutput); - template - void GetDREDContexts(DRED_NODE *node, D3D12_DRED_BREADCRUMB_CONTEXT **contexts, UINT &numContexts) - { - *contexts = NULL; - numContexts = 0; - } - - template <> - void GetDREDContexts(D3D12_AUTO_BREADCRUMB_NODE1 *node, D3D12_DRED_BREADCRUMB_CONTEXT **contexts, - UINT &numContexts) - { - *contexts = node->pBreadcrumbContexts; - numContexts = node->BreadcrumbContextsCount; - } - template void DumpDRED(DRED_NODE *head) {