diff --git a/src/posix/cocoa/i_video.mm b/src/posix/cocoa/i_video.mm index fd516f6c388..3dd0d054739 100644 --- a/src/posix/cocoa/i_video.mm +++ b/src/posix/cocoa/i_video.mm @@ -92,7 +92,6 @@ - (void)enterFullscreenOnZoom @end -EXTERN_CVAR(Bool, vid_vsync) EXTERN_CVAR(Bool, vid_hidpi) EXTERN_CVAR(Int, vid_defwidth) EXTERN_CVAR(Int, vid_defheight) diff --git a/src/rendering/v_framebuffer.cpp b/src/rendering/v_framebuffer.cpp index df59a00949c..15ef76ddce9 100644 --- a/src/rendering/v_framebuffer.cpp +++ b/src/rendering/v_framebuffer.cpp @@ -63,7 +63,6 @@ CVAR(Int, vid_showpalette, 0, 0) EXTERN_CVAR(Bool, ticker) EXTERN_CVAR(Float, vid_brightness) EXTERN_CVAR(Float, vid_contrast) -EXTERN_CVAR(Bool, vid_vsync) EXTERN_CVAR(Int, vid_maxfps) EXTERN_CVAR(Bool, cl_capfps) EXTERN_CVAR(Int, screenblocks) diff --git a/src/rendering/vulkan/system/vk_framebuffer.cpp b/src/rendering/vulkan/system/vk_framebuffer.cpp index 3c9a9e335ef..80532538ca1 100644 --- a/src/rendering/vulkan/system/vk_framebuffer.cpp +++ b/src/rendering/vulkan/system/vk_framebuffer.cpp @@ -636,6 +636,7 @@ const char* VulkanFrameBuffer::DeviceName() const void VulkanFrameBuffer::SetVSync(bool vsync) { // This is handled in VulkanSwapChain::AcquireImage. + cur_vsync = vsync; } void VulkanFrameBuffer::CleanForRestart() diff --git a/src/rendering/vulkan/system/vk_framebuffer.h b/src/rendering/vulkan/system/vk_framebuffer.h index a2c8e0f5e61..64dfa3e7bd0 100644 --- a/src/rendering/vulkan/system/vk_framebuffer.h +++ b/src/rendering/vulkan/system/vk_framebuffer.h @@ -25,6 +25,7 @@ class VulkanFrameBuffer : public SystemBaseFrameBuffer VulkanDevice *device; std::unique_ptr swapChain; uint32_t presentImageIndex = 0xffffffff; + bool cur_vsync; VulkanCommandBuffer *GetTransferCommands(); VulkanCommandBuffer *GetDrawCommands(); diff --git a/src/rendering/vulkan/system/vk_swapchain.cpp b/src/rendering/vulkan/system/vk_swapchain.cpp index 5f331bedc6f..578a57852b4 100644 --- a/src/rendering/vulkan/system/vk_swapchain.cpp +++ b/src/rendering/vulkan/system/vk_swapchain.cpp @@ -3,8 +3,9 @@ #include "vk_objects.h" #include "c_cvars.h" #include "version.h" +#include "v_video.h" +#include "vk_framebuffer.h" -EXTERN_CVAR(Bool, vid_vsync); CVAR(Bool, vk_hdr, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG); @@ -21,12 +22,13 @@ VulkanSwapChain::~VulkanSwapChain() uint32_t VulkanSwapChain::AcquireImage(int width, int height, VulkanSemaphore *semaphore, VulkanFence *fence) { - if (lastSwapWidth != width || lastSwapHeight != height || lastVsync != vid_vsync || lastHdr != vk_hdr || !swapChain) + auto vsync = static_cast(screen)->cur_vsync; + if (lastSwapWidth != width || lastSwapHeight != height || lastVsync != vsync || lastHdr != vk_hdr || !swapChain) { Recreate(); lastSwapWidth = width; lastSwapHeight = height; - lastVsync = vid_vsync; + lastVsync = vsync; lastHdr = vk_hdr; } @@ -271,7 +273,8 @@ void VulkanSwapChain::SelectPresentMode() VulkanError("No surface present modes supported"); swapChainPresentMode = VK_PRESENT_MODE_FIFO_KHR; - if (vid_vsync) + auto vsync = static_cast(screen)->cur_vsync; + if (vsync) { bool supportsFifoRelaxed = std::find(presentModes.begin(), presentModes.end(), VK_PRESENT_MODE_FIFO_RELAXED_KHR) != presentModes.end(); if (supportsFifoRelaxed)