diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index ee68f08486..ac9698358c 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -974,13 +974,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) { @@ -1010,19 +1010,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); @@ -1064,9 +1069,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); @@ -1081,7 +1086,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 @@ -1177,11 +1185,6 @@ bool Device::GetSuitability(bool requires_swapchain) { SetNext(next, properties.custom_border_color); } - 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 7e3b648f6a..d07d04b85f 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -18,6 +18,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) @@ -93,9 +94,12 @@ 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) \ +<<<<<<< HEAD EXTENSION(KHR, CREATE_RENDERPASS_2, create_renderpass2) \ EXTENSION(KHR, DEPTH_STENCIL_RESOLVE, depth_stencil_resolve) \ EXTENSION(EXT, DEVICE_FAULT, device_fault) \ +======= +>>>>>>> 6e75e5837b (oops, fixup) EXTENSION(KHR, DRAW_INDIRECT_COUNT, draw_indirect_count) \ EXTENSION(KHR, DRIVER_PROPERTIES, driver_properties) \ EXTENSION(KHR, PUSH_DESCRIPTOR, push_descriptor) \ @@ -1143,33 +1147,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{}; };