From 48d0f80a865a15aa6618da550259fc59c990e37d Mon Sep 17 00:00:00 2001 From: kd-11 Date: Mon, 8 Mar 2021 20:22:02 +0300 Subject: [PATCH] vk: Add an alternate async queue scheduler - This version violates spec but does not rely on CPU threads to keep the GPU from hanging. It's ironically much safer to use. --- rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp b/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp index dafbd3f193..150c23184d 100644 --- a/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp +++ b/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp @@ -8,10 +8,15 @@ #include +#define WITH_CPU_SCHEDULER 1 + namespace vk { void AsyncTaskScheduler::operator()() { +#if WITH_CPU_SCHEDULER + thread_ctrl::set_native_priority(1); + add_ref(); while (thread_ctrl::state() != thread_state::aborting) @@ -24,6 +29,7 @@ namespace vk } release(); +#endif } void AsyncTaskScheduler::delayed_init() @@ -61,8 +67,16 @@ namespace vk sync_label->queue1_signal->signal(*m_current_cb, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0); - m_event_queue.push(sync_label); - m_sync_label = sync_label->queue2_signal.get(); +#if WITH_CPU_SCHEDULER + { + m_event_queue.push(sync_label); + m_sync_label = sync_label->queue2_signal.get(); + } +#else + { + m_sync_label = sync_label->queue1_signal.get(); + } +#endif } AsyncTaskScheduler::~AsyncTaskScheduler()