vulkan: Do not set the portability bit with old SDKs

Because it's a validation error with old ones, but required
in some cases from 1.3.216 on (MoltenVK). Ridiculous.

Amends 7fbc741d10 and
b018bc6e2d.

Fixes: QTBUG-117412
Pick-to: 6.6 6.5
Change-Id: I9b4cacbe611d4e557ee1c156527142eb919d6b77
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
bb10
Laszlo Agocs 2023-09-21 10:16:03 +02:00 committed by Christian Strømme
parent 6ca2008d6e
commit 8a5a5f6c97
1 changed files with 7 additions and 2 deletions

View File

@ -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<const char *> layerNameVec;
for (const QByteArray &ba : std::as_const(m_enabledLayers))