mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-24 06:36:08 +00:00
Process ray dispatches in indirect argument lists
This commit is contained in:
@@ -3857,6 +3857,37 @@ void WrappedID3D12GraphicsCommandList::FinaliseExecuteIndirectEvents(BakedCmdLis
|
||||
|
||||
break;
|
||||
}
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS:
|
||||
{
|
||||
D3D12_DISPATCH_RAYS_DESC *args = (D3D12_DISPATCH_RAYS_DESC *)data;
|
||||
data += sizeof(D3D12_DISPATCH_RAYS_DESC);
|
||||
|
||||
curAction.dispatchDimension[0] = args->Width;
|
||||
curAction.dispatchDimension[1] = args->Height;
|
||||
curAction.dispatchDimension[2] = args->Depth;
|
||||
curAction.flags |= ActionFlags::DispatchRay | ActionFlags::Indirect;
|
||||
curAction.customName =
|
||||
StringFormat::Fmt("[%u] arg%u: IndirectDispatchRays(<%u, %u, %u>)", i, a,
|
||||
curAction.dispatchDimension[0], curAction.dispatchDimension[1],
|
||||
curAction.dispatchDimension[2]);
|
||||
|
||||
fakeChunk->name = curAction.customName;
|
||||
|
||||
structuriser.Serialise("ArgumentData"_lit, *args).Important();
|
||||
|
||||
// if this is the first action of the indirect, we could have picked up previous
|
||||
// non-indirect events in this action, so the EID will be higher than we expect. Just
|
||||
// assign the action's EID
|
||||
eid = curAction.eventId;
|
||||
|
||||
m_Cmd->AddUsage(state, actions[idx]);
|
||||
|
||||
// advance
|
||||
idx++;
|
||||
eid++;
|
||||
|
||||
break;
|
||||
}
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT:
|
||||
{
|
||||
size_t argSize = sizeof(uint32_t) * arg.Constant.Num32BitValuesToSet;
|
||||
@@ -4282,6 +4313,7 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ExecuteIndirect(
|
||||
{
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH:
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH:
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS:
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED:
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW:
|
||||
{
|
||||
|
||||
@@ -799,6 +799,7 @@ uint32_t ArgumentTypeByteSize(const D3D12_INDIRECT_ARGUMENT_DESC &arg)
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED: return sizeof(D3D12_DRAW_INDEXED_ARGUMENTS);
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH: return sizeof(D3D12_DISPATCH_ARGUMENTS);
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH: return sizeof(D3D12_DISPATCH_MESH_ARGUMENTS);
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS: return sizeof(D3D12_DISPATCH_RAYS_DESC);
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT:
|
||||
return sizeof(uint32_t) * arg.Constant.Num32BitValuesToSet;
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW: return sizeof(D3D12_VERTEX_BUFFER_VIEW);
|
||||
|
||||
@@ -554,6 +554,7 @@ DECLARE_REFLECTION_STRUCT(D3D12RootSignature);
|
||||
struct D3D12CommandSignature
|
||||
{
|
||||
bool graphics = true;
|
||||
bool raytraced = false;
|
||||
UINT ByteStride = 0;
|
||||
UINT PackedByteSize = 0;
|
||||
rdcarray<D3D12_INDIRECT_ARGUMENT_DESC> arguments;
|
||||
|
||||
@@ -1041,6 +1041,11 @@ rdcpair<ID3D12Resource *, UINT64> D3D12DebugManager::PatchExecuteIndirect(
|
||||
offset += sizeof(D3D12_DISPATCH_MESH_ARGUMENTS);
|
||||
break;
|
||||
}
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS:
|
||||
{
|
||||
offset += sizeof(D3D12_DISPATCH_RAYS_DESC);
|
||||
break;
|
||||
}
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT:
|
||||
{
|
||||
offset += sizeof(uint32_t) * arg.Constant.Num32BitValuesToSet;
|
||||
|
||||
@@ -1851,6 +1851,12 @@ bool WrappedID3D12Device::Serialise_CreateCommandSignature(SerialiserType &ser,
|
||||
wrapped->sig.PackedByteSize += sizeof(D3D12_DISPATCH_MESH_ARGUMENTS);
|
||||
break;
|
||||
}
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS:
|
||||
{
|
||||
wrapped->sig.PackedByteSize += sizeof(D3D12_DISPATCH_RAYS_DESC);
|
||||
wrapped->sig.raytraced = true;
|
||||
break;
|
||||
}
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT:
|
||||
{
|
||||
wrapped->sig.PackedByteSize +=
|
||||
@@ -1947,6 +1953,10 @@ HRESULT WrappedID3D12Device::CreateCommandSignature(const D3D12_COMMAND_SIGNATUR
|
||||
GetResourceManager()->AddLiveResource(wrapped->GetResourceID(), wrapped);
|
||||
}
|
||||
|
||||
if(pDesc->pArgumentDescs[pDesc->NumArgumentDescs - 1].Type ==
|
||||
D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS)
|
||||
wrapped->sig.raytraced = true;
|
||||
|
||||
*ppvCommandSignature = (ID3D12CommandSignature *)wrapped;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -92,7 +92,8 @@ void D3D12RenderState::ResolvePendingIndirectState(WrappedID3D12Device *device)
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW:
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED:
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH:
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH: break;
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH:
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS: break;
|
||||
case D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT:
|
||||
{
|
||||
size_t argSize = sizeof(uint32_t) * arg.Constant.Num32BitValuesToSet;
|
||||
|
||||
Reference in New Issue
Block a user