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.
This commit is contained in:
baldurk
2021-06-30 16:18:08 +01:00
parent 8059f129d5
commit d8809653a6
4 changed files with 34 additions and 0 deletions
@@ -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];
@@ -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);
@@ -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)
@@ -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 <class SerialiserType>
@@ -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 <class SerialiserType>
@@ -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 <class SerialiserType>
@@ -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 <class SerialiserType>