- In case mailbox present mode is not available try to use immediate mode (we do not want to restrict fps by the monitor update frequency). If both modes are not available then fallback to fifo mode.
- Fixed bug with incorrect vkDestroyInstance function pointer initialization. - Fixed bug that program called SwapBuffers in vulkan mode.
This commit is contained in:
parent
24fa5f20ab
commit
9df7be0314
|
|
@ -958,6 +958,7 @@ const void *RB_SwapBuffers( const void *data ) {
|
||||||
|
|
||||||
GLimp_LogComment( "***************** RB_SwapBuffers *****************\n\n\n" );
|
GLimp_LogComment( "***************** RB_SwapBuffers *****************\n\n\n" );
|
||||||
|
|
||||||
|
if (gl_enabled())
|
||||||
GLimp_EndFrame();
|
GLimp_EndFrame();
|
||||||
|
|
||||||
backEnd.projection2D = qfalse;
|
backEnd.projection2D = qfalse;
|
||||||
|
|
|
||||||
|
|
@ -106,18 +106,27 @@ static VkSwapchainKHR create_swapchain(VkPhysicalDevice physical_device, VkDevic
|
||||||
std::vector<VkPresentModeKHR> present_modes(present_mode_count);
|
std::vector<VkPresentModeKHR> present_modes(present_mode_count);
|
||||||
VK_CHECK(vkGetPhysicalDeviceSurfacePresentModesKHR(physical_device, surface, &present_mode_count, present_modes.data()));
|
VK_CHECK(vkGetPhysicalDeviceSurfacePresentModesKHR(physical_device, surface, &present_mode_count, present_modes.data()));
|
||||||
|
|
||||||
|
bool mailbox_supported = false;
|
||||||
|
bool immediate_supported = false;
|
||||||
|
for (auto pm : present_modes) {
|
||||||
|
if (pm == VK_PRESENT_MODE_MAILBOX_KHR)
|
||||||
|
mailbox_supported = true;
|
||||||
|
else if (pm == VK_PRESENT_MODE_IMMEDIATE_KHR)
|
||||||
|
immediate_supported = true;
|
||||||
|
}
|
||||||
|
|
||||||
VkPresentModeKHR present_mode;
|
VkPresentModeKHR present_mode;
|
||||||
uint32_t image_count;
|
uint32_t image_count;
|
||||||
|
if (mailbox_supported) {
|
||||||
auto it = std::find(present_modes.cbegin(), present_modes.cend(), VK_PRESENT_MODE_MAILBOX_KHR);
|
|
||||||
if (it != present_modes.cend()) {
|
|
||||||
present_mode = VK_PRESENT_MODE_MAILBOX_KHR;
|
present_mode = VK_PRESENT_MODE_MAILBOX_KHR;
|
||||||
image_count = std::max(3u, surface_caps.minImageCount);
|
image_count = std::max(3u, surface_caps.minImageCount);
|
||||||
if (surface_caps.maxImageCount > 0) {
|
if (surface_caps.maxImageCount > 0) {
|
||||||
image_count = std::min(image_count, surface_caps.maxImageCount);
|
image_count = std::min(image_count, surface_caps.maxImageCount);
|
||||||
}
|
}
|
||||||
}
|
} else if (immediate_supported) {
|
||||||
else {
|
present_mode = VK_PRESENT_MODE_IMMEDIATE_KHR;
|
||||||
|
image_count = surface_caps.minImageCount;
|
||||||
|
} else {
|
||||||
present_mode = VK_PRESENT_MODE_FIFO_KHR;
|
present_mode = VK_PRESENT_MODE_FIFO_KHR;
|
||||||
image_count = surface_caps.minImageCount;
|
image_count = surface_caps.minImageCount;
|
||||||
}
|
}
|
||||||
|
|
@ -533,6 +542,7 @@ static void init_vulkan_library() {
|
||||||
//
|
//
|
||||||
create_instance();
|
create_instance();
|
||||||
INIT_INSTANCE_FUNCTION(vkCreateDevice)
|
INIT_INSTANCE_FUNCTION(vkCreateDevice)
|
||||||
|
INIT_INSTANCE_FUNCTION(vkDestroyInstance)
|
||||||
INIT_INSTANCE_FUNCTION(vkEnumerateDeviceExtensionProperties)
|
INIT_INSTANCE_FUNCTION(vkEnumerateDeviceExtensionProperties)
|
||||||
INIT_INSTANCE_FUNCTION(vkEnumeratePhysicalDevices)
|
INIT_INSTANCE_FUNCTION(vkEnumeratePhysicalDevices)
|
||||||
INIT_INSTANCE_FUNCTION(vkGetDeviceProcAddr)
|
INIT_INSTANCE_FUNCTION(vkGetDeviceProcAddr)
|
||||||
|
|
@ -597,7 +607,6 @@ static void init_vulkan_library() {
|
||||||
INIT_DEVICE_FUNCTION(vkDestroyFramebuffer)
|
INIT_DEVICE_FUNCTION(vkDestroyFramebuffer)
|
||||||
INIT_DEVICE_FUNCTION(vkDestroyImage)
|
INIT_DEVICE_FUNCTION(vkDestroyImage)
|
||||||
INIT_DEVICE_FUNCTION(vkDestroyImageView)
|
INIT_DEVICE_FUNCTION(vkDestroyImageView)
|
||||||
INIT_DEVICE_FUNCTION(vkDestroyInstance)
|
|
||||||
INIT_DEVICE_FUNCTION(vkDestroyPipeline)
|
INIT_DEVICE_FUNCTION(vkDestroyPipeline)
|
||||||
INIT_DEVICE_FUNCTION(vkDestroyPipelineLayout)
|
INIT_DEVICE_FUNCTION(vkDestroyPipelineLayout)
|
||||||
INIT_DEVICE_FUNCTION(vkDestroyRenderPass)
|
INIT_DEVICE_FUNCTION(vkDestroyRenderPass)
|
||||||
|
|
@ -635,6 +644,7 @@ static void deinit_vulkan_library() {
|
||||||
vkEnumerateInstanceExtensionProperties = nullptr;
|
vkEnumerateInstanceExtensionProperties = nullptr;
|
||||||
|
|
||||||
vkCreateDevice = nullptr;
|
vkCreateDevice = nullptr;
|
||||||
|
vkDestroyInstance = nullptr;
|
||||||
vkEnumerateDeviceExtensionProperties = nullptr;
|
vkEnumerateDeviceExtensionProperties = nullptr;
|
||||||
vkEnumeratePhysicalDevices = nullptr;
|
vkEnumeratePhysicalDevices = nullptr;
|
||||||
vkGetDeviceProcAddr = nullptr;
|
vkGetDeviceProcAddr = nullptr;
|
||||||
|
|
@ -695,7 +705,6 @@ static void deinit_vulkan_library() {
|
||||||
vkDestroyFramebuffer = nullptr;
|
vkDestroyFramebuffer = nullptr;
|
||||||
vkDestroyImage = nullptr;
|
vkDestroyImage = nullptr;
|
||||||
vkDestroyImageView = nullptr;
|
vkDestroyImageView = nullptr;
|
||||||
vkDestroyInstance = nullptr;
|
|
||||||
vkDestroyPipeline = nullptr;
|
vkDestroyPipeline = nullptr;
|
||||||
vkDestroyPipelineLayout = nullptr;
|
vkDestroyPipelineLayout = nullptr;
|
||||||
vkDestroyRenderPass = nullptr;
|
vkDestroyRenderPass = nullptr;
|
||||||
|
|
@ -2325,6 +2334,7 @@ PFN_vkCreateInstance vkCreateInstance;
|
||||||
PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
|
PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
|
||||||
|
|
||||||
PFN_vkCreateDevice vkCreateDevice;
|
PFN_vkCreateDevice vkCreateDevice;
|
||||||
|
PFN_vkDestroyInstance vkDestroyInstance;
|
||||||
PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;
|
PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;
|
||||||
PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
|
PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
|
||||||
PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
|
PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
|
||||||
|
|
@ -2385,7 +2395,6 @@ PFN_vkDestroyFence vkDestroyFence;
|
||||||
PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
|
PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
|
||||||
PFN_vkDestroyImage vkDestroyImage;
|
PFN_vkDestroyImage vkDestroyImage;
|
||||||
PFN_vkDestroyImageView vkDestroyImageView;
|
PFN_vkDestroyImageView vkDestroyImageView;
|
||||||
PFN_vkDestroyInstance vkDestroyInstance;
|
|
||||||
PFN_vkDestroyPipeline vkDestroyPipeline;
|
PFN_vkDestroyPipeline vkDestroyPipeline;
|
||||||
PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
|
PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
|
||||||
PFN_vkDestroyRenderPass vkDestroyRenderPass;
|
PFN_vkDestroyRenderPass vkDestroyRenderPass;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user