[Piglit] [PATCH v2] gs: Test that input arrays can be accessed dynamically.
Paul Berry
stereotype441 at gmail.com
Tue Sep 10 16:59:25 PDT 2013
Most geometry shaders access their input arrays using a constant index
(or an index that is constant after loop unrolling). This test checks
that we get the right results if we access a geometry shader input
array using a non-constant index.
v2: Use a slightly more complex calculation that allows each vertex to
have a different value of "index" (suggested by Chad Versace
<chad.versace at linux.intel.com>).
---
.../geometry/dynamic_input_array_index.shader_test | 71 ++++++++++++++++++++++
1 file changed, 71 insertions(+)
create mode 100644 tests/spec/glsl-1.50/execution/geometry/dynamic_input_array_index.shader_test
diff --git a/tests/spec/glsl-1.50/execution/geometry/dynamic_input_array_index.shader_test b/tests/spec/glsl-1.50/execution/geometry/dynamic_input_array_index.shader_test
new file mode 100644
index 0000000..0475710
--- /dev/null
+++ b/tests/spec/glsl-1.50/execution/geometry/dynamic_input_array_index.shader_test
@@ -0,0 +1,71 @@
+# Verify that a geometry shader can access an input array using a
+# dynamic index rather than a constant index.
+
+[require]
+GL >= 3.2
+GLSL >= 1.50
+
+[vertex shader]
+#version 150
+
+in vec4 vertex;
+in ivec4 color;
+in ivec4 modulus;
+in int index;
+out vec4 vertex_to_gs;
+out ivec4 color_to_gs;
+out ivec4 modulus_to_gs;
+out int index_to_gs;
+
+void main()
+{
+ vertex_to_gs = vertex;
+ color_to_gs = color;
+ modulus_to_gs = modulus;
+ index_to_gs = index;
+}
+
+[geometry shader]
+#version 150
+
+layout(triangles) in;
+layout(triangle_strip, max_vertices = 3) out;
+
+in vec4 vertex_to_gs[3];
+in ivec4 color_to_gs[3];
+in ivec4 modulus_to_gs[3];
+in int index_to_gs[3];
+out vec4 color_to_fs;
+
+void main()
+{
+ for (int i = 0; i < 3; i++) {
+ gl_Position = vertex_to_gs[i];
+ color_to_fs = vec4(mod(color_to_gs[i], modulus_to_gs[index_to_gs[i]]));
+ EmitVertex();
+ }
+}
+
+[fragment shader]
+#version 150
+
+in vec4 color_to_fs;
+out vec4 color;
+
+void main()
+{
+ color = color_to_fs;
+}
+
+[vertex data]
+vertex/float/2 color/int/4 modulus/int/4 index/int/1
+-1.0 -1.0 5 7 9 10 4 7 5 2 2
+ 1.0 -1.0 2 3 4 3 2 2 2 2 1
+ 1.0 1.0 8 15 15 15 5 6 9 9 0
+-1.0 -1.0 5 7 9 10 4 7 5 2 2
+ 1.0 1.0 2 3 4 3 2 2 2 2 1
+-1.0 1.0 8 15 15 15 5 6 9 9 0
+
+[test]
+draw arrays GL_TRIANGLES 0 6
+probe all rgba 0.0 1.0 0.0 1.0
--
1.8.4
More information about the Piglit
mailing list