From ccc2a5023a5523a8d81729c26f159b4ee91f12f0 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Tue, 14 Apr 2026 16:29:45 +0100 Subject: [PATCH] D3D12 EI ActionCallback replay don't generate negative argidx For an EI with a single argument then curEID == baseEventID because the fake push/pop markers are not present --- renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp b/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp index deba85d25..8b80d983c 100644 --- a/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp @@ -4420,7 +4420,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ExecuteIndirect( if(m_Cmd->m_FirstEventID > 1) { - const uint32_t argidx = (curEID - baseEventID - 1); + const uint32_t argidx = (curEID > baseEventID) ? (curEID - baseEventID - 1) : 0; const uint32_t execidx = argidx / comSig->sig.arguments.count(); argOffset += comSig->sig.ByteStride * execidx; @@ -4516,7 +4516,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ExecuteIndirect( } else { - const uint32_t argidx = (curEID - baseEventID - 1); + const uint32_t argidx = (curEID > baseEventID) ? (curEID - baseEventID - 1) : 0; const uint32_t execidx = argidx / comSig->sig.arguments.count(); // don't do anything when selecting the final popmarker as well - everything will have