diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 273a554524..0f74f2637e 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -952,13 +952,13 @@ bool Device::GetSuitability(bool requires_swapchain) { #define EXTENSION(prefix, macro_name, var_name) \ if (supported_extensions.contains(VK_##prefix##_##macro_name##_EXTENSION_NAME)) { \ - loaded_extensions.insert(VK_##prefix##_##macro_name##_EXTENSION_NAME); \ - extensions.var_name = true; \ + loaded_extensions.insert(VK_##prefix##_##macro_name##_EXTENSION_NAME); \ + extensions.var_name = true; \ } #define FEATURE_EXTENSION(prefix, struct_name, macro_name, var_name) \ if (supported_extensions.contains(VK_##prefix##_##macro_name##_EXTENSION_NAME)) { \ - loaded_extensions.insert(VK_##prefix##_##macro_name##_EXTENSION_NAME); \ - extensions.var_name = true; \ + loaded_extensions.insert(VK_##prefix##_##macro_name##_EXTENSION_NAME); \ + extensions.var_name = true; \ } if (instance_version < VK_API_VERSION_1_2) { @@ -982,19 +982,24 @@ bool Device::GetSuitability(bool requires_swapchain) { extensions.robustness_2 = false; } + // different namings + if (supported_extensions.contains(VK_EXT_DEVICE_FAULT_EXTENSION_NAME)) { + loaded_extensions.insert(VK_EXT_DEVICE_FAULT_EXTENSION_NAME); + extensions.device_fault = true; + } #undef FEATURE_EXTENSION #undef EXTENSION // Some extensions are mandatory. Check those. #define CHECK_EXTENSION(extension_name) \ if (!loaded_extensions.contains(extension_name)) { \ - LOG_ERROR(Render_Vulkan, "Missing required extension {}", extension_name); \ - suitable = false; \ + LOG_ERROR(Render_Vulkan, "Missing required extension {}", extension_name); \ + suitable = false; \ } #define LOG_EXTENSION(extension_name) \ if (!loaded_extensions.contains(extension_name)) { \ - LOG_INFO(Render_Vulkan, "Device doesn't support extension {}", extension_name); \ + LOG_INFO(Render_Vulkan, "Device doesn't support extension {}", extension_name); \ } FOR_EACH_VK_RECOMMENDED_EXTENSION(LOG_EXTENSION); @@ -1032,9 +1037,9 @@ bool Device::GetSuitability(bool requires_swapchain) { #define EXT_FEATURE(prefix, struct_name, macro_name, var_name) \ if (extensions.var_name) { \ - features.var_name.sType = \ - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_##macro_name##_FEATURES_##prefix; \ - SetNext(next, features.var_name); \ + features.var_name.sType = \ + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_##macro_name##_FEATURES_##prefix; \ + SetNext(next, features.var_name); \ } FOR_EACH_VK_FEATURE_1_1(FEATURE); @@ -1049,7 +1054,10 @@ bool Device::GetSuitability(bool requires_swapchain) { } else { FOR_EACH_VK_FEATURE_1_3(EXT_FEATURE); } - + if (extensions.device_fault) { + features.device_fault.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT; + SetNext(next, features.device_fault); + } #undef EXT_FEATURE #undef FEATURE @@ -1129,10 +1137,6 @@ bool Device::GetSuitability(bool requires_swapchain) { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR; SetNext(next, properties.maintenance5); } - if (extensions.device_fault) { - properties.device_fault.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT; - SetNext(next, properties.device_fault); - } // Perform the property fetch. physical.GetProperties2(properties2); diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index f8050168c1..6b64d595b4 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -17,6 +17,7 @@ #include "common/logging.h" #include "common/settings.h" #include "video_core/vulkan_common/vulkan_wrapper.h" +#include "vulkan/vulkan_core.h" VK_DEFINE_HANDLE(VmaAllocator) @@ -84,7 +85,6 @@ VK_DEFINE_HANDLE(VmaAllocator) EXTENSION(EXT, SHADER_VIEWPORT_INDEX_LAYER, shader_viewport_index_layer) \ EXTENSION(EXT, TOOLING_INFO, tooling_info) \ EXTENSION(EXT, VERTEX_ATTRIBUTE_DIVISOR, vertex_attribute_divisor) \ - EXTENSION(EXT, DEVICE_FAULT, device_fault) \ EXTENSION(KHR, DRAW_INDIRECT_COUNT, draw_indirect_count) \ EXTENSION(KHR, DRIVER_PROPERTIES, driver_properties) \ EXTENSION(KHR, PUSH_DESCRIPTOR, push_descriptor) \ @@ -976,33 +976,28 @@ private: struct Extensions { #define EXTENSION(prefix, macro_name, var_name) bool var_name{}; #define FEATURE(prefix, struct_name, macro_name, var_name) bool var_name{}; - FOR_EACH_VK_FEATURE_1_1(FEATURE); FOR_EACH_VK_FEATURE_1_2(FEATURE); FOR_EACH_VK_FEATURE_1_3(FEATURE); FOR_EACH_VK_FEATURE_1_4(FEATURE); FOR_EACH_VK_FEATURE_EXT(FEATURE); FOR_EACH_VK_EXTENSION(EXTENSION); - #undef EXTENSION #undef FEATURE + bool device_fault; }; struct Features { -#define FEATURE_CORE(prefix, struct_name, macro_name, var_name) \ - VkPhysicalDevice##struct_name##Features var_name{}; -#define FEATURE_EXT(prefix, struct_name, macro_name, var_name) \ - VkPhysicalDevice##struct_name##Features##prefix var_name{}; - +#define FEATURE_CORE(prefix, struct_name, macro_name, var_name) VkPhysicalDevice##struct_name##Features var_name{}; +#define FEATURE_EXT(prefix, struct_name, macro_name, var_name) VkPhysicalDevice##struct_name##Features##prefix var_name{}; FOR_EACH_VK_FEATURE_1_1(FEATURE_CORE); FOR_EACH_VK_FEATURE_1_2(FEATURE_CORE); FOR_EACH_VK_FEATURE_1_3(FEATURE_CORE); FOR_EACH_VK_FEATURE_1_4(FEATURE_CORE); FOR_EACH_VK_FEATURE_EXT(FEATURE_EXT); - #undef FEATURE_CORE #undef FEATURE_EXT - + VkPhysicalDeviceFaultFeaturesEXT device_fault{}; VkPhysicalDeviceFeatures features{}; };