From 148d19422d744cb6ada7036a41c6af1c21c4c46e Mon Sep 17 00:00:00 2001 From: FlightlessMango Date: Fri, 7 Feb 2020 13:12:58 +0100 Subject: [PATCH] Added vsync option --- src/overlay.cpp | 12 +++++++++++- src/overlay_params.c | 8 ++++++++ src/overlay_params.h | 2 ++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/overlay.cpp b/src/overlay.cpp index 8b454fbd..cea5a6bd 100644 --- a/src/overlay.cpp +++ b/src/overlay.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -2123,11 +2124,19 @@ static VkResult overlay_CreateSwapchainKHR( VkSwapchainKHR* pSwapchain) { struct device_data *device_data = FIND(struct device_data, device); + std::array modes = {VK_PRESENT_MODE_FIFO_RELAXED_KHR, + VK_PRESENT_MODE_IMMEDIATE_KHR, + VK_PRESENT_MODE_MAILBOX_KHR, + VK_PRESENT_MODE_FIFO_KHR}; + + if (device_data->instance->params.vsync < 4) + const_cast (pCreateInfo)->presentMode = modes[device_data->instance->params.vsync]; + VkResult result = device_data->vtable.CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain); if (result != VK_SUCCESS) return result; - struct swapchain_data *swapchain_data = new_swapchain_data(*pSwapchain, device_data); setup_swapchain_data(swapchain_data, pCreateInfo); + return result; } @@ -2552,6 +2561,7 @@ static VkResult overlay_CreateInstance( { VkLayerInstanceCreateInfo *chain_info = get_instance_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); + const char* pEngineName = pCreateInfo->pApplicationInfo->pEngineName; if (pEngineName) diff --git a/src/overlay_params.c b/src/overlay_params.c index 5155075a..22cc25f6 100644 --- a/src/overlay_params.c +++ b/src/overlay_params.c @@ -85,6 +85,12 @@ parse_fps_limit(const char *str) return strtol(str, NULL, 0); } +static uint32_t +parse_vsync(const char *str) +{ + return strtol(str, NULL, 0); +} + static bool parse_no_display(const char *str) { @@ -99,6 +105,7 @@ parse_unsigned(const char *str) #define parse_width(s) parse_unsigned(s) #define parse_height(s) parse_unsigned(s) +#define parse_vsync(s) parse_unsigned(s) static bool parse_help(const char *str) @@ -190,6 +197,7 @@ parse_overlay_env(struct overlay_params *params, params->height = 140; params->control = -1; params->fps_limit = 0; + params->vsync = -1; if (!env) return; diff --git a/src/overlay_params.h b/src/overlay_params.h index 0e15f7ad..8a6634e9 100644 --- a/src/overlay_params.h +++ b/src/overlay_params.h @@ -53,6 +53,7 @@ extern "C" { OVERLAY_PARAM_CUSTOM(no_display) \ OVERLAY_PARAM_CUSTOM(control) \ OVERLAY_PARAM_CUSTOM(fps_limit) \ + OVERLAY_PARAM_CUSTOM(vsync) \ OVERLAY_PARAM_CUSTOM(font_size) \ OVERLAY_PARAM_CUSTOM(help) @@ -83,6 +84,7 @@ struct overlay_params { bool no_display; unsigned width; unsigned height; + unsigned vsync; float font_size; };