diff options
| author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-05-07 06:26:12 -0300 |
|---|---|---|
| committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-22 21:51:30 -0400 |
| commit | 36f158626726f940d9dba22a2b03ebbb5aa41c5e (patch) | |
| tree | 8323e280f214fdf8c0b4d47303b47bd3d0a3fb0a /src/video_core/renderer_vulkan/vk_scheduler.h | |
| parent | 56c47951c5d92d5e6145060469528301c67e0754 (diff) | |
vk_scheduler: Use locks instead of SPSC a queue
This tries to fix a data race where we'd wait forever for the GPU.
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_scheduler.h')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_scheduler.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/video_core/renderer_vulkan/vk_scheduler.h b/src/video_core/renderer_vulkan/vk_scheduler.h index 40215c4c5..6600fb142 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.h +++ b/src/video_core/renderer_vulkan/vk_scheduler.h @@ -6,14 +6,14 @@ #include <atomic> #include <condition_variable> +#include <queue> #include <cstddef> #include <memory> -#include <stack> #include <thread> #include <utility> + #include "common/alignment.h" #include "common/common_types.h" -#include "common/threadsafe_queue.h" #include "video_core/renderer_vulkan/vk_master_semaphore.h" #include "video_core/vulkan_common/vulkan_wrapper.h" @@ -220,11 +220,13 @@ private: std::array<VkImage, 9> renderpass_images{}; std::array<VkImageSubresourceRange, 9> renderpass_image_ranges{}; - Common::SPSCQueue<std::unique_ptr<CommandChunk>> chunk_queue; - Common::SPSCQueue<std::unique_ptr<CommandChunk>> chunk_reserve; - std::mutex mutex; - std::condition_variable cv; - bool quit = false; + std::queue<std::unique_ptr<CommandChunk>> work_queue; + std::vector<std::unique_ptr<CommandChunk>> chunk_reserve; + std::mutex reserve_mutex; + std::mutex work_mutex; + std::condition_variable work_cv; + std::condition_variable wait_cv; + std::atomic_bool quit{}; }; } // namespace Vulkan |
