summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp')
-rw-r--r--Source/Core/VideoBackends/Vulkan/CommandBufferManager.cpp47
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
{