From 223627c38178873d8d2a6bae01b86026116a67ce Mon Sep 17 00:00:00 2001 From: GPUCode Date: Sat, 4 Mar 2023 22:33:25 +0200 Subject: [PATCH] vk_scheduler: Prevent DispatchWork stalls * Now that Finish no longer depends on the queue being empty of not we can move the chunk execution out of the work_mutex scope --- src/video_core/renderer_vulkan/vk_scheduler.cpp | 6 ++---- src/video_core/renderer_vulkan/vk_scheduler.h | 1 - 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp index d64a0ef2c..5f8426656 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp @@ -72,7 +72,6 @@ void Scheduler::WorkerThread(std::stop_token stop_token) { Common::SetCurrentThreadName("VulkanWorker"); do { std::unique_ptr work; - bool has_submit{false}; { std::unique_lock lock{work_mutex}; if (work_queue.empty()) { @@ -84,10 +83,9 @@ void Scheduler::WorkerThread(std::stop_token stop_token) { } work = std::move(work_queue.front()); work_queue.pop(); - - has_submit = work->HasSubmit(); - work->ExecuteAll(current_cmdbuf); } + const bool has_submit = work->HasSubmit(); + work->ExecuteAll(current_cmdbuf); if (has_submit) { AllocateWorkerCommandBuffers(); } diff --git a/src/video_core/renderer_vulkan/vk_scheduler.h b/src/video_core/renderer_vulkan/vk_scheduler.h index 2c320b369..aede27be7 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.h +++ b/src/video_core/renderer_vulkan/vk_scheduler.h @@ -213,7 +213,6 @@ private: std::mutex work_mutex; std::mutex queue_mutex; std::condition_variable_any work_cv; - std::condition_variable wait_cv; std::jthread worker_thread; bool use_worker_thread; };