From 4f4dbbac78f362107823dddaa8e40dc75bbcd93a Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 11 Aug 2022 10:00:17 +0200 Subject: [PATCH] vkkhrdisplay: Silence validation complaints about presentation support Zero reason to do this query, but the validation layer complains otherwise. Fixes: QTBUG-105527 Change-Id: I7a72e4d6d89f41279db94efe663a696302f05ded Reviewed-by: Andy Nichols (cherry picked from commit dea9ed7e4c688ce073deb4b15cc64587598a32df) Reviewed-by: Qt Cherry-pick Bot --- .../vkkhrdisplay/qvkkhrdisplayvulkaninstance.cpp | 15 +++++++++++---- .../vkkhrdisplay/qvkkhrdisplayvulkaninstance.h | 1 + 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/plugins/platforms/vkkhrdisplay/qvkkhrdisplayvulkaninstance.cpp b/src/plugins/platforms/vkkhrdisplay/qvkkhrdisplayvulkaninstance.cpp index 96c7fbfbdd6..4d58e4154ef 100644 --- a/src/plugins/platforms/vkkhrdisplay/qvkkhrdisplayvulkaninstance.cpp +++ b/src/plugins/platforms/vkkhrdisplay/qvkkhrdisplayvulkaninstance.cpp @@ -46,6 +46,9 @@ void QVkKhrDisplayVulkanInstance::createOrAdoptInstance() m_enumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices) m_vkGetInstanceProcAddr(m_vkInst, "vkEnumeratePhysicalDevices"); + m_getPhysicalDeviceSurfaceSupportKHR = reinterpret_cast( + m_vkGetInstanceProcAddr(m_vkInst, "vkGetPhysicalDeviceSurfaceSupportKHR")); + // Use for first physical device, unless overridden by QT_VK_PHYSICAL_DEVICE_INDEX. // This behavior matches what the Vulkan backend of QRhi would do. @@ -81,10 +84,14 @@ bool QVkKhrDisplayVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevic uint32_t queueFamilyIndex, QWindow *window) { - Q_UNUSED(physicalDevice); - Q_UNUSED(queueFamilyIndex); - Q_UNUSED(window); - return true; + if (!m_getPhysicalDeviceSurfaceSupportKHR) + return true; + + VkSurfaceKHR surface = QVulkanInstance::surfaceForWindow(window); + VkBool32 supported = false; + m_getPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, &supported); + + return supported; } bool QVkKhrDisplayVulkanInstance::chooseDisplay() diff --git a/src/plugins/platforms/vkkhrdisplay/qvkkhrdisplayvulkaninstance.h b/src/plugins/platforms/vkkhrdisplay/qvkkhrdisplayvulkaninstance.h index a47878e3445..bf99dc037f0 100644 --- a/src/plugins/platforms/vkkhrdisplay/qvkkhrdisplayvulkaninstance.h +++ b/src/plugins/platforms/vkkhrdisplay/qvkkhrdisplayvulkaninstance.h @@ -45,6 +45,7 @@ private: QVulkanInstance *m_instance; VkPhysicalDevice m_physDev = VK_NULL_HANDLE; PFN_vkEnumeratePhysicalDevices m_enumeratePhysicalDevices = nullptr; + PFN_vkGetPhysicalDeviceSurfaceSupportKHR m_getPhysicalDeviceSurfaceSupportKHR = nullptr; #if VK_KHR_display PFN_vkGetPhysicalDeviceDisplayPropertiesKHR m_getPhysicalDeviceDisplayPropertiesKHR = nullptr; PFN_vkGetDisplayModePropertiesKHR m_getDisplayModePropertiesKHR = nullptr;