Browse Source

oops, fixup

lizzie/vk-ext-fault-info
lizzie 1 month ago
committed by crueter
parent
commit
c90324f122
  1. 34
      src/video_core/vulkan_common/vulkan_device.cpp
  2. 15
      src/video_core/vulkan_common/vulkan_device.h

34
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) \ #define EXTENSION(prefix, macro_name, var_name) \
if (supported_extensions.contains(VK_##prefix##_##macro_name##_EXTENSION_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) \ #define FEATURE_EXTENSION(prefix, struct_name, macro_name, var_name) \
if (supported_extensions.contains(VK_##prefix##_##macro_name##_EXTENSION_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) { if (instance_version < VK_API_VERSION_1_2) {
@ -982,19 +982,24 @@ bool Device::GetSuitability(bool requires_swapchain) {
extensions.robustness_2 = false; 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 FEATURE_EXTENSION
#undef EXTENSION #undef EXTENSION
// Some extensions are mandatory. Check those. // Some extensions are mandatory. Check those.
#define CHECK_EXTENSION(extension_name) \ #define CHECK_EXTENSION(extension_name) \
if (!loaded_extensions.contains(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) \ #define LOG_EXTENSION(extension_name) \
if (!loaded_extensions.contains(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); 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) \ #define EXT_FEATURE(prefix, struct_name, macro_name, var_name) \
if (extensions.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); FOR_EACH_VK_FEATURE_1_1(FEATURE);
@ -1049,7 +1054,10 @@ bool Device::GetSuitability(bool requires_swapchain) {
} else { } else {
FOR_EACH_VK_FEATURE_1_3(EXT_FEATURE); 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 EXT_FEATURE
#undef FEATURE #undef FEATURE
@ -1129,10 +1137,6 @@ bool Device::GetSuitability(bool requires_swapchain) {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR; VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR;
SetNext(next, properties.maintenance5); 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. // Perform the property fetch.
physical.GetProperties2(properties2); physical.GetProperties2(properties2);

15
src/video_core/vulkan_common/vulkan_device.h

@ -17,6 +17,7 @@
#include "common/logging.h" #include "common/logging.h"
#include "common/settings.h" #include "common/settings.h"
#include "video_core/vulkan_common/vulkan_wrapper.h" #include "video_core/vulkan_common/vulkan_wrapper.h"
#include "vulkan/vulkan_core.h"
VK_DEFINE_HANDLE(VmaAllocator) VK_DEFINE_HANDLE(VmaAllocator)
@ -84,7 +85,6 @@ VK_DEFINE_HANDLE(VmaAllocator)
EXTENSION(EXT, SHADER_VIEWPORT_INDEX_LAYER, shader_viewport_index_layer) \ EXTENSION(EXT, SHADER_VIEWPORT_INDEX_LAYER, shader_viewport_index_layer) \
EXTENSION(EXT, TOOLING_INFO, tooling_info) \ EXTENSION(EXT, TOOLING_INFO, tooling_info) \
EXTENSION(EXT, VERTEX_ATTRIBUTE_DIVISOR, vertex_attribute_divisor) \ EXTENSION(EXT, VERTEX_ATTRIBUTE_DIVISOR, vertex_attribute_divisor) \
EXTENSION(EXT, DEVICE_FAULT, device_fault) \
EXTENSION(KHR, DRAW_INDIRECT_COUNT, draw_indirect_count) \ EXTENSION(KHR, DRAW_INDIRECT_COUNT, draw_indirect_count) \
EXTENSION(KHR, DRIVER_PROPERTIES, driver_properties) \ EXTENSION(KHR, DRIVER_PROPERTIES, driver_properties) \
EXTENSION(KHR, PUSH_DESCRIPTOR, push_descriptor) \ EXTENSION(KHR, PUSH_DESCRIPTOR, push_descriptor) \
@ -976,33 +976,28 @@ private:
struct Extensions { struct Extensions {
#define EXTENSION(prefix, macro_name, var_name) bool var_name{}; #define EXTENSION(prefix, macro_name, var_name) bool var_name{};
#define FEATURE(prefix, struct_name, 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_1(FEATURE);
FOR_EACH_VK_FEATURE_1_2(FEATURE); FOR_EACH_VK_FEATURE_1_2(FEATURE);
FOR_EACH_VK_FEATURE_1_3(FEATURE); FOR_EACH_VK_FEATURE_1_3(FEATURE);
FOR_EACH_VK_FEATURE_1_4(FEATURE); FOR_EACH_VK_FEATURE_1_4(FEATURE);
FOR_EACH_VK_FEATURE_EXT(FEATURE); FOR_EACH_VK_FEATURE_EXT(FEATURE);
FOR_EACH_VK_EXTENSION(EXTENSION); FOR_EACH_VK_EXTENSION(EXTENSION);
#undef EXTENSION #undef EXTENSION
#undef FEATURE #undef FEATURE
bool device_fault;
}; };
struct Features { 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_1(FEATURE_CORE);
FOR_EACH_VK_FEATURE_1_2(FEATURE_CORE); FOR_EACH_VK_FEATURE_1_2(FEATURE_CORE);
FOR_EACH_VK_FEATURE_1_3(FEATURE_CORE); FOR_EACH_VK_FEATURE_1_3(FEATURE_CORE);
FOR_EACH_VK_FEATURE_1_4(FEATURE_CORE); FOR_EACH_VK_FEATURE_1_4(FEATURE_CORE);
FOR_EACH_VK_FEATURE_EXT(FEATURE_EXT); FOR_EACH_VK_FEATURE_EXT(FEATURE_EXT);
#undef FEATURE_CORE #undef FEATURE_CORE
#undef FEATURE_EXT #undef FEATURE_EXT
VkPhysicalDeviceFaultFeaturesEXT device_fault{};
VkPhysicalDeviceFeatures features{}; VkPhysicalDeviceFeatures features{};
}; };

Loading…
Cancel
Save