diff options
author | Liam <byteslice@airmail.cc> | 2023-01-07 17:56:31 +0100 |
---|---|---|
committer | Liam <byteslice@airmail.cc> | 2023-01-07 20:35:11 +0100 |
commit | c19c8ac92c4554dd1189ebb8d03a7adb79c9980a (patch) | |
tree | ef215a403794e4b8fccf9255f1fafa2dc26d94d2 /src/video_core/renderer_vulkan/vk_turbo_mode.cpp | |
parent | Merge pull request #9570 from liamwhite/less-clock-boost (diff) | |
download | yuzu-c19c8ac92c4554dd1189ebb8d03a7adb79c9980a.tar yuzu-c19c8ac92c4554dd1189ebb8d03a7adb79c9980a.tar.gz yuzu-c19c8ac92c4554dd1189ebb8d03a7adb79c9980a.tar.bz2 yuzu-c19c8ac92c4554dd1189ebb8d03a7adb79c9980a.tar.lz yuzu-c19c8ac92c4554dd1189ebb8d03a7adb79c9980a.tar.xz yuzu-c19c8ac92c4554dd1189ebb8d03a7adb79c9980a.tar.zst yuzu-c19c8ac92c4554dd1189ebb8d03a7adb79c9980a.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/renderer_vulkan/vk_turbo_mode.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_turbo_mode.cpp b/src/video_core/renderer_vulkan/vk_turbo_mode.cpp index 852b86f84..c42594149 100644 --- a/src/video_core/renderer_vulkan/vk_turbo_mode.cpp +++ b/src/video_core/renderer_vulkan/vk_turbo_mode.cpp @@ -14,11 +14,21 @@ using namespace Common::Literals; TurboMode::TurboMode(const vk::Instance& instance, const vk::InstanceDispatch& dld) : m_device{CreateDevice(instance, dld, VK_NULL_HANDLE)}, m_allocator{m_device, false} { + { + std::scoped_lock lk{m_submission_lock}; + m_submission_time = std::chrono::steady_clock::now(); + } m_thread = std::jthread([&](auto stop_token) { Run(stop_token); }); } TurboMode::~TurboMode() = default; +void TurboMode::QueueSubmitted() { + std::scoped_lock lk{m_submission_lock}; + m_submission_time = std::chrono::steady_clock::now(); + m_submission_cv.notify_one(); +} + void TurboMode::Run(std::stop_token stop_token) { auto& dld = m_device.GetLogical(); @@ -199,6 +209,13 @@ void TurboMode::Run(std::stop_token stop_token) { // Wait for completion. fence.Wait(); + + // Wait for the next graphics queue submission if necessary. + std::unique_lock lk{m_submission_lock}; + Common::CondvarWait(m_submission_cv, lk, stop_token, [this] { + return (std::chrono::steady_clock::now() - m_submission_time) <= + std::chrono::milliseconds{100}; + }); } } |