diff --git a/renderdoc/driver/d3d12/d3d12_command_queue_wrap.cpp b/renderdoc/driver/d3d12/d3d12_command_queue_wrap.cpp index aaadee300b..1ab9835354 100644 --- a/renderdoc/driver/d3d12/d3d12_command_queue_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_command_queue_wrap.cpp @@ -474,7 +474,7 @@ bool WrappedID3D12CommandQueue::Serialise_ExecuteCommandLists(SerialiserType &se ToStr(GetResourceManager()->GetOriginalID(m_PrevQueueId)).c_str(), ToStr(GetResourceManager()->GetOriginalID(GetResID(pQueue))).c_str()); if(m_PrevQueueId != ResourceId()) - m_pDevice->GPUSync(GetResourceManager()->GetCurrentAs(m_PrevQueueId)); + m_pDevice->DeviceWaitForIdle(); m_PrevQueueId = GetResID(pQueue); } @@ -493,7 +493,7 @@ bool WrappedID3D12CommandQueue::Serialise_ExecuteCommandLists(SerialiserType &se ID3D12CommandList *list = Unwrap(ppCommandLists[i]); real->ExecuteCommandLists(1, &list); if(D3D12_Debug_SingleSubmitFlushing() || D3D12_Debug_RT_Auditing()) - m_pDevice->GPUSync(); + m_pDevice->DeviceWaitForIdle(); BakedCmdListInfo &info = m_Cmd.m_BakedCmdListInfo[cmd]; @@ -582,7 +582,7 @@ bool WrappedID3D12CommandQueue::Serialise_ExecuteCommandLists(SerialiserType &se if(!info.executeEvents.empty()) { // ensure all GPU work has finished for readback of arguments - m_pDevice->GPUSync(); + m_pDevice->DeviceWaitForIdle(); if(m_pDevice->HasFatalError()) return false; @@ -778,7 +778,7 @@ bool WrappedID3D12CommandQueue::Serialise_ExecuteCommandLists(SerialiserType &se for(size_t i = 0; i < rerecordedCmds.size(); i++) { real->ExecuteCommandLists(1, &rerecordedCmds[i]); - m_pDevice->GPUSync(); + m_pDevice->DeviceWaitForIdle(); } } else @@ -1092,7 +1092,7 @@ void WrappedID3D12CommandQueue::ExecuteCommandListsInternal(UINT NumCommandLists queueReadback.list->Close(); ID3D12CommandList *listptr = Unwrap(queueReadback.list); queueReadback.unwrappedQueue->ExecuteCommandLists(1, &listptr); - m_pDevice->GPUSync(queueReadback.unwrappedQueue, Unwrap(queueReadback.fence)); + m_pDevice->QueueWaitForIdle(queueReadback.unwrappedQueue, Unwrap(queueReadback.fence)); data = queueReadback.readbackMapped; } @@ -1397,7 +1397,7 @@ bool WrappedID3D12CommandQueue::Serialise_Signal(SerialiserType &ser, ID3D12Fenc if(IsReplayingAndReading() && pFence) { m_pReal->Signal(Unwrap(pFence), Value); - m_pDevice->GPUSync(pQueue); + m_pDevice->DeviceWaitForIdle(); } return true; @@ -1435,7 +1435,7 @@ bool WrappedID3D12CommandQueue::Serialise_Wait(SerialiserType &ser, ID3D12Fence if(IsReplayingAndReading() && pFence) { - m_pDevice->GPUSync(pQueue); + m_pDevice->DeviceWaitForIdle(); } return true; diff --git a/renderdoc/driver/d3d12/d3d12_counters.cpp b/renderdoc/driver/d3d12/d3d12_counters.cpp index daf5274f14..bd7d381ffd 100644 --- a/renderdoc/driver/d3d12/d3d12_counters.cpp +++ b/renderdoc/driver/d3d12/d3d12_counters.cpp @@ -706,7 +706,7 @@ rdcarray D3D12Replay::FetchCounters(const rdcarray &c m_pDevice->ExecuteLists(); m_pDevice->FlushLists(); - m_pDevice->GPUSyncAllQueues(); + m_pDevice->DeviceWaitForIdle(); D3D12_RANGE range; range.Begin = 0; diff --git a/renderdoc/driver/d3d12/d3d12_debug.cpp b/renderdoc/driver/d3d12/d3d12_debug.cpp index 9392213567..42e6b2e91f 100644 --- a/renderdoc/driver/d3d12/d3d12_debug.cpp +++ b/renderdoc/driver/d3d12/d3d12_debug.cpp @@ -2116,7 +2116,7 @@ void D3D12DebugManager::GetBufferData(ID3D12Resource *buffer, uint64_t offset, u if(buffer == NULL) return; - m_pDevice->GPUSyncAllQueues(); + m_pDevice->ReplayWorkWaitForIdle(); D3D12_RESOURCE_DESC desc = buffer->GetDesc(); D3D12_HEAP_PROPERTIES heapProps = {}; @@ -2207,7 +2207,7 @@ void D3D12DebugManager::GetBufferData(ID3D12Resource *buffer, uint64_t offset, u ID3D12CommandList *l = m_DebugList; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); m_DebugAlloc->Reset(); D3D12_RANGE range = {0, (size_t)chunkSize}; @@ -2247,7 +2247,7 @@ void D3D12DebugManager::GetBufferData(ID3D12Resource *buffer, uint64_t offset, u ID3D12CommandList *l = m_DebugList; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); m_DebugAlloc->Reset(); } diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index 85b28a905f..0bec315bb0 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -678,9 +678,9 @@ WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitPara m_HeaderChunk = NULL; m_Alloc = m_DataUploadAlloc = NULL; - m_GPUSyncFence = NULL; - m_GPUSyncHandle = NULL; - m_GPUSyncCounter = 0; + m_WFIFence = NULL; + m_WFIHandle = NULL; + m_WFICounter = 0; m_OverlaySyncHandle = NULL; initStateCurBatch = 0; @@ -900,12 +900,9 @@ WrappedID3D12Device::~WrappedID3D12Device() for(size_t i = 0; i < m_InternalCmds.freecmds.size(); i++) SAFE_RELEASE(m_InternalCmds.freecmds[i]); + DeviceWaitForIdle(); for(size_t i = 0; i < m_QueueFences.size(); i++) - { - GPUSync(m_Queues[i], m_QueueFences[i]); - SAFE_RELEASE(m_QueueFences[i]); - } for(auto it = m_UploadBuffers.begin(); it != m_UploadBuffers.end(); ++it) { @@ -2180,7 +2177,7 @@ bool WrappedID3D12Device::Serialise_MapDataWrite(SerialiserType &ser, ID3D12Reso m_CurDataUpload++; if(m_CurDataUpload == ARRAY_COUNT(m_DataUploadList)) { - GPUSync(); + InternalQueueWaitForIdle(); m_CurDataUpload = 0; } } @@ -2331,7 +2328,7 @@ bool WrappedID3D12Device::Serialise_WriteToSubresource(SerialiserType &ser, ID3D m_CurDataUpload++; if(m_CurDataUpload == ARRAY_COUNT(m_DataUploadList)) { - GPUSync(); + InternalQueueWaitForIdle(); m_CurDataUpload = 0; } } @@ -2728,7 +2725,7 @@ void WrappedID3D12Device::StartFrameCapture(DeviceOwnedWindow devWnd) initStateCurBatch = 0; initStateCurList = NULL; - GPUSyncAllQueues(); + DeviceWaitForIdle(); // wait until we've synced all queues to check for these GetResourceManager()->GetRTManager()->TickASManagement(); @@ -2863,7 +2860,7 @@ bool WrappedID3D12Device::EndFrameCapture(DeviceOwnedWindow devWnd) m_State = CaptureState::BackgroundCapturing; - GPUSync(); + DeviceWaitForIdle(); } rdcarray maps = GetMaps(); @@ -3217,7 +3214,7 @@ bool WrappedID3D12Device::DiscardFrameCapture(DeviceOwnedWindow devWnd) m_State = CaptureState::BackgroundCapturing; - GPUSync(); + DeviceWaitForIdle(); queues = m_Queues; } @@ -4468,10 +4465,10 @@ void WrappedID3D12Device::CreateInternalResources() CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, __uuidof(ID3D12CommandAllocator), (void **)&m_Alloc); InternalRef(); - CreateFence(0, D3D12_FENCE_FLAG_NONE, __uuidof(ID3D12Fence), (void **)&m_GPUSyncFence); - m_GPUSyncFence->SetName(L"m_GPUSyncFence"); + CreateFence(0, D3D12_FENCE_FLAG_NONE, __uuidof(ID3D12Fence), (void **)&m_WFIFence); + m_WFIFence->SetName(L"m_WFIFence"); InternalRef(); - m_GPUSyncHandle = ::CreateEvent(NULL, FALSE, FALSE, NULL); + m_WFIHandle = ::CreateEvent(NULL, FALSE, FALSE, NULL); CreateFence(0, D3D12_FENCE_FLAG_NONE, __uuidof(ID3D12Fence), (void **)&m_OverlayFence); m_OverlayFence->SetName(L"m_OverlayFence"); @@ -4493,7 +4490,7 @@ void WrappedID3D12Device::CreateInternalResources() } GetResourceManager()->SetInternalResource(m_Alloc); - GetResourceManager()->SetInternalResource(m_GPUSyncFence); + GetResourceManager()->SetInternalResource(m_WFIFence); CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, __uuidof(ID3D12CommandAllocator), (void **)&m_DataUploadAlloc); @@ -4542,7 +4539,7 @@ void WrappedID3D12Device::CreateInternalResources() RDCERR("Failed to create RTV heap"); } - m_GPUSyncCounter = 0; + m_WFICounter = 0; if(m_TextRenderer == NULL) m_TextRenderer = new D3D12TextRenderer(this); @@ -4555,7 +4552,7 @@ void WrappedID3D12Device::CreateInternalResources() void WrappedID3D12Device::DestroyInternalResources() { - if(m_GPUSyncHandle == NULL) + if(m_WFIHandle == NULL) return; SAFE_RELEASE(m_pAMDExtObject); @@ -4585,9 +4582,9 @@ void WrappedID3D12Device::DestroyInternalResources() } SAFE_RELEASE(m_Alloc); - SAFE_RELEASE(m_GPUSyncFence); + SAFE_RELEASE(m_WFIFence); SAFE_RELEASE(m_OverlayFence); - CloseHandle(m_GPUSyncHandle); + CloseHandle(m_WFIHandle); CloseHandle(m_OverlaySyncHandle); } @@ -4595,57 +4592,61 @@ void WrappedID3D12Device::DataUploadSync() { if(m_CurDataUpload >= 0) { - GPUSync(); + InternalQueueWaitForIdle(); m_CurDataUpload = 0; } } -void WrappedID3D12Device::GPUSync(ID3D12CommandQueue *queue, ID3D12Fence *fence) +void WrappedID3D12Device::InternalQueueWaitForIdle() +{ + QueueWaitForIdle(GetQueue(), m_WFIFence); +} + +void WrappedID3D12Device::QueueWaitForIdle(ID3D12CommandQueue *queue, ID3D12Fence *fence) { - m_GPUSyncCounter++; + m_WFICounter++; if(HasFatalError()) return; - if(queue == NULL) - queue = GetQueue(); - - if(fence == NULL) - fence = m_GPUSyncFence; - - HRESULT hr = queue->Signal(fence, m_GPUSyncCounter); + HRESULT hr = queue->Signal(fence, m_WFICounter); CHECK_HR(this, hr); RDCASSERTEQUAL(hr, S_OK); - fence->SetEventOnCompletion(m_GPUSyncCounter, m_GPUSyncHandle); + fence->SetEventOnCompletion(m_WFICounter, m_WFIHandle); // wait 10s for hardware GPUs, 100s for CPU if(m_Replay && m_Replay->GetDriverInfo().vendor == GPUVendor::Software) - WaitForSingleObject(m_GPUSyncHandle, 100000); + WaitForSingleObject(m_WFIHandle, 100000); else - WaitForSingleObject(m_GPUSyncHandle, 10000); + WaitForSingleObject(m_WFIHandle, 10000); hr = m_pDevice->GetDeviceRemovedReason(); CHECK_HR(this, hr); RDCASSERTEQUAL(hr, S_OK); } -void WrappedID3D12Device::GPUSyncAllQueues() +void WrappedID3D12Device::ReplayWorkWaitForIdle() { - if(m_GPUSynced) + if(m_WaitedForIdleAfterReplay) return; - for(size_t i = 0; i < m_QueueFences.size(); i++) - GPUSync(m_Queues[i], m_QueueFences[i]); + DeviceWaitForIdle(); - m_GPUSynced = true; + m_WaitedForIdleAfterReplay = true; +} + +void WrappedID3D12Device::DeviceWaitForIdle() +{ + for(size_t i = 0; i < m_QueueFences.size(); i++) + QueueWaitForIdle(m_Queues[i], m_QueueFences[i]); } ID3D12GraphicsCommandListX *WrappedID3D12Device::GetNewList() { ID3D12GraphicsCommandListX *ret = NULL; - m_GPUSynced = false; + m_WaitedForIdleAfterReplay = false; if(!m_InternalCmds.freecmds.empty()) { @@ -4783,7 +4784,7 @@ void WrappedID3D12Device::FlushLists(bool forceSync, ID3D12CommandQueue *queue) if(!m_InternalCmds.submittedcmds.empty() || forceSync) { - GPUSync(queue); + QueueWaitForIdle(queue, m_WFIFence); if(!m_InternalCmds.submittedcmds.empty()) m_InternalCmds.freecmds.append(m_InternalCmds.submittedcmds); @@ -5382,22 +5383,22 @@ void WrappedID3D12Device::ReplayLog(uint32_t startEventID, uint32_t endEventID, { bool partial = true; - m_GPUSynced = false; + m_WaitedForIdleAfterReplay = false; if(startEventID == 0 && (replayType == eReplay_WithoutDraw || replayType == eReplay_Full)) { startEventID = 1; partial = false; - m_GPUSyncCounter++; + m_WFICounter++; - GPUSyncAllQueues(); + DeviceWaitForIdle(); // I'm not sure the reason for this, but the debug layer warns about being unable to resubmit // command lists due to the 'previous queue fence' not being ready yet, even if no fences are // signalled or waited. So instead we just signal a dummy fence each new 'frame' for(size_t i = 0; i < m_Queues.size(); i++) - CHECK_HR(this, m_Queues[i]->Signal(m_QueueFences[i], m_GPUSyncCounter)); + CHECK_HR(this, m_Queues[i]->Signal(m_QueueFences[i], m_WFICounter)); FlushLists(true); m_CurDataUpload = 0; @@ -5423,7 +5424,7 @@ void WrappedID3D12Device::ReplayLog(uint32_t startEventID, uint32_t endEventID, ExecuteLists(); FlushLists(true); - GPUSyncAllQueues(); + DeviceWaitForIdle(); // clear any previous ray dispatch references D3D12CommandData &cmd = *m_Queue->GetCommandData(); diff --git a/renderdoc/driver/d3d12/d3d12_device.h b/renderdoc/driver/d3d12/d3d12_device.h index 0bef42478d..1811fe0474 100644 --- a/renderdoc/driver/d3d12/d3d12_device.h +++ b/renderdoc/driver/d3d12/d3d12_device.h @@ -595,8 +595,8 @@ class WrappedID3D12Device : public IFrameCapturer, public ID3DDevice, public ID3 rdcarray m_Queues; rdcarray m_QueueFences; - // if we've called GPUSyncAllQueues since the last replay - bool m_GPUSynced = false; + // if we've called ReplayWorkWaitForIdle since the last replay or internal work + bool m_WaitedForIdleAfterReplay = false; // list of queues and buffers kept alive during capture artificially even if the user destroys // them, so we can use them in the capture. Storing this separately prevents races where a @@ -634,9 +634,9 @@ class WrappedID3D12Device : public IFrameCapturer, public ID3DDevice, public ID3 ID3D12GraphicsCommandList *m_DataUploadList[64] = {}; size_t m_CurDataUpload = 0; ID3D12DescriptorHeap *m_RTVHeap = NULL; - ID3D12Fence *m_GPUSyncFence; - HANDLE m_GPUSyncHandle; - UINT64 m_GPUSyncCounter; + ID3D12Fence *m_WFIFence; + HANDLE m_WFIHandle; + UINT64 m_WFICounter; ID3D12Fence *m_OverlayFence = NULL; UINT64 m_CurOverlay = 0; @@ -1073,8 +1073,16 @@ class WrappedID3D12Device : public IFrameCapturer, public ID3DDevice, public ID3 void DataUploadSync(); - void GPUSync(ID3D12CommandQueue *queue = NULL, ID3D12Fence *fence = NULL); - void GPUSyncAllQueues(); + // Sync a single queue, by submitting the fence then waiting on it + void QueueWaitForIdle(ID3D12CommandQueue *queue, ID3D12Fence *fence); + // Sync to the internal queue - used to ensure any internal work has finished (e.g. FlushLists() above) + // or generally any internal command buffers submitted to the GetQueue() main internal queue. + void InternalQueueWaitForIdle(); + // Sync all queues - this always flushes the entire GPU + void DeviceWaitForIdle(); + // Sync all queues but only once after each replay or internal work submit. used when fetching data + // or after a replay to ensure work completes on all captured queues before doing any analysis work + void ReplayWorkWaitForIdle(); RDCDriver GetFrameCaptureDriver() { return RDCDriver::D3D12; } void StartFrameCapture(DeviceOwnedWindow devWnd); diff --git a/renderdoc/driver/d3d12/d3d12_msaa_array_conv.cpp b/renderdoc/driver/d3d12/d3d12_msaa_array_conv.cpp index fad3faa46d..6a68e4d329 100644 --- a/renderdoc/driver/d3d12/d3d12_msaa_array_conv.cpp +++ b/renderdoc/driver/d3d12/d3d12_msaa_array_conv.cpp @@ -327,7 +327,7 @@ void D3D12DebugManager::CopyTex2DMSToArray(ID3D12GraphicsCommandList *list, ID3D12CommandList *l = list; m_pDevice->GetQueue()->GetReal()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(m_pDevice->GetQueue()->GetReal(), Unwrap(m_DebugFence)); + m_pDevice->QueueWaitForIdle(m_pDevice->GetQueue()->GetReal(), Unwrap(m_DebugFence)); m_DebugAlloc->Reset(); } } @@ -600,7 +600,7 @@ void D3D12DebugManager::CopyArrayToTex2DMS(ID3D12Resource *destMS, ID3D12Resourc ID3D12CommandList *l = m_DebugList; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); m_DebugAlloc->Reset(); SAFE_RELEASE(pso); diff --git a/renderdoc/driver/d3d12/d3d12_pixelhistory.cpp b/renderdoc/driver/d3d12/d3d12_pixelhistory.cpp index 8c4fb39b3e..881db1c62a 100644 --- a/renderdoc/driver/d3d12/d3d12_pixelhistory.cpp +++ b/renderdoc/driver/d3d12/d3d12_pixelhistory.cpp @@ -909,7 +909,6 @@ struct D3D12OcclusionCallback : public D3D12PixelHistoryCallback m_pDevice->ExecuteLists(); m_pDevice->FlushLists(true); - m_pDevice->GPUSyncAllQueues(); D3D12_RANGE range; range.Begin = 0; @@ -1512,7 +1511,6 @@ struct D3D12TestsFailedCallback : public D3D12PixelHistoryCallback m_pDevice->ExecuteLists(); m_pDevice->FlushLists(true); - m_pDevice->GPUSyncAllQueues(); D3D12_RANGE range; range.Begin = 0; @@ -2573,7 +2571,6 @@ struct D3D12PixelHistoryDiscardedFragmentsCallback : D3D12PixelHistoryCallback m_pDevice->ExecuteLists(); m_pDevice->FlushLists(true); - m_pDevice->GPUSyncAllQueues(); D3D12_RANGE range; range.Begin = 0; @@ -2899,7 +2896,7 @@ rdcarray D3D12Replay::PixelHistory(rdcarray event D3D12MarkerRegion occlRegion(m_pDevice->GetQueue()->GetReal(), "D3D12OcclusionCallback"); m_pDevice->ReplayLog(0, events.back().eventId, eReplay_Full); m_pDevice->FlushLists(true); - m_pDevice->GPUSyncAllQueues(); + m_pDevice->DeviceWaitForIdle(); occlCb.FetchOcclusionResults(); SAFE_RELEASE(pOcclusionQueryHeap); } @@ -2954,7 +2951,7 @@ rdcarray D3D12Replay::PixelHistory(rdcarray event "D3D12ColorAndStencilCallback"); m_pDevice->ReplayLog(0, events.back().eventId, eReplay_Full); m_pDevice->FlushLists(true); - m_pDevice->GPUSyncAllQueues(); + m_pDevice->DeviceWaitForIdle(); } // If there are any draw events, do another replay pass, in order to figure @@ -2976,7 +2973,7 @@ rdcarray D3D12Replay::PixelHistory(rdcarray event drawEvents); m_pDevice->ReplayLog(0, events.back().eventId, eReplay_Full); m_pDevice->FlushLists(true); - m_pDevice->GPUSyncAllQueues(); + m_pDevice->DeviceWaitForIdle(); tfCb->FetchOcclusionResults(); SAFE_RELEASE(pTfOcclusionQueryHeap); } @@ -3133,7 +3130,7 @@ rdcarray D3D12Replay::PixelHistory(rdcarray event "D3D12PixelHistoryPerFragmentCallback"); m_pDevice->ReplayLog(0, eventsWithFrags.rbegin()->first, eReplay_Full); m_pDevice->FlushLists(true); - m_pDevice->GPUSyncAllQueues(); + m_pDevice->DeviceWaitForIdle(); } bytebuf fragData; @@ -3187,7 +3184,7 @@ rdcarray D3D12Replay::PixelHistory(rdcarray event m_pDevice->ReplayLog(0, events.back().eventId, eReplay_Full); m_pDevice->FlushLists(true); - m_pDevice->GPUSyncAllQueues(); + m_pDevice->DeviceWaitForIdle(); discardedCb.FetchOcclusionResults(); SAFE_RELEASE(pDiscardedFragsOcclusionQueryHeap); diff --git a/renderdoc/driver/d3d12/d3d12_postvs.cpp b/renderdoc/driver/d3d12/d3d12_postvs.cpp index 2bea395902..0298c425db 100644 --- a/renderdoc/driver/d3d12/d3d12_postvs.cpp +++ b/renderdoc/driver/d3d12/d3d12_postvs.cpp @@ -2366,7 +2366,7 @@ void D3D12Replay::InitPostMSBuffers(uint32_t eventId) ID3D12CommandList *l = list; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); GetDebugManager()->ResetDebugAlloc(); @@ -2414,7 +2414,7 @@ void D3D12Replay::InitPostMSBuffers(uint32_t eventId) list->Close(); m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); GetDebugManager()->ResetDebugAlloc(); @@ -2555,7 +2555,7 @@ void D3D12Replay::InitPostMSBuffers(uint32_t eventId) ID3D12CommandList *l = list; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); GetDebugManager()->ResetDebugAlloc(); @@ -3085,7 +3085,7 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) { if(recreate) { - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); uint64_t newSize = m_SOBufferSize; if(!CreateSOBuffers()) @@ -3184,7 +3184,7 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) if(recreate) { - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); uint64_t newSize = m_SOBufferSize; if(!CreateSOBuffers()) @@ -3314,7 +3314,7 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) ID3D12CommandList *l = list; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); GetDebugManager()->ResetDebugAlloc(); @@ -3589,7 +3589,7 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) ID3D12CommandList *l = list; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); // check that things are OK, and resize up if needed D3D12_RANGE range; @@ -3700,7 +3700,7 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) l = list; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); GetDebugManager()->ResetDebugAlloc(); @@ -3722,7 +3722,7 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) l = list; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); GetDebugManager()->ResetDebugAlloc(); @@ -3774,7 +3774,7 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) ID3D12CommandList *l = list; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); // check that things are OK, and resize up if needed D3D12_RANGE range; @@ -3850,7 +3850,7 @@ void D3D12Replay::InitPostVSBuffers(uint32_t eventId) ID3D12CommandList *l = list; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); GetDebugManager()->ResetDebugAlloc(); diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index aa0ee6a3aa..e335bfad78 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -349,7 +349,7 @@ void D3D12Replay::ReplayLog(uint32_t endEventID, ReplayLogType replayType) m_pDevice->ReplayLog(0, endEventID, replayType); if(replayType == eReplay_WithoutDraw) - m_pDevice->GPUSyncAllQueues(); + m_pDevice->ReplayWorkWaitForIdle(); } SDFile *D3D12Replay::GetStructuredFile() @@ -3726,7 +3726,7 @@ void D3D12Replay::RefreshDerivedReplacements() } } - m_pDevice->GPUSync(); + m_pDevice->DeviceWaitForIdle(); for(ID3D12PipelineState *pipe : deletequeue) { @@ -3740,7 +3740,7 @@ void D3D12Replay::GetTextureData(ResourceId tex, const Subresource &sub, bool wasms = false; bool resolve = params.resolve; - m_pDevice->GPUSyncAllQueues(); + m_pDevice->ReplayWorkWaitForIdle(); ID3D12Resource *resource = NULL; diff --git a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp index 7d2656598f..2153b8d8be 100644 --- a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp +++ b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp @@ -137,7 +137,7 @@ bool D3D12ShaderDebug::CalculateMathIntrinsic(bool dxil, WrappedID3D12Device *de { ID3D12CommandList *l = cmdList; device->GetQueue()->ExecuteCommandLists(1, &l); - device->GPUSync(); + device->InternalQueueWaitForIdle(); } D3D12_RANGE range = {0, sizeof(Vec4f) * 6}; @@ -382,7 +382,7 @@ bool D3D12ShaderDebug::CalculateSampleGather( { ID3D12CommandList *l = cmdList; device->GetQueue()->ExecuteCommandLists(1, &l); - device->GPUSync(); + device->InternalQueueWaitForIdle(); } rs = prevState; @@ -2900,7 +2900,7 @@ struct PSInitialData { ID3D12CommandList *l = cmdList; m_pDevice->GetQueue()->ExecuteCommandLists(1, &l); - m_pDevice->GPUSync(); + m_pDevice->InternalQueueWaitForIdle(); } { diff --git a/renderdoc/driver/d3d12/d3d12_state.cpp b/renderdoc/driver/d3d12/d3d12_state.cpp index 4654be3fac..52c814f5bf 100644 --- a/renderdoc/driver/d3d12/d3d12_state.cpp +++ b/renderdoc/driver/d3d12/d3d12_state.cpp @@ -67,7 +67,7 @@ void D3D12RenderState::ResolvePendingIndirectState(WrappedID3D12Device *device) if(indirectState.argsBuf == NULL) return; - device->GPUSync(); + device->DeviceWaitForIdle(); D3D12_RANGE range = {0, D3D12CommandData::m_IndirectSize}; byte *mapPtr = NULL;