diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qshaderbaker/data/defines.frag | 28 | ||||
-rw-r--r-- | tests/auto/qshaderbaker/tst_qshaderbaker.cpp | 52 | ||||
-rw-r--r-- | tests/playground/preamble.frag | 17 |
3 files changed, 97 insertions, 0 deletions
diff --git a/tests/auto/qshaderbaker/data/defines.frag b/tests/auto/qshaderbaker/data/defines.frag new file mode 100644 index 0000000..8bdd794 --- /dev/null +++ b/tests/auto/qshaderbaker/data/defines.frag @@ -0,0 +1,28 @@ +#version 440 + +layout(location = 0) in vec3 v_color; +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + mat4 mvp; +#if OPACITY_SIZE == 1 + float opacity; +#elif OPACITY_SIZE == 2 + vec2 opacity; +#elif OPACITY_SIZE == 3 + vec3 opacity; +#else + vec4 opacity; +#endif +} ubuf; + +#ifdef DO_NOT_BREAK +void main() +#endif +{ +#if OPACITY_SIZE == 1 + fragColor = vec4(v_color * ubuf.opacity, ubuf.opacity); +#else + fragColor = vec4(v_color * ubuf.opacity.r, ubuf.opacity.r); +#endif +} diff --git a/tests/auto/qshaderbaker/tst_qshaderbaker.cpp b/tests/auto/qshaderbaker/tst_qshaderbaker.cpp index 36085e5..e6602d8 100644 --- a/tests/auto/qshaderbaker/tst_qshaderbaker.cpp +++ b/tests/auto/qshaderbaker/tst_qshaderbaker.cpp @@ -53,6 +53,7 @@ private slots: void compileError(); void translateError(); void genVariants(); + void defines(); }; void tst_QShaderBaker::initTestCase() @@ -373,5 +374,56 @@ void tst_QShaderBaker::genVariants() QCOMPARE(batchableGlslVariantCount, 3); } +void tst_QShaderBaker::defines() +{ + QShaderBaker baker; + baker.setSourceFileName(QLatin1String(":/data/defines.frag")); + baker.setGeneratedShaderVariants({ QRhiShaderKey::StandardShader }); + baker.setGeneratedShaders({ { QRhiShaderKey::SpirvShader, QRhiShaderVersion(100) } }); + QRhiShader s = baker.bake(); + QVERIFY(!s.isValid()); + QVERIFY(!baker.errorMessage().isEmpty()); + qDebug() << baker.errorMessage(); + + QByteArray preamble; + preamble = QByteArrayLiteral("#define DO_NOT_BREAK\n"); + baker.setPreamble(preamble); + s = baker.bake(); + QVERIFY(s.isValid()); + QVERIFY(baker.errorMessage().isEmpty()); + + QRhiShaderDescription desc = s.description(); + QCOMPARE(desc.uniformBlocks().count(), 1); + QRhiShaderDescription::UniformBlock blk = desc.uniformBlocks().first(); + QCOMPARE(blk.members.count(), 2); + bool opacity_ok = false; + for (int i = 0; i < blk.members.count(); ++i) { + const QRhiShaderDescription::BlockVariable v = blk.members[i]; + if (v.name == QLatin1String("opacity")) { + opacity_ok = v.type == QRhiShaderDescription::Vec4; + break; + } + } + QVERIFY(opacity_ok); + + preamble += QByteArrayLiteral("#define OPACITY_SIZE 1\n"); + baker.setPreamble(preamble); + s = baker.bake(); + QVERIFY(s.isValid()); + QVERIFY(baker.errorMessage().isEmpty()); + + desc = s.description(); + blk = desc.uniformBlocks().first(); + opacity_ok = false; + for (int i = 0; i < blk.members.count(); ++i) { + const QRhiShaderDescription::BlockVariable v = blk.members[i]; + if (v.name == QLatin1String("opacity")) { + opacity_ok = v.type == QRhiShaderDescription::Float; + break; + } + } + QVERIFY(opacity_ok); +} + #include <tst_qshaderbaker.moc> QTEST_MAIN(tst_QShaderBaker) diff --git a/tests/playground/preamble.frag b/tests/playground/preamble.frag new file mode 100644 index 0000000..f7b30ef --- /dev/null +++ b/tests/playground/preamble.frag @@ -0,0 +1,17 @@ +#version 440 + +layout(location = 0) in vec2 v_texcoord; +layout(location = 0) out vec4 fragColor; + +// must be compiled with -DMAKE_IT_WORK -DYES_REALLY=99 + +#ifdef MAKE_IT_WORK +#if YES_REALLY > 98 +layout(binding = 1) uniform sampler2D tex; +#endif +#endif + +void main() +{ + fragColor = texture(tex, v_texcoord); +} |