[Piglit] [PATCH] glsl-1.20: Add tests exposing some crashes with const arrays
Chris Forbes
chrisf at ijw.co.nz
Fri Nov 7 10:43:10 PST 2014
I stumbled across these while implementing tessellation. In particular,
the first test is a cutdown version of the tessellation nop.shader_test.
The crash in array-initializers-1 is caused by the lowering of const arrays to
uniforms. The hidden uniforms for both are named 'constarray', and a
later phase in the linker gets horribly confused when it tries to look
them up by name.
I have not yet usefully characterized the crash in double-indirect-1,
other than that it is in the i965 backend rather than in the GLSL
compiler.
Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
---
Here's a slightly better version of the patch. The first crash turned out to be
nothing to do with double-indirection.
tests/all.py | 4 ++++
.../linker/array-initializers-1.shader_test | 20 ++++++++++++++++++++
.../glsl-1.20/linker/double-indirect-1.shader_test | 21 +++++++++++++++++++++
3 files changed, 45 insertions(+)
create mode 100644 tests/spec/glsl-1.20/linker/array-initializers-1.shader_test
create mode 100644 tests/spec/glsl-1.20/linker/double-indirect-1.shader_test
diff --git a/tests/all.py b/tests/all.py
index 4089325..3f004ce 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -1074,6 +1074,10 @@ spec['glsl-1.20']['execution'] = {}
add_shader_test_dir(spec['glsl-1.20']['execution'],
os.path.join(testsDir, 'spec', 'glsl-1.20', 'execution'),
recursive=True)
+spec['glsl-1.20']['linker'] = {}
+add_shader_test_dir(spec['glsl-1.20']['linker'],
+ os.path.join(testsDir, 'spec', 'glsl-1.20', 'linker'),
+ recursive=True)
add_shader_test_dir(spec['glsl-1.20']['execution'],
os.path.join(generatedTestDir, 'spec', 'glsl-1.20', 'execution'),
recursive=True)
diff --git a/tests/spec/glsl-1.20/linker/array-initializers-1.shader_test b/tests/spec/glsl-1.20/linker/array-initializers-1.shader_test
new file mode 100644
index 0000000..911acd4
--- /dev/null
+++ b/tests/spec/glsl-1.20/linker/array-initializers-1.shader_test
@@ -0,0 +1,20 @@
+# Demonstrates a crash in mesa.
+
+[require]
+GLSL >= 1.20
+
+[vertex shader]
+#version 120
+
+const int xs[] = int[](1,2,3);
+const int ys[] = int[](1,2);
+
+uniform int n;
+
+void main()
+{
+ gl_Position = vec4(xs[n]+ys[n], 0, 0, 1);
+}
+
+[test]
+link success
diff --git a/tests/spec/glsl-1.20/linker/double-indirect-1.shader_test b/tests/spec/glsl-1.20/linker/double-indirect-1.shader_test
new file mode 100644
index 0000000..c1d46e3
--- /dev/null
+++ b/tests/spec/glsl-1.20/linker/double-indirect-1.shader_test
@@ -0,0 +1,21 @@
+# Demonstrates a crash in i965. The double indirection via const arrays
+# is required to trigger this.
+
+[require]
+GLSL >= 1.20
+
+[vertex shader]
+#version 120
+
+const float a[] = float[](0);
+const int b[] = int[](0);
+
+uniform int n;
+
+void main()
+{
+ gl_Position = vec4(a[b[n]], 0, 0, 1);
+}
+
+[test]
+link success
--
2.1.3
More information about the Piglit
mailing list