summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar liamwhite2023-12-16 13:58:00 -0500
committerGravatar GitHub2023-12-16 13:58:00 -0500
commit927be7561688c8b0e54026d70e3e47da4ae04ae3 (patch)
treebdbad9edb1dd94cd12befc2db2f6c27d63fcf564
parentMerge pull request #12335 from t895/per-game-settings (diff)
parentrenderer_vulkan: bound async presentation queue growth (diff)
downloadyuzu-927be7561688c8b0e54026d70e3e47da4ae04ae3.tar.gz
yuzu-927be7561688c8b0e54026d70e3e47da4ae04ae3.tar.xz
yuzu-927be7561688c8b0e54026d70e3e47da4ae04ae3.zip
Merge pull request #12345 from liamwhite/a-flock-of-seagulls
renderer_vulkan: cap async presentation frame count
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_vulkan/vk_present_manager.cpp13
-rw-r--r--src/video_core/renderer_vulkan/vk_present_manager.h2
2 files changed, 12 insertions, 3 deletions
diff --git a/src/video_core/renderer_vulkan/vk_present_manager.cpp b/src/video_core/renderer_vulkan/vk_present_manager.cpp
index 8e4c74b5c..a59e2d2d1 100644
--- a/src/video_core/renderer_vulkan/vk_present_manager.cpp
+++ b/src/video_core/renderer_vulkan/vk_present_manager.cpp
@@ -102,8 +102,8 @@ PresentManager::PresentManager(const vk::Instance& instance_,
102 memory_allocator{memory_allocator_}, scheduler{scheduler_}, swapchain{swapchain_}, 102 memory_allocator{memory_allocator_}, scheduler{scheduler_}, swapchain{swapchain_},
103 surface{surface_}, blit_supported{CanBlitToSwapchain(device.GetPhysical(), 103 surface{surface_}, blit_supported{CanBlitToSwapchain(device.GetPhysical(),
104 swapchain.GetImageViewFormat())}, 104 swapchain.GetImageViewFormat())},
105 use_present_thread{Settings::values.async_presentation.GetValue()}, 105 use_present_thread{Settings::values.async_presentation.GetValue()} {
106 image_count{swapchain.GetImageCount()} { 106 SetImageCount();
107 107
108 auto& dld = device.GetLogical(); 108 auto& dld = device.GetLogical();
109 cmdpool = dld.CreateCommandPool({ 109 cmdpool = dld.CreateCommandPool({
@@ -289,7 +289,14 @@ void PresentManager::PresentThread(std::stop_token token) {
289 289
290void PresentManager::RecreateSwapchain(Frame* frame) { 290void PresentManager::RecreateSwapchain(Frame* frame) {
291 swapchain.Create(*surface, frame->width, frame->height); 291 swapchain.Create(*surface, frame->width, frame->height);
292 image_count = swapchain.GetImageCount(); 292 SetImageCount();
293}
294
295void PresentManager::SetImageCount() {
296 // We cannot have more than 5 images in flight at any given time.
297 // FRAMES_IN_FLIGHT is 7, and the cache TICKS_TO_DESTROY is 6.
298 // Mali drivers will give us 6.
299 image_count = std::min<size_t>(swapchain.GetImageCount(), 5);
293} 300}
294 301
295void PresentManager::CopyToSwapchain(Frame* frame) { 302void PresentManager::CopyToSwapchain(Frame* frame) {
diff --git a/src/video_core/renderer_vulkan/vk_present_manager.h b/src/video_core/renderer_vulkan/vk_present_manager.h
index 337171a09..23ee61c8c 100644
--- a/src/video_core/renderer_vulkan/vk_present_manager.h
+++ b/src/video_core/renderer_vulkan/vk_present_manager.h
@@ -62,6 +62,8 @@ private:
62 62
63 void RecreateSwapchain(Frame* frame); 63 void RecreateSwapchain(Frame* frame);
64 64
65 void SetImageCount();
66
65private: 67private:
66 const vk::Instance& instance; 68 const vk::Instance& instance;
67 Core::Frontend::EmuWindow& render_window; 69 Core::Frontend::EmuWindow& render_window;