diff options
| author | 2023-12-16 13:58:00 -0500 | |
|---|---|---|
| committer | 2023-12-16 13:58:00 -0500 | |
| commit | 927be7561688c8b0e54026d70e3e47da4ae04ae3 (patch) | |
| tree | bdbad9edb1dd94cd12befc2db2f6c27d63fcf564 | |
| parent | Merge pull request #12335 from t895/per-game-settings (diff) | |
| parent | renderer_vulkan: bound async presentation queue growth (diff) | |
| download | yuzu-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.cpp | 13 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_present_manager.h | 2 |
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 | ||
| 290 | void PresentManager::RecreateSwapchain(Frame* frame) { | 290 | void 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 | |||
| 295 | void 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 | ||
| 295 | void PresentManager::CopyToSwapchain(Frame* frame) { | 302 | void 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 | |||
| 65 | private: | 67 | private: |
| 66 | const vk::Instance& instance; | 68 | const vk::Instance& instance; |
| 67 | Core::Frontend::EmuWindow& render_window; | 69 | Core::Frontend::EmuWindow& render_window; |