diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.h b/rpcs3/Emu/RSX/VK/VKGSRender.h index da28fa6e0a..83a9bdafa6 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.h +++ b/rpcs3/Emu/RSX/VK/VKGSRender.h @@ -94,14 +94,16 @@ struct command_buffer_chunk: public vk::command_buffer bool poke() { + reader_lock lock(guard_mutex); + if (vkGetFenceStatus(m_device, submit_fence) == VK_SUCCESS) { - std::lock_guard lock(guard_mutex); + lock.upgrade(); if (pending) { - vk::reset_fence(&submit_fence); pending = false; + vk::reset_fence(&submit_fence); } } @@ -110,7 +112,7 @@ struct command_buffer_chunk: public vk::command_buffer void wait() { - std::lock_guard lock(guard_mutex); + reader_lock lock(guard_mutex); if (!pending) return; @@ -124,8 +126,13 @@ struct command_buffer_chunk: public vk::command_buffer break; } - vk::reset_fence(&submit_fence); - pending = false; + lock.upgrade(); + + if (pending) + { + vk::reset_fence(&submit_fence); + pending = false; + } } };