Added vsync option

pull/28/head
FlightlessMango 4 years ago
parent cd131e0c39
commit 148d19422d

@ -26,6 +26,7 @@
#include <assert.h> #include <assert.h>
#include <thread> #include <thread>
#include <chrono> #include <chrono>
#include <unordered_map>
#include <vulkan/vulkan.h> #include <vulkan/vulkan.h>
#include <vulkan/vk_layer.h> #include <vulkan/vk_layer.h>
@ -2123,11 +2124,19 @@ static VkResult overlay_CreateSwapchainKHR(
VkSwapchainKHR* pSwapchain) VkSwapchainKHR* pSwapchain)
{ {
struct device_data *device_data = FIND(struct device_data, device); struct device_data *device_data = FIND(struct device_data, device);
std::array<VkPresentModeKHR, 4> 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<VkSwapchainCreateInfoKHR*> (pCreateInfo)->presentMode = modes[device_data->instance->params.vsync];
VkResult result = device_data->vtable.CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain); VkResult result = device_data->vtable.CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
if (result != VK_SUCCESS) return result; if (result != VK_SUCCESS) return result;
struct swapchain_data *swapchain_data = new_swapchain_data(*pSwapchain, device_data); struct swapchain_data *swapchain_data = new_swapchain_data(*pSwapchain, device_data);
setup_swapchain_data(swapchain_data, pCreateInfo); setup_swapchain_data(swapchain_data, pCreateInfo);
return result; return result;
} }
@ -2552,6 +2561,7 @@ static VkResult overlay_CreateInstance(
{ {
VkLayerInstanceCreateInfo *chain_info = VkLayerInstanceCreateInfo *chain_info =
get_instance_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); get_instance_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
const char* pEngineName = pCreateInfo->pApplicationInfo->pEngineName; const char* pEngineName = pCreateInfo->pApplicationInfo->pEngineName;
if (pEngineName) if (pEngineName)

@ -85,6 +85,12 @@ parse_fps_limit(const char *str)
return strtol(str, NULL, 0); return strtol(str, NULL, 0);
} }
static uint32_t
parse_vsync(const char *str)
{
return strtol(str, NULL, 0);
}
static bool static bool
parse_no_display(const char *str) parse_no_display(const char *str)
{ {
@ -99,6 +105,7 @@ parse_unsigned(const char *str)
#define parse_width(s) parse_unsigned(s) #define parse_width(s) parse_unsigned(s)
#define parse_height(s) parse_unsigned(s) #define parse_height(s) parse_unsigned(s)
#define parse_vsync(s) parse_unsigned(s)
static bool static bool
parse_help(const char *str) parse_help(const char *str)
@ -190,6 +197,7 @@ parse_overlay_env(struct overlay_params *params,
params->height = 140; params->height = 140;
params->control = -1; params->control = -1;
params->fps_limit = 0; params->fps_limit = 0;
params->vsync = -1;
if (!env) if (!env)
return; return;

@ -53,6 +53,7 @@ extern "C" {
OVERLAY_PARAM_CUSTOM(no_display) \ OVERLAY_PARAM_CUSTOM(no_display) \
OVERLAY_PARAM_CUSTOM(control) \ OVERLAY_PARAM_CUSTOM(control) \
OVERLAY_PARAM_CUSTOM(fps_limit) \ OVERLAY_PARAM_CUSTOM(fps_limit) \
OVERLAY_PARAM_CUSTOM(vsync) \
OVERLAY_PARAM_CUSTOM(font_size) \ OVERLAY_PARAM_CUSTOM(font_size) \
OVERLAY_PARAM_CUSTOM(help) OVERLAY_PARAM_CUSTOM(help)
@ -83,6 +84,7 @@ struct overlay_params {
bool no_display; bool no_display;
unsigned width; unsigned width;
unsigned height; unsigned height;
unsigned vsync;
float font_size; float font_size;
}; };

Loading…
Cancel
Save