Vulkan: Simplify set_vsync. Remove relaxed fifo.

It looks like relaxed fifo tears when refresh rate doesn't
match because it always misses a refresh interval.
This commit is contained in:
BearOso 2024-06-13 16:16:20 -05:00
parent 3980a9d6d4
commit 008cbcd1a1
3 changed files with 7 additions and 20 deletions

View File

@ -18,13 +18,9 @@ Swapchain::~Swapchain()
{
}
bool Swapchain::set_vsync(bool new_setting)
void Swapchain::set_vsync(bool new_setting)
{
if (new_setting == vsync)
return false;
vsync = new_setting;
return true;
}
void Swapchain::on_render_pass_end(std::function<void ()> function)
@ -104,14 +100,14 @@ static bool vector_find(std::vector<T> haystack, T&& needle)
vk::PresentModeKHR Swapchain::get_present_mode() {
auto present_mode = vk::PresentModeKHR::eFifo;
if (supports_relaxed)
present_mode = vk::PresentModeKHR::eFifoRelaxed;
if (!vsync) {
if (supports_mailbox)
present_mode = vk::PresentModeKHR::eMailbox;
if (supports_immediate)
present_mode = vk::PresentModeKHR::eImmediate;
}
return present_mode;
}

View File

@ -27,8 +27,7 @@ class Swapchain
void end_frame_without_swap();
bool swap();
void wait_on_frames();
// Returns true if vsync setting was changed, false if it was the same
bool set_vsync(bool on);
void set_vsync(bool on);
void on_render_pass_end(std::function<void()> function);
int get_num_frames() { return num_swapchain_images; }
vk::PresentModeKHR get_present_mode();

View File

@ -70,6 +70,8 @@ bool CVulkan::Initialize(HWND hWnd)
return false;
}
context->swapchain->set_vsync(GUI.Vsync);
if (!Settings.AutoDisplayMessages)
{
Settings.DisplayIndicators = true;
@ -91,11 +93,6 @@ bool CVulkan::Initialize(HWND hWnd)
}
}
if (context->swapchain->set_vsync(GUI.Vsync))
{
context->recreate_swapchain();
}
simple_output = std::make_unique<Vulkan::SimpleOutput>(context.get(), vk::Format::eR5G6B5UnormPack16);
return true;
@ -181,8 +178,6 @@ bool CVulkan::ChangeRenderSize(unsigned int newWidth, unsigned int newHeight)
if (!context)
return false;
bool vsync_changed = context->swapchain->set_vsync(GUI.Vsync);
if (newWidth != current_width || newHeight != current_height || vsync_changed)
{
context->recreate_swapchain(newWidth, newHeight);
@ -218,10 +213,7 @@ bool CVulkan::ApplyDisplayChanges(void)
current_shadername = shadername;
}
if (context->swapchain->set_vsync(GUI.Vsync))
{
context->recreate_swapchain();
}
context->swapchain->set_vsync(GUI.Vsync);
return true;
}