diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 1ea17f82d8..74ffa6e1dc 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -1103,6 +1103,20 @@ bool Device::GetSuitability(bool requires_swapchain) { // Unload extensions if feature support is insufficient. RemoveUnsuitableExtensions(); + // Query VK_EXT_custom_border_color properties if the extension is enabled. + if (extensions.custom_border_color) { + const auto fp = reinterpret_cast( + dld.vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceCustomBorderColorPropertiesEXT")); + if (fp != nullptr) { + custom_border_color_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT; + custom_border_color_properties.pNext = nullptr; + fp(physical, &custom_border_color_properties); + has_custom_border_color_properties = true; + } else { + has_custom_border_color_properties = false; + } + } + // Check limits. struct Limit { u32 minimum; diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index 84beeaec1b..03d6f9216f 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -595,6 +595,16 @@ public: return features.custom_border_color.customBorderColorWithoutFormat; } + /// Returns true if physical device custom border color properties were queried. + bool HasCustomBorderColorProperties() const { + return has_custom_border_color_properties; + } + + /// Returns the queried VkPhysicalDeviceCustomBorderColorPropertiesEXT. + const VkPhysicalDeviceCustomBorderColorPropertiesEXT& GetCustomBorderColorProperties() const { + return custom_border_color_properties; + } + /// Returns true if the device supports VK_EXT_extended_dynamic_state. bool IsExtExtendedDynamicStateSupported() const { return extensions.extended_dynamic_state; @@ -619,6 +629,10 @@ public: return extensions.filter_cubic; } + /// Custom border color properties retrieved from the physical device (if available). + VkPhysicalDeviceCustomBorderColorPropertiesEXT custom_border_color_properties{}; + bool has_custom_border_color_properties = false; + /// Returns true if the device supports VK_QCOM_filter_cubic_weights. bool IsQcomFilterCubicWeightsSupported() const { return extensions.filter_cubic_weights;