Skip to content

Commit

Permalink
- don't let Vulkan access the vid_vsync variable directly.
Browse files Browse the repository at this point in the history
Since the FrameBuffers have a SetVsync method anything these last set must count, not the global variable directly.
  • Loading branch information
coelckers committed Oct 1, 2019
1 parent b9d4e77 commit 5179a69
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 6 deletions.
1 change: 0 additions & 1 deletion src/posix/cocoa/i_video.mm
Expand Up @@ -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)
Expand Down
1 change: 0 additions & 1 deletion src/rendering/v_framebuffer.cpp
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions src/rendering/vulkan/system/vk_framebuffer.cpp
Expand Up @@ -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()
Expand Down
1 change: 1 addition & 0 deletions src/rendering/vulkan/system/vk_framebuffer.h
Expand Up @@ -25,6 +25,7 @@ class VulkanFrameBuffer : public SystemBaseFrameBuffer
VulkanDevice *device;
std::unique_ptr<VulkanSwapChain> swapChain;
uint32_t presentImageIndex = 0xffffffff;
bool cur_vsync;

VulkanCommandBuffer *GetTransferCommands();
VulkanCommandBuffer *GetDrawCommands();
Expand Down
11 changes: 7 additions & 4 deletions src/rendering/vulkan/system/vk_swapchain.cpp
Expand Up @@ -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);

Expand All @@ -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<VulkanFrameBuffer*>(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;
}

Expand Down Expand Up @@ -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<VulkanFrameBuffer*>(screen)->cur_vsync;
if (vsync)
{
bool supportsFifoRelaxed = std::find(presentModes.begin(), presentModes.end(), VK_PRESENT_MODE_FIFO_RELAXED_KHR) != presentModes.end();
if (supportsFifoRelaxed)
Expand Down

0 comments on commit 5179a69

Please sign in to comment.