summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qshaderbaker/data/defines.frag28
-rw-r--r--tests/auto/qshaderbaker/tst_qshaderbaker.cpp52
-rw-r--r--tests/playground/preamble.frag17
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);
+}