summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/rhi
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2021-09-06 15:45:01 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2021-09-07 14:41:11 +0200
commitb6b0c33058ba7f43661e316d9f27d4102f6a988f (patch)
treee8b61d8730a3cb3725ac77be70546f4830ea0802 /tests/auto/gui/rhi
parentcca8ed0547405b1c018e995ad366ba0ab4c2a0e8 (diff)
rhi: Make the serialized srb layout description accessible
...by the Qt Quick renderer, for example. A typical Qt Quick material binding set serializes to 8 uints. This would not demand a container like QVector. However, being implicitly shared is essential here due to the intended usage (query the serialized blob, put it into a cache key, hash it, compare it, all without any copying and new allocs; we can afford an extra alloc upon each srb construction, but don't want more afterwards in the rendering engines) Also make it clear in the pipeline docs that the optimization Qt Quick is (soon going to be) doing is legal. (the srb ref in the pipeline can be dead and dangling as long as every call to setShaderResources() specifies a layout-compatible alternative) Pick-to: 6.2 Change-Id: I97efbea1fa3516b10c9832adbab0a21b7bc0845d Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'tests/auto/gui/rhi')
-rw-r--r--tests/auto/gui/rhi/qrhi/tst_qrhi.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp b/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp
index be825c8ac2..61e19434e0 100644
--- a/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp
+++ b/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp
@@ -3271,6 +3271,8 @@ void tst_QRhi::srbLayoutCompatibility()
QVERIFY(srb1->isLayoutCompatible(srb2.data()));
QVERIFY(srb2->isLayoutCompatible(srb1.data()));
+
+ QCOMPARE(srb1->serializedLayoutDescription(), srb2->serializedLayoutDescription());
}
// different count (not compatible)
@@ -3286,6 +3288,8 @@ void tst_QRhi::srbLayoutCompatibility()
QVERIFY(!srb1->isLayoutCompatible(srb2.data()));
QVERIFY(!srb2->isLayoutCompatible(srb1.data()));
+
+ QVERIFY(srb1->serializedLayoutDescription() != srb2->serializedLayoutDescription());
}
// full match (compatible)
@@ -3306,6 +3310,10 @@ void tst_QRhi::srbLayoutCompatibility()
QVERIFY(srb1->isLayoutCompatible(srb2.data()));
QVERIFY(srb2->isLayoutCompatible(srb1.data()));
+
+ QVERIFY(!srb1->serializedLayoutDescription().isEmpty());
+ QVERIFY(!srb2->serializedLayoutDescription().isEmpty());
+ QCOMPARE(srb1->serializedLayoutDescription(), srb2->serializedLayoutDescription());
}
// different visibility (not compatible)
@@ -3324,6 +3332,8 @@ void tst_QRhi::srbLayoutCompatibility()
QVERIFY(!srb1->isLayoutCompatible(srb2.data()));
QVERIFY(!srb2->isLayoutCompatible(srb1.data()));
+
+ QVERIFY(srb1->serializedLayoutDescription() != srb2->serializedLayoutDescription());
}
// different binding points (not compatible)
@@ -3342,6 +3352,8 @@ void tst_QRhi::srbLayoutCompatibility()
QVERIFY(!srb1->isLayoutCompatible(srb2.data()));
QVERIFY(!srb2->isLayoutCompatible(srb1.data()));
+
+ QVERIFY(srb1->serializedLayoutDescription() != srb2->serializedLayoutDescription());
}
// different buffer region offset and size (compatible)
@@ -3362,6 +3374,8 @@ void tst_QRhi::srbLayoutCompatibility()
QVERIFY(srb1->isLayoutCompatible(srb2.data()));
QVERIFY(srb2->isLayoutCompatible(srb1.data()));
+
+ QCOMPARE(srb1->serializedLayoutDescription(), srb2->serializedLayoutDescription());
}
// different resources (compatible)
@@ -3382,6 +3396,8 @@ void tst_QRhi::srbLayoutCompatibility()
QVERIFY(srb1->isLayoutCompatible(srb2.data()));
QVERIFY(srb2->isLayoutCompatible(srb1.data()));
+
+ QCOMPARE(srb1->serializedLayoutDescription(), srb2->serializedLayoutDescription());
}
}