From b018bc6e2d27b95024ee8f1b8c719199df47c264 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Sun, 25 Sep 2022 11:15:46 +0200 Subject: [PATCH] vulkan: Add flag to opt out from enumerating Portability phys.devices Task-number: QTBUG-106912 Change-Id: I1cb4adae4bed62f31d781a89a03b70885411f91f Reviewed-by: Andy Nichols --- src/gui/vulkan/qbasicvulkanplatforminstance.cpp | 6 ++++-- src/gui/vulkan/qvulkaninstance.cpp | 9 ++++++--- src/gui/vulkan/qvulkaninstance.h | 3 ++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/gui/vulkan/qbasicvulkanplatforminstance.cpp b/src/gui/vulkan/qbasicvulkanplatforminstance.cpp index 8dfc45b9edf..3f8bc457bca 100644 --- a/src/gui/vulkan/qbasicvulkanplatforminstance.cpp +++ b/src/gui/vulkan/qbasicvulkanplatforminstance.cpp @@ -217,7 +217,8 @@ void QBasicPlatformVulkanInstance::initInstance(QVulkanInstance *instance, const } m_enabledExtensions.append("VK_KHR_surface"); - m_enabledExtensions.append("VK_KHR_portability_enumeration"); + if (!flags.testFlag(QVulkanInstance::NoPortabilityDrivers)) + m_enabledExtensions.append("VK_KHR_portability_enumeration"); if (!flags.testFlag(QVulkanInstance::NoDebugOutputRedirect)) m_enabledExtensions.append("VK_EXT_debug_utils"); @@ -258,7 +259,8 @@ void QBasicPlatformVulkanInstance::initInstance(QVulkanInstance *instance, const VkInstanceCreateInfo instInfo = {}; instInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; instInfo.pApplicationInfo = &appInfo; - instInfo.flags = 0x00000001; // VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR + if (!flags.testFlag(QVulkanInstance::NoPortabilityDrivers)) + instInfo.flags |= 0x00000001; // VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR QList layerNameVec; for (const QByteArray &ba : qAsConst(m_enabledLayers)) diff --git a/src/gui/vulkan/qvulkaninstance.cpp b/src/gui/vulkan/qvulkaninstance.cpp index bbd2b698366..7262c6e75fe 100644 --- a/src/gui/vulkan/qvulkaninstance.cpp +++ b/src/gui/vulkan/qvulkaninstance.cpp @@ -206,6 +206,7 @@ QT_BEGIN_NAMESPACE the behavior of create(). \value NoDebugOutputRedirect Disables Vulkan debug output (\c{VK_EXT_debug_utils}) redirection to qDebug. + \value NoPortabilityDrivers Disables enumerating physical devices marked as Vulkan Portability. */ bool QVulkanInstancePrivate::ensureVulkan() @@ -484,7 +485,8 @@ void QVulkanInstance::setLayers(const QByteArrayList &layers) VK_KHR_win32_surface) will always be added automatically, no need to include them in this list. - \note \c VK_KHR_portability_enumeration is added automatically. + \note \c VK_KHR_portability_enumeration is added automatically unless the + NoPortabilityDrivers flag is set. This value was introduced in Qt 6.5. \note This function can only be called before create() and has no effect if called afterwards. @@ -543,9 +545,10 @@ void QVulkanInstance::setApiVersion(const QVersionNumber &vulkanVersion) The Vulkan instance and library is available as long as this QVulkanInstance exists, or until destroy() is called. - The VkInstance is always created with the flag + By default the VkInstance is created with the flag \l{https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkInstanceCreateFlagBits.html}{VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR} - set. This means that Vulkan Portability physical devices get enumerated as well. + set. This means that Vulkan Portability physical devices get enumerated as + well. If this is not desired, set the NoPortabilityDrivers flag. */ bool QVulkanInstance::create() { diff --git a/src/gui/vulkan/qvulkaninstance.h b/src/gui/vulkan/qvulkaninstance.h index 6fd5116aab4..44f737dfbcd 100644 --- a/src/gui/vulkan/qvulkaninstance.h +++ b/src/gui/vulkan/qvulkaninstance.h @@ -135,7 +135,8 @@ public: ~QVulkanInstance(); enum Flag { - NoDebugOutputRedirect = 0x01 + NoDebugOutputRedirect = 0x01, + NoPortabilityDrivers = 0x02 }; Q_DECLARE_FLAGS(Flags, Flag)