Relax tst_qvulkan::vulkanVersionRequest to make it compatible with 1.1

The Vulkan spec changed the behavior for VkApplicationInfo::apiVersion
in 1.1, conveniently breaking compatibility with all existing 1.0 logic.

We can no longer assume that the 1.0 behavior, which was failing instance
creation with VK_ERROR_INCOMPATIBLE_DRIVER for an unsupported version,
is always in place. So do not rely on this in the test, and add a
reminder in QVulkanInstance docs as well.

Fixes: QTBUG-85040
Change-Id: I8f5c7a7830877b72d106c444aebfaea191083ee0
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
This commit is contained in:
Laszlo Agocs 2020-06-15 12:17:52 +02:00
parent 6a8eb26bba
commit ed231455cc
2 changed files with 16 additions and 2 deletions

View File

@ -531,6 +531,13 @@ void QVulkanInstance::setExtensions(const QByteArrayList &extensions)
\note This function can only be called before create() and has no effect if
called afterwards.
\note Be aware that Vulkan 1.1 changes the behavior with regards to the
Vulkan API version field. In Vulkan 1.0 specifying an unsupported \a
vulkanVersion led to failing create() with \c VK_ERROR_INCOMPATIBLE_DRIVER,
as was mandated by the specification. Starting with Vulkan 1.1, the
specification disallows this, the driver must accept any version without
failing the instance creation.
*/
void QVulkanInstance::setApiVersion(const QVersionNumber &vulkanVersion)
{

View File

@ -153,8 +153,15 @@ void tst_QVulkan::vulkanVersionRequest()
inst.destroy();
inst.setApiVersion(QVersionNumber(10, 0, 0));
QVERIFY(!inst.create());
QCOMPARE(inst.errorCode(), VK_ERROR_INCOMPATIBLE_DRIVER);
bool result = inst.create();
// Starting with Vulkan 1.1 the spec does not allow the implementation to
// fail the instance creation. So check for the 1.0 behavior only when
// create() failed, skip this verification with 1.1+ (where create() will
// succeed for any bogus api version).
if (!result)
QCOMPARE(inst.errorCode(), VK_ERROR_INCOMPATIBLE_DRIVER);
}
static void waitForUnexposed(QWindow *w)