[Piglit] [PATCH] glsl-1.20: new tests for indirect access into a constant array

Marek Olšák maraeo at gmail.com
Thu Oct 16 06:03:31 PDT 2014


From: Marek Olšák <marek.olsak at amd.com>

4, 8, 16, 32 pass on radeonsi.
48 fails in a weird way.
64, 128, 256 crash on an assertion failure.

softpipe passes all of them.
---
 ...-array-indirect-access-004-elements.shader_test |  35 +++
 ...-array-indirect-access-008-elements.shader_test |  39 +++
 ...-array-indirect-access-016-elements.shader_test |  47 ++++
 ...-array-indirect-access-032-elements.shader_test |  63 +++++
 ...-array-indirect-access-048-elements.shader_test |  79 ++++++
 ...-array-indirect-access-064-elements.shader_test |  95 +++++++
 ...-array-indirect-access-128-elements.shader_test | 159 ++++++++++++
 ...-array-indirect-access-256-elements.shader_test | 287 +++++++++++++++++++++
 8 files changed, 804 insertions(+)
 create mode 100644 tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-004-elements.shader_test
 create mode 100644 tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-008-elements.shader_test
 create mode 100644 tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-016-elements.shader_test
 create mode 100644 tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-032-elements.shader_test
 create mode 100644 tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-048-elements.shader_test
 create mode 100644 tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-064-elements.shader_test
 create mode 100644 tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-128-elements.shader_test
 create mode 100644 tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-256-elements.shader_test

diff --git a/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-004-elements.shader_test b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-004-elements.shader_test
new file mode 100644
index 0000000..6fcd858
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-004-elements.shader_test
@@ -0,0 +1,35 @@
+# Test accessing a constant array with a non-constant expression.
+[require]
+GLSL >= 1.20
+
+
+[vertex shader]
+void
+main()
+{
+	gl_Position = gl_Vertex;
+}
+
+
+[fragment shader]
+
+uniform int zero;
+
+const vec4 colors[] = vec4[](
+	vec4(0.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0)
+);
+
+void
+main()
+{
+	gl_FragColor = colors[zero];
+}
+
+
+[test]
+uniform int zero 0
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-008-elements.shader_test b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-008-elements.shader_test
new file mode 100644
index 0000000..09b443b
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-008-elements.shader_test
@@ -0,0 +1,39 @@
+# Test accessing a constant array with a non-constant expression.
+[require]
+GLSL >= 1.20
+
+
+[vertex shader]
+void
+main()
+{
+	gl_Position = gl_Vertex;
+}
+
+
+[fragment shader]
+
+uniform int zero;
+
+const vec4 colors[] = vec4[](
+	vec4(0.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 1.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0)
+);
+
+void
+main()
+{
+	gl_FragColor = colors[zero];
+}
+
+
+[test]
+uniform int zero 0
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-016-elements.shader_test b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-016-elements.shader_test
new file mode 100644
index 0000000..ac4d493
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-016-elements.shader_test
@@ -0,0 +1,47 @@
+# Test accessing a constant array with a non-constant expression.
+[require]
+GLSL >= 1.20
+
+
+[vertex shader]
+void
+main()
+{
+	gl_Position = gl_Vertex;
+}
+
+
+[fragment shader]
+
+uniform int zero;
+
+const vec4 colors[] = vec4[](
+	vec4(0.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 1.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0)
+);
+
+void
+main()
+{
+	gl_FragColor = colors[zero];
+}
+
+
+[test]
+uniform int zero 0
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-032-elements.shader_test b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-032-elements.shader_test
new file mode 100644
index 0000000..d105f45
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-032-elements.shader_test
@@ -0,0 +1,63 @@
+# Test accessing a constant array with a non-constant expression.
+[require]
+GLSL >= 1.20
+
+
+[vertex shader]
+void
+main()
+{
+	gl_Position = gl_Vertex;
+}
+
+
+[fragment shader]
+
+uniform int zero;
+
+const vec4 colors[] = vec4[](
+	vec4(0.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1)
+);
+
+void
+main()
+{
+	gl_FragColor = colors[zero];
+}
+
+
+[test]
+uniform int zero 0
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-048-elements.shader_test b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-048-elements.shader_test
new file mode 100644
index 0000000..33e039c
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-048-elements.shader_test
@@ -0,0 +1,79 @@
+# Test accessing a constant array with a non-constant expression.
+[require]
+GLSL >= 1.20
+
+
+[vertex shader]
+void
+main()
+{
+	gl_Position = gl_Vertex;
+}
+
+
+[fragment shader]
+
+uniform int zero;
+
+const vec4 colors[] = vec4[](
+	vec4(0.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1)
+);
+
+void
+main()
+{
+	gl_FragColor = colors[zero];
+}
+
+
+[test]
+uniform int zero 0
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-064-elements.shader_test b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-064-elements.shader_test
new file mode 100644
index 0000000..80be74c
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-064-elements.shader_test
@@ -0,0 +1,95 @@
+# Test accessing a constant array with a non-constant expression.
+[require]
+GLSL >= 1.20
+
+
+[vertex shader]
+void
+main()
+{
+	gl_Position = gl_Vertex;
+}
+
+
+[fragment shader]
+
+uniform int zero;
+
+const vec4 colors[] = vec4[](
+	vec4(0.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1)
+);
+
+void
+main()
+{
+	gl_FragColor = colors[zero];
+}
+
+
+[test]
+uniform int zero 0
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-128-elements.shader_test b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-128-elements.shader_test
new file mode 100644
index 0000000..da2d2fd
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-128-elements.shader_test
@@ -0,0 +1,159 @@
+# Test accessing a constant array with a non-constant expression.
+[require]
+GLSL >= 1.20
+
+
+[vertex shader]
+void
+main()
+{
+	gl_Position = gl_Vertex;
+}
+
+
+[fragment shader]
+
+uniform int zero;
+
+const vec4 colors[] = vec4[](
+	vec4(0.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1)
+);
+
+void
+main()
+{
+	gl_FragColor = colors[zero];
+}
+
+
+[test]
+uniform int zero 0
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-256-elements.shader_test b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-256-elements.shader_test
new file mode 100644
index 0000000..ae6e633
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/fs-vec4-const-array-indirect-access-256-elements.shader_test
@@ -0,0 +1,287 @@
+# Test accessing a constant array with a non-constant expression.
+[require]
+GLSL >= 1.20
+
+
+[vertex shader]
+void
+main()
+{
+	gl_Position = gl_Vertex;
+}
+
+
+[fragment shader]
+
+uniform int zero;
+
+const vec4 colors[] = vec4[](
+	vec4(0.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 1.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.1, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.0, 1.0),
+	vec4(1.0, 1.0, 0.0, 1.0),
+	vec4(1.1, 1.0, 0.0, 1.0),
+	vec4(0.1, 1.0, 0.1, 1.1)
+);
+
+void
+main()
+{
+	gl_FragColor = colors[zero];
+}
+
+
+[test]
+uniform int zero 0
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
-- 
1.9.1



More information about the Piglit mailing list