From 78d7004755d12e381d7acc94810c6a9f73abedf8 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 21 Sep 2023 10:16:03 +0200 Subject: [PATCH] vulkan: Do not set the portability bit with old SDKs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Because it's a validation error with old ones, but required in some cases from 1.3.216 on (MoltenVK). Ridiculous. Amends 7fbc741d107ab679f6abd680ec909ce9b2bf333a and b018bc6e2d27b95024ee8f1b8c719199df47c264. Fixes: QTBUG-117412 Pick-to: 6.5 Change-Id: I9b4cacbe611d4e557ee1c156527142eb919d6b77 Reviewed-by: Christian Strømme (cherry picked from commit 8a5a5f6c9773dc41b4c8685bc1c6bd34ce49a320) Reviewed-by: Qt Cherry-pick Bot --- src/gui/vulkan/qbasicvulkanplatforminstance.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gui/vulkan/qbasicvulkanplatforminstance.cpp b/src/gui/vulkan/qbasicvulkanplatforminstance.cpp index 31e27cdac5e..bbe9f9e1cbe 100644 --- a/src/gui/vulkan/qbasicvulkanplatforminstance.cpp +++ b/src/gui/vulkan/qbasicvulkanplatforminstance.cpp @@ -259,8 +259,13 @@ void QBasicPlatformVulkanInstance::initInstance(QVulkanInstance *instance, const VkInstanceCreateInfo instInfo = {}; instInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; instInfo.pApplicationInfo = &appInfo; - if (!flags.testFlag(QVulkanInstance::NoPortabilityDrivers)) - instInfo.flags |= 0x00000001; // VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR + if (!flags.testFlag(QVulkanInstance::NoPortabilityDrivers)) { + // With old Vulkan SDKs setting a non-zero flags gives a validation error. + // Whereas from 1.3.216 on the portability bit is required for MoltenVK to function. + // Hence the version check. + if (m_supportedApiVersion >= QVersionNumber(1, 3, 216)) + instInfo.flags |= 0x00000001; // VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR + } QList layerNameVec; for (const QByteArray &ba : std::as_const(m_enabledLayers))