Skip to content

Commit f8b2520

Browse files
committed
Fix D3D12 Pixel History ExecuteIndirect with multiple draws
Update m_IndirectData.argsOffset inside the loop Clear the m_IndirectData outside of the loop Add not NULL assert for argsBuffer in ReplayDraw() helper
1 parent be6cc2d commit f8b2520

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4192,6 +4192,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ExecuteIndirect(
41924192
(pCountBuffer ? pCountBuffer->GetGPUVirtualAddress() : 0) + CountBufferOffset,
41934193
MaxCommandCount);
41944194

4195+
m_Cmd->m_IndirectData.commandSig = pCommandSignature;
41954196
m_Cmd->m_IndirectData.argsBuffer = patched.first;
41964197
m_Cmd->m_IndirectData.argsOffset = patched.second;
41974198

@@ -4223,7 +4224,6 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ExecuteIndirect(
42234224

42244225
for(uint32_t i = 0; i < countToReplay; i++)
42254226
{
4226-
m_Cmd->m_IndirectData.commandSig = pCommandSignature;
42274227
ActionFlags drawType =
42284228
comSig->sig.graphics ? ActionFlags::Drawcall : ActionFlags::Dispatch;
42294229

@@ -4253,12 +4253,12 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ExecuteIndirect(
42534253
}
42544254
}
42554255

4256-
m_Cmd->m_IndirectData.commandSig = NULL;
4257-
m_Cmd->m_IndirectData.argsBuffer = NULL;
4258-
m_Cmd->m_IndirectData.argsOffset = 0;
4259-
42604256
argOffset += comSig->sig.ByteStride;
4257+
m_Cmd->m_IndirectData.argsOffset += comSig->sig.ByteStride;
42614258
}
4259+
m_Cmd->m_IndirectData.commandSig = NULL;
4260+
m_Cmd->m_IndirectData.argsBuffer = NULL;
4261+
m_Cmd->m_IndirectData.argsOffset = 0;
42624262

42634263
D3D12MarkerRegion::End(list);
42644264
}

renderdoc/driver/d3d12/d3d12_device.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5595,6 +5595,7 @@ void WrappedID3D12Device::ReplayDraw(ID3D12GraphicsCommandListX *cmd, const Acti
55955595
// TODO: support replay of draws not in callback
55965596
D3D12CommandData *cmdData = m_Queue->GetCommandData();
55975597
RDCASSERT(cmdData->m_IndirectData.commandSig != NULL);
5598+
RDCASSERT(cmdData->m_IndirectData.argsBuffer != NULL);
55985599
cmd->ExecuteIndirect(cmdData->m_IndirectData.commandSig, 1, cmdData->m_IndirectData.argsBuffer,
55995600
cmdData->m_IndirectData.argsOffset, NULL, 0);
56005601
}

0 commit comments

Comments
 (0)