From d8809653a613df139c93da82e7ed7e990efb563d Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 30 Jun 2021 10:35:12 +0100 Subject: [PATCH] Force NodeMask to 0 on replay. Closes #2307 * We don't generally support multi-gpu, but forcing NodeMask to be 0 on replay for all cases may let some captures open when they couldn't otherwise. It may not produce meaningful or correct results. --- .../driver/d3d12/d3d12_command_list_wrap.cpp | 4 ++++ renderdoc/driver/d3d12/d3d12_device_wrap.cpp | 4 ++++ renderdoc/driver/d3d12/d3d12_device_wrap4.cpp | 2 ++ renderdoc/driver/d3d12/d3d12_serialise.cpp | 24 +++++++++++++++++++ 4 files changed, 34 insertions(+) diff --git a/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp b/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp index ee49d3ea1..303127d56 100644 --- a/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_command_list_wrap.cpp @@ -214,6 +214,8 @@ bool WrappedID3D12GraphicsCommandList::Serialise_Reset(SerialiserType &ser, if(IsReplayingAndReading()) { + nodeMask = 0; + m_Cmd->m_LastCmdListID = BakedCommandList; if(IsActiveReplaying(m_State)) @@ -4401,6 +4403,8 @@ bool WrappedID3D12GraphicsCommandList::Serialise_ExecuteIndirect( D3D12_COMMAND_LIST_TYPE type = m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].type; UINT nodeMask = m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].nodeMask; + nodeMask = 0; + ResourceId allocid = m_Cmd->m_BakedCmdListInfo[m_Cmd->m_LastCmdListID].allocator; ID3D12CommandAllocator *allocator = m_Cmd->m_CrackedAllocators[allocid]; diff --git a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp index 43a1b1fc3..d750d7c9b 100644 --- a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp @@ -272,6 +272,8 @@ bool WrappedID3D12Device::Serialise_CreateCommandList(SerialiserType &ser, UINT if(IsReplayingAndReading()) { + nodeMask = 0; + ID3D12GraphicsCommandList *list = NULL; HRESULT hr = CreateCommandList(nodeMask, type, pCommandAllocator, pInitialState, __uuidof(ID3D12GraphicsCommandList), (void **)&list); @@ -944,6 +946,8 @@ bool WrappedID3D12Device::Serialise_CreateRootSignature(SerialiserType &ser, UIN if(IsReplayingAndReading()) { + nodeMask = 0; + ID3D12RootSignature *ret = NULL; HRESULT hr = m_pDevice->CreateRootSignature(nodeMask, pBlobWithRootSignature, (SIZE_T)blobLengthInBytes, guid, (void **)&ret); diff --git a/renderdoc/driver/d3d12/d3d12_device_wrap4.cpp b/renderdoc/driver/d3d12/d3d12_device_wrap4.cpp index 06f66fa3c..4f7b1884c 100644 --- a/renderdoc/driver/d3d12/d3d12_device_wrap4.cpp +++ b/renderdoc/driver/d3d12/d3d12_device_wrap4.cpp @@ -50,6 +50,8 @@ bool WrappedID3D12Device::Serialise_CreateCommandList1(SerialiserType &ser, UINT if(IsReplayingAndReading()) { + nodeMask = 0; + ID3D12GraphicsCommandList *list = NULL; HRESULT hr = E_NOINTERFACE; if(m_pDevice4) diff --git a/renderdoc/driver/d3d12/d3d12_serialise.cpp b/renderdoc/driver/d3d12/d3d12_serialise.cpp index dcc50da32..4ee882d79 100644 --- a/renderdoc/driver/d3d12/d3d12_serialise.cpp +++ b/renderdoc/driver/d3d12/d3d12_serialise.cpp @@ -474,6 +474,9 @@ void DoSerialise(SerialiserType &ser, D3D12_EXPANDED_PIPELINE_STATE_STREAM_DESC SERIALISE_MEMBER(Flags); SERIALISE_MEMBER(ViewInstancing); SERIALISE_MEMBER(CS); + + if(ser.IsReading()) + el.NodeMask = 0; } template <> @@ -537,6 +540,9 @@ void DoSerialise(SerialiserType &ser, D3D12_COMMAND_QUEUE_DESC &el) SERIALISE_MEMBER(Priority); SERIALISE_MEMBER(Flags); SERIALISE_MEMBER(NodeMask); + + if(ser.IsReading()) + el.NodeMask = 0; } template @@ -703,6 +709,9 @@ void DoSerialise(SerialiserType &ser, D3D12_COMMAND_SIGNATURE_DESC &el) SERIALISE_MEMBER(NumArgumentDescs); SERIALISE_MEMBER_ARRAY(pArgumentDescs, NumArgumentDescs); SERIALISE_MEMBER(NodeMask); + + if(ser.IsReading()) + el.NodeMask = 0; } template <> @@ -747,6 +756,9 @@ void DoSerialise(SerialiserType &ser, D3D12_GRAPHICS_PIPELINE_STATE_DESC &el) SERIALISE_MEMBER(NodeMask); SERIALISE_MEMBER(CachedPSO); SERIALISE_MEMBER(Flags); + + if(ser.IsReading()) + el.NodeMask = 0; } template <> @@ -770,6 +782,9 @@ void DoSerialise(SerialiserType &ser, D3D12_COMPUTE_PIPELINE_STATE_DESC &el) SERIALISE_MEMBER(NodeMask); SERIALISE_MEMBER(CachedPSO); SERIALISE_MEMBER(Flags); + + if(ser.IsReading()) + el.NodeMask = 0; } template <> @@ -1177,6 +1192,9 @@ void DoSerialise(SerialiserType &ser, D3D12_HEAP_PROPERTIES &el) SERIALISE_MEMBER(MemoryPoolPreference); SERIALISE_MEMBER(CreationNodeMask); SERIALISE_MEMBER(VisibleNodeMask); + + if(ser.IsReading()) + el.CreationNodeMask = el.VisibleNodeMask = 0; } template @@ -1195,6 +1213,9 @@ void DoSerialise(SerialiserType &ser, D3D12_DESCRIPTOR_HEAP_DESC &el) SERIALISE_MEMBER(NumDescriptors); SERIALISE_MEMBER(Flags); SERIALISE_MEMBER(NodeMask); + + if(ser.IsReading()) + el.NodeMask = 0; } template @@ -1203,6 +1224,9 @@ void DoSerialise(SerialiserType &ser, D3D12_QUERY_HEAP_DESC &el) SERIALISE_MEMBER(Type); SERIALISE_MEMBER(Count); SERIALISE_MEMBER(NodeMask); + + if(ser.IsReading()) + el.NodeMask = 0; } template