diff options
| author | Robin Kertels <robin.kertels@gmail.com> | 2023-01-07 23:52:36 +0100 |
|---|---|---|
| committer | Robin Kertels <robin.kertels@gmail.com> | 2023-03-20 16:23:35 +0100 |
| commit | 9186050daaa3cd85eabee5c5fe677f39b2a5cbe5 (patch) | |
| tree | 7de9a7aca83e0df94474f45893493da48f1454c3 /Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp | |
| parent | 002a96adb05366b12909d65023f74830bb6a082c (diff) | |
VideoBackends:Vulkan: Clean up submission thread BlockingLoop usage
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp | 47 |
1 files changed, 18 insertions, 29 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp b/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp index 80bbd7e5b5..9c460905f7 100644 --- a/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp +++ b/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp @@ -226,33 +226,25 @@ bool CommandBufferManager::CreateSubmitThread() Common::SetCurrentThreadName("Vulkan CommandBufferManager SubmitThread"); m_submit_loop->Run([this]() { - PendingCommandBufferSubmit submit; + while (true) { - std::lock_guard<std::mutex> guard(m_pending_submit_lock); - if (m_pending_submits.empty()) + PendingCommandBufferSubmit submit; { - m_submit_loop->AllowSleep(); - m_submit_worker_idle = true; - m_submit_worker_condvar.notify_all(); - return; + std::lock_guard<std::mutex> guard(m_pending_submit_lock); + if (m_pending_submits.empty()) + { + m_submit_loop->AllowSleep(); + return; + } + + submit = m_pending_submits.front(); + m_pending_submits.pop_front(); } - submit = m_pending_submits.front(); - m_pending_submits.pop_front(); - } - - SubmitCommandBuffer(submit.command_buffer_index, submit.present_swap_chain, - submit.present_image_index); - CmdBufferResources& resources = m_command_buffers[submit.command_buffer_index]; - resources.waiting_for_submit.store(false, std::memory_order_release); - - { - std::lock_guard<std::mutex> guard(m_pending_submit_lock); - if (m_pending_submits.empty()) - { - m_submit_worker_idle = true; - m_submit_worker_condvar.notify_all(); - } + SubmitCommandBuffer(submit.command_buffer_index, submit.present_swap_chain, + submit.present_image_index); + CmdBufferResources& resources = m_command_buffers[submit.command_buffer_index]; + resources.waiting_for_submit.store(false, std::memory_order_release); } }); }); @@ -265,8 +257,7 @@ void CommandBufferManager::WaitForWorkerThreadIdle() if (!m_use_threaded_submission) return; - std::unique_lock lock{m_pending_submit_lock}; - m_submit_worker_condvar.wait(lock, [&] { return m_submit_worker_idle; }); + m_submit_loop->Wait(); } void CommandBufferManager::WaitForFenceCounter(u64 fence_counter) @@ -354,12 +345,10 @@ void CommandBufferManager::SubmitCommandBuffer(bool submit_on_worker_thread, // Push to the pending submit queue. { std::lock_guard<std::mutex> guard(m_pending_submit_lock); - m_submit_worker_idle = false; m_pending_submits.push_back({present_swap_chain, present_image_index, m_current_cmd_buffer}); + // Wake up the worker thread for a single iteration. + m_submit_loop->Wakeup(); } - - // Wake up the worker thread for a single iteration. - m_submit_loop->Wakeup(); } else { |
