Merge pull request #12345 from liamwhite/a-flock-of-seagulls
renderer_vulkan: cap async presentation frame count
This commit is contained in:
commit
927be75616
|
@ -102,8 +102,8 @@ PresentManager::PresentManager(const vk::Instance& instance_,
|
||||||
memory_allocator{memory_allocator_}, scheduler{scheduler_}, swapchain{swapchain_},
|
memory_allocator{memory_allocator_}, scheduler{scheduler_}, swapchain{swapchain_},
|
||||||
surface{surface_}, blit_supported{CanBlitToSwapchain(device.GetPhysical(),
|
surface{surface_}, blit_supported{CanBlitToSwapchain(device.GetPhysical(),
|
||||||
swapchain.GetImageViewFormat())},
|
swapchain.GetImageViewFormat())},
|
||||||
use_present_thread{Settings::values.async_presentation.GetValue()},
|
use_present_thread{Settings::values.async_presentation.GetValue()} {
|
||||||
image_count{swapchain.GetImageCount()} {
|
SetImageCount();
|
||||||
|
|
||||||
auto& dld = device.GetLogical();
|
auto& dld = device.GetLogical();
|
||||||
cmdpool = dld.CreateCommandPool({
|
cmdpool = dld.CreateCommandPool({
|
||||||
|
@ -289,7 +289,14 @@ void PresentManager::PresentThread(std::stop_token token) {
|
||||||
|
|
||||||
void PresentManager::RecreateSwapchain(Frame* frame) {
|
void PresentManager::RecreateSwapchain(Frame* frame) {
|
||||||
swapchain.Create(*surface, frame->width, frame->height);
|
swapchain.Create(*surface, frame->width, frame->height);
|
||||||
image_count = swapchain.GetImageCount();
|
SetImageCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PresentManager::SetImageCount() {
|
||||||
|
// We cannot have more than 5 images in flight at any given time.
|
||||||
|
// FRAMES_IN_FLIGHT is 7, and the cache TICKS_TO_DESTROY is 6.
|
||||||
|
// Mali drivers will give us 6.
|
||||||
|
image_count = std::min<size_t>(swapchain.GetImageCount(), 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PresentManager::CopyToSwapchain(Frame* frame) {
|
void PresentManager::CopyToSwapchain(Frame* frame) {
|
||||||
|
|
|
@ -62,6 +62,8 @@ private:
|
||||||
|
|
||||||
void RecreateSwapchain(Frame* frame);
|
void RecreateSwapchain(Frame* frame);
|
||||||
|
|
||||||
|
void SetImageCount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const vk::Instance& instance;
|
const vk::Instance& instance;
|
||||||
Core::Frontend::EmuWindow& render_window;
|
Core::Frontend::EmuWindow& render_window;
|
||||||
|
|
Reference in New Issue