From c6757763e4a66bca9894386c320f0423de85df82 Mon Sep 17 00:00:00 2001 From: Lander Gallastegi Date: Sun, 4 May 2025 17:56:32 +0200 Subject: [PATCH] Bring back applying pending operations in wait --- src/video_core/renderer_vulkan/vk_rasterizer.cpp | 2 -- src/video_core/renderer_vulkan/vk_scheduler.cpp | 7 +++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index d3ad0e319..d789912bb 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -475,7 +475,6 @@ bool Rasterizer::BindResources(const Pipeline* pipeline) { pipeline->BindResources(set_writes, buffer_barriers, push_data); if (uses_dma && !fault_process_pending) { - fault_process_pending = true; // We only use fault buffer for DMA right now. { std::shared_lock lock{dma_sync_mapped_ranges_mutex}; @@ -483,7 +482,6 @@ bool Rasterizer::BindResources(const Pipeline* pipeline) { buffer_cache.SynchronizeRange(range.lower(), range.upper() - range.lower()); } } - // buffer_cache.MemoryBarrier(); } fault_process_pending |= uses_dma; diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp index c29364c55..46bc573de 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp @@ -91,8 +91,11 @@ void Scheduler::Wait(u64 tick) { } master_semaphore.Wait(tick); - // We should apply pending operations until the tick we are waiting for. - // but that may introduce unpredictable timing issues. + // Apply pending operations until the wait tick + while (!pending_ops.empty() && pending_ops.front().gpu_tick <= tick) { + pending_ops.front().callback(); + pending_ops.pop(); + } } void Scheduler::AllocateWorkerCommandBuffers() {