diff options
Diffstat (limited to 'tests/auto/gui/rhi/qshader')
-rw-r--r-- | tests/auto/gui/rhi/qshader/data/texture_all_v4.frag.qsb | bin | 0 -> 1272 bytes | |||
-rw-r--r-- | tests/auto/gui/rhi/qshader/tst_qshader.cpp | 142 |
2 files changed, 129 insertions, 13 deletions
diff --git a/tests/auto/gui/rhi/qshader/data/texture_all_v4.frag.qsb b/tests/auto/gui/rhi/qshader/data/texture_all_v4.frag.qsb Binary files differnew file mode 100644 index 0000000000..4292d67b7c --- /dev/null +++ b/tests/auto/gui/rhi/qshader/data/texture_all_v4.frag.qsb diff --git a/tests/auto/gui/rhi/qshader/tst_qshader.cpp b/tests/auto/gui/rhi/qshader/tst_qshader.cpp index a0082f1e3b..ab7115b74a 100644 --- a/tests/auto/gui/rhi/qshader/tst_qshader.cpp +++ b/tests/auto/gui/rhi/qshader/tst_qshader.cpp @@ -43,6 +43,8 @@ private slots: void mslResourceMapping(); void loadV3(); void serializeShaderDesc(); + void comparison(); + void loadV4(); }; static QShader getShader(const QString &name) @@ -353,36 +355,63 @@ void tst_QShader::serializeShaderDesc() QShaderDescription desc; QVERIFY(!desc.isValid()); - const QByteArray data = desc.toCbor(); + QByteArray data; + { + QBuffer buf(&data); + QDataStream ds(&buf); + QVERIFY(buf.open(QIODevice::WriteOnly)); + desc.serialize(&ds); + } QVERIFY(!data.isEmpty()); - QShaderDescription desc2 = QShaderDescription::fromCbor(data); - QVERIFY(!desc2.isValid()); + { + QBuffer buf(&data); + QDataStream ds(&buf); + QVERIFY(buf.open(QIODevice::ReadOnly)); + QShaderDescription desc2 = QShaderDescription::deserialize(&ds); + QVERIFY(!desc2.isValid()); + } } // a QShaderDescription with inputs, outputs, uniform block and combined image sampler { - QShader s = getShader(QLatin1String(":/data/texture_all_v3.frag.qsb")); + QShader s = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb")); QVERIFY(s.isValid()); const QShaderDescription desc = s.description(); QVERIFY(desc.isValid()); - const QByteArray data = desc.toCbor(); + QByteArray data; + { + QBuffer buf(&data); + QDataStream ds(&buf); + QVERIFY(buf.open(QIODevice::WriteOnly)); + desc.serialize(&ds); + } QVERIFY(!data.isEmpty()); - QShaderDescription desc2; - QVERIFY(!desc2.isValid()); - QVERIFY(!(desc == desc2)); - QVERIFY(desc != desc2); + { + QShaderDescription desc2; + QVERIFY(!desc2.isValid()); + QVERIFY(!(desc == desc2)); + QVERIFY(desc != desc2); + } - desc2 = QShaderDescription::fromCbor(data); - QVERIFY(desc2.isValid()); - QCOMPARE(desc, desc2); + { + QBuffer buf(&data); + QDataStream ds(&buf); + QVERIFY(buf.open(QIODevice::ReadOnly)); + QShaderDescription desc2 = QShaderDescription::deserialize(&ds); + QVERIFY(desc2.isValid()); + QCOMPARE(desc, desc2); + } } +} +void tst_QShader::comparison() +{ // exercise QShader and QShaderDescription comparisons { - QShader s1 = getShader(QLatin1String(":/data/texture_all_v3.frag.qsb")); + QShader s1 = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb")); QVERIFY(s1.isValid()); QShader s2 = getShader(QLatin1String(":/data/color_all_v1.vert.qsb")); QVERIFY(s2.isValid()); @@ -393,6 +422,93 @@ void tst_QShader::serializeShaderDesc() QVERIFY(s1 != s2); QVERIFY(s1.description() != s2.description()); } + + { + QShader s1 = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb")); + QVERIFY(s1.isValid()); + QShader s2 = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb")); + QVERIFY(s2.isValid()); + + QVERIFY(s1.description().isValid()); + QVERIFY(s2.description().isValid()); + + QVERIFY(s1 == s2); + QVERIFY(s1.description() == s2.description()); + } +} + +void tst_QShader::loadV4() +{ + // qsb version 4: QShaderDescription is serialized via QDataStream. Ensure the deserialized data is as expected. + QShader s = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb")); + QVERIFY(s.isValid()); + QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 4); + + const QVector<QShaderKey> availableShaders = s.availableShaders(); + QCOMPARE(availableShaders.count(), 7); + QVERIFY(availableShaders.contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100)))); + QVERIFY(availableShaders.contains(QShaderKey(QShader::MslShader, QShaderVersion(12)))); + QVERIFY(availableShaders.contains(QShaderKey(QShader::HlslShader, QShaderVersion(50)))); + QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(100, QShaderVersion::GlslEs)))); + QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(120)))); + QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(150)))); + QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(330)))); + + const QShaderDescription desc = s.description(); + QVERIFY(desc.isValid()); + QCOMPARE(desc.inputVariables().count(), 1); + for (const QShaderDescription::InOutVariable &v : desc.inputVariables()) { + switch (v.location) { + case 0: + QCOMPARE(v.name, QLatin1String("qt_TexCoord")); + QCOMPARE(v.type, QShaderDescription::Vec2); + break; + default: + QVERIFY(false); + break; + } + } + QCOMPARE(desc.outputVariables().count(), 1); + for (const QShaderDescription::InOutVariable &v : desc.outputVariables()) { + switch (v.location) { + case 0: + QCOMPARE(v.name, QLatin1String("fragColor")); + QCOMPARE(v.type, QShaderDescription::Vec4); + break; + default: + QVERIFY(false); + break; + } + } + QCOMPARE(desc.uniformBlocks().count(), 1); + const QShaderDescription::UniformBlock blk = desc.uniformBlocks().first(); + QCOMPARE(blk.blockName, QLatin1String("buf")); + QCOMPARE(blk.structName, QLatin1String("ubuf")); + QCOMPARE(blk.size, 68); + QCOMPARE(blk.binding, 0); + QCOMPARE(blk.descriptorSet, 0); + QCOMPARE(blk.members.count(), 2); + for (int i = 0; i < blk.members.count(); ++i) { + const QShaderDescription::BlockVariable v = blk.members[i]; + switch (i) { + case 0: + QCOMPARE(v.offset, 0); + QCOMPARE(v.size, 64); + QCOMPARE(v.name, QLatin1String("qt_Matrix")); + QCOMPARE(v.type, QShaderDescription::Mat4); + QCOMPARE(v.matrixStride, 16); + break; + case 1: + QCOMPARE(v.offset, 64); + QCOMPARE(v.size, 4); + QCOMPARE(v.name, QLatin1String("opacity")); + QCOMPARE(v.type, QShaderDescription::Float); + break; + default: + QVERIFY(false); + break; + } + } } #include <tst_qshader.moc> |