Work around lavapipe bug in tst_qvulkan

Work around https://gitlab.freedesktop.org/mesa/mesa/-/issues/5875 by
treating the driver as broken when both the driver and device UUIDs
are all zeroes.

Fixes: QTBUG-104231
Pick-to: 6.4 6.3 6.2
Change-Id: Ibf7973361d472ebb1cb433bc61b50b2828f75c6b
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This commit is contained in:
Laszlo Agocs 2022-06-14 10:30:00 +02:00
parent 79a11470f3
commit e4961afed2

View File

@ -137,15 +137,17 @@ void tst_QVulkan::vulkan11()
QByteArray deviceUuid = QByteArray::fromRawData((const char *) deviceIdProps.deviceUUID, VK_UUID_SIZE).toHex(); QByteArray deviceUuid = QByteArray::fromRawData((const char *) deviceIdProps.deviceUUID, VK_UUID_SIZE).toHex();
QByteArray driverUuid = QByteArray::fromRawData((const char *) deviceIdProps.driverUUID, VK_UUID_SIZE).toHex(); QByteArray driverUuid = QByteArray::fromRawData((const char *) deviceIdProps.driverUUID, VK_UUID_SIZE).toHex();
qDebug() << "deviceUUID" << deviceUuid << "driverUUID" << driverUuid; qDebug() << "deviceUUID" << deviceUuid << "driverUUID" << driverUuid;
const bool deviceUuidZero = std::find_if(deviceUuid.cbegin(), deviceUuid.cend(), [](char c) -> bool { return c; }) == deviceUuid.cend();
const bool driverUuidZero = std::find_if(driverUuid.cbegin(), driverUuid.cend(), [](char c) -> bool { return c; }) == driverUuid.cend();
// deviceUUID cannot be all zero as per spec // deviceUUID cannot be all zero as per spec
bool seenNonZero = false; if (!driverUuidZero) {
for (int i = 0; i < VK_UUID_SIZE; ++i) { // ...but then there are implementations such as some
if (deviceIdProps.deviceUUID[i]) { // versions of Mesa lavapipe, that returns all zeroes
seenNonZero = true; // for both uuids. skip the check if the driver uuid
break; // was zero too.
} // https://gitlab.freedesktop.org/mesa/mesa/-/issues/5875
QVERIFY(!deviceUuidZero);
} }
QVERIFY(seenNonZero);
} else { } else {
qDebug("Physical device is not Vulkan 1.1 capable"); qDebug("Physical device is not Vulkan 1.1 capable");
} }