From 3720d3e0e8a0aaafed9ebeb5381dca1ee95a1361 Mon Sep 17 00:00:00 2001 From: netborg <137700136+netborg-afps@users.noreply.github.com> Date: Sun, 23 Feb 2025 15:25:34 +0100 Subject: [PATCH] [dxvk] Removed redundant frameId tracking in frame pacer --- src/dxvk/dxvk_latency.h | 3 ++- src/dxvk/dxvk_queue.cpp | 2 +- src/dxvk/framepacer/dxvk_framepacer.h | 14 +++----------- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/dxvk/dxvk_latency.h b/src/dxvk/dxvk_latency.h index f4e74a7ce..f886e065c 100644 --- a/src/dxvk/dxvk_latency.h +++ b/src/dxvk/dxvk_latency.h @@ -128,7 +128,8 @@ namespace dxvk { virtual void notifyCpuPresentEnd( uint64_t frameId) = 0; - virtual void notifySubmit() { } + virtual void notifySubmit( + uint64_t frameId) { } virtual void notifyPresent( uint64_t frameId) { } diff --git a/src/dxvk/dxvk_queue.cpp b/src/dxvk/dxvk_queue.cpp index 0c74428a0..0ddf05c8f 100644 --- a/src/dxvk/dxvk_queue.cpp +++ b/src/dxvk/dxvk_queue.cpp @@ -48,7 +48,7 @@ namespace dxvk { DxvkLatencyInfo latencyInfo, DxvkSubmitStatus* status) { if (latencyInfo.tracker) - latencyInfo.tracker->notifySubmit(); + latencyInfo.tracker->notifySubmit(latencyInfo.frameId); std::unique_lock lock(m_mutex); m_finishCond.wait(lock, [this] { diff --git a/src/dxvk/framepacer/dxvk_framepacer.h b/src/dxvk/framepacer/dxvk_framepacer.h index f3e047195..1a8cf63f3 100644 --- a/src/dxvk/framepacer/dxvk_framepacer.h +++ b/src/dxvk/framepacer/dxvk_framepacer.h @@ -55,8 +55,8 @@ namespace dxvk { m->csFinished = std::chrono::duration_cast(now - m->start).count(); } - void notifySubmit() override { - LatencyMarkers* m = m_latencyMarkersStorage.getMarkers(m_lastSubmitFrameId+1); + void notifySubmit( uint64_t frameId ) override { + LatencyMarkers* m = m_latencyMarkersStorage.getMarkers(frameId); m->gpuSubmit.push_back(high_resolution_clock::now()); } @@ -64,7 +64,6 @@ namespace dxvk { // dx to vk translation is finished if (frameId != 0) { auto now = high_resolution_clock::now(); - m_lastSubmitFrameId = frameId; LatencyMarkers* m = m_latencyMarkersStorage.getMarkers(frameId); LatencyMarkers* next = m_latencyMarkersStorage.getMarkers(frameId+1); m->gpuSubmit.push_back(now); @@ -76,7 +75,6 @@ namespace dxvk { } void notifyQueueSubmit( uint64_t frameId ) override { - assert( frameId == m_lastQueueSubmitFrameId + 1 ); auto now = high_resolution_clock::now(); LatencyMarkers* m = m_latencyMarkersStorage.getMarkers(frameId); m->gpuQueueSubmit.push_back(now); @@ -86,7 +84,6 @@ namespace dxvk { void notifyQueuePresentBegin( uint64_t frameId ) override { if (frameId != 0) { auto now = high_resolution_clock::now(); - m_lastQueueSubmitFrameId = frameId; LatencyMarkers* m = m_latencyMarkersStorage.getMarkers(frameId); LatencyMarkers* next = m_latencyMarkersStorage.getMarkers(frameId+1); m->gpuQueueSubmit.push_back(now); @@ -97,14 +94,13 @@ namespace dxvk { void notifyGpuExecutionEnd( uint64_t frameId ) override { auto now = high_resolution_clock::now(); - LatencyMarkers* m = m_latencyMarkersStorage.getMarkers(m_lastFinishedFrameId+1); + LatencyMarkers* m = m_latencyMarkersStorage.getMarkers(frameId); m->gpuReady.push_back(now); } virtual void notifyGpuPresentBegin( uint64_t frameId ) override { // we get frameId == 0 for repeated presents (SyncInterval) if (frameId != 0) { - m_lastFinishedFrameId = frameId; auto now = high_resolution_clock::now(); LatencyMarkers* m = m_latencyMarkersStorage.getMarkers(frameId); @@ -172,10 +168,6 @@ namespace dxvk { std::unique_ptr m_mode; - uint64_t m_lastSubmitFrameId = { DXGI_MAX_SWAP_CHAIN_BUFFERS }; - uint64_t m_lastQueueSubmitFrameId = { DXGI_MAX_SWAP_CHAIN_BUFFERS }; - uint64_t m_lastFinishedFrameId = { DXGI_MAX_SWAP_CHAIN_BUFFERS }; - std::array< std::atomic< uint16_t >, 8 > m_gpuStarts = { }; static constexpr uint16_t queueSubmitBit = 1; static constexpr uint16_t gpuReadyBit = 2;