From 3e1d13175422aab6f3bd2b1a05b7f9d646d78be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sun, 23 Jun 2024 15:42:35 +0200 Subject: [PATCH] Vulkan: Fall back to extension if core functions won't load. --- Common/GPU/Vulkan/VulkanContext.cpp | 2 +- Common/GPU/Vulkan/VulkanLoader.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Common/GPU/Vulkan/VulkanContext.cpp b/Common/GPU/Vulkan/VulkanContext.cpp index a482d52b0f..8421f9410b 100644 --- a/Common/GPU/Vulkan/VulkanContext.cpp +++ b/Common/GPU/Vulkan/VulkanContext.cpp @@ -616,7 +616,7 @@ void VulkanContext::ChooseDevice(int physical_device) { } // Optional features - if (extensionsLookup_.KHR_get_physical_device_properties2) { + if (extensionsLookup_.KHR_get_physical_device_properties2 && vkGetPhysicalDeviceFeatures2) { VkPhysicalDeviceFeatures2 features2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR}; // Add to chain even if not supported, GetPhysicalDeviceFeatures is supposed to ignore unknown structs. VkPhysicalDeviceMultiviewFeatures multiViewFeatures{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES }; diff --git a/Common/GPU/Vulkan/VulkanLoader.cpp b/Common/GPU/Vulkan/VulkanLoader.cpp index b16e6357f2..bede4348c8 100644 --- a/Common/GPU/Vulkan/VulkanLoader.cpp +++ b/Common/GPU/Vulkan/VulkanLoader.cpp @@ -267,10 +267,12 @@ bool g_vulkanMayBeAvailable = false; #define LOAD_INSTANCE_FUNC(instance, x) x = (PFN_ ## x)vkGetInstanceProcAddr(instance, #x); if (!x) {INFO_LOG(G3D, "Missing (instance): %s", #x);} #define LOAD_INSTANCE_FUNC_CORE(instance, x, ext_x, min_core) \ x = (PFN_ ## x)vkGetInstanceProcAddr(instance, vulkanApiVersion >= min_core ? #x : #ext_x); \ + if (vulkanApiVersion >= min_core && !x) x = (PFN_ ## x)vkGetInstanceProcAddr(instance, #ext_x); \ if (!x) {INFO_LOG(G3D, "Missing (instance): %s (%s)", #x, #ext_x);} #define LOAD_DEVICE_FUNC(instance, x) x = (PFN_ ## x)vkGetDeviceProcAddr(instance, #x); if (!x) {INFO_LOG(G3D, "Missing (device): %s", #x);} #define LOAD_DEVICE_FUNC_CORE(instance, x, ext_x, min_core) \ x = (PFN_ ## x)vkGetDeviceProcAddr(instance, vulkanApiVersion >= min_core ? #x : #ext_x); \ + if (vulkanApiVersion >= min_core && !x) x = (PFN_ ## x)vkGetDeviceProcAddr(instance, #ext_x); \ if (!x) {INFO_LOG(G3D, "Missing (device): %s (%s)", #x, #ext_x);} #define LOAD_GLOBAL_FUNC(x) x = (PFN_ ## x)dlsym(vulkanLibrary, #x); if (!x) {INFO_LOG(G3D,"Missing (global): %s", #x);}