[Piglit] [PATCH] Add a test for instanced GS inputs.

Andrii Simiklit asimiklit.work at gmail.com
Tue Jun 5 13:33:00 UTC 2018


   All of our other tests for instanced geometry shaders don't actually
   transfer the vertices to the geometry shader
   from the vertex shader using gl_Position.
   This used to be broken with the i965 driver's in Mesa 12.1.0
   on revision d10ae20b9678f1a5b8a81716c68e612662665277.
   This test should give us ability to detect
   such kind of bugs like 96354 bug in future.

Signed-off-by: Andrii Simiklit <andrii.simiklit at globallogic.com>
---
 .../instanced-inputs-built-in-variable.shader_test | 68 ++++++++++++++++++++++
 1 file changed, 68 insertions(+)
 create mode 100644 tests/spec/arb_gpu_shader5/execution/instanced-inputs-built-in-variable.shader_test

diff --git a/tests/spec/arb_gpu_shader5/execution/instanced-inputs-built-in-variable.shader_test b/tests/spec/arb_gpu_shader5/execution/instanced-inputs-built-in-variable.shader_test
new file mode 100644
index 0000000..86b2bbd
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/instanced-inputs-built-in-variable.shader_test
@@ -0,0 +1,68 @@
+#It seems as duplicate of the "instanced-inputs.shader_test" test but it could not detect the bug 96354.
+#It could detect the 96354 bug if and only if vertices are transferred 
+#from vertex shader into geometry shader through built-in variable gl_Position. 
+#
+#Specification permits us to do it "11.3.4.4 Geometry Shader Inputs:
+#    Structure member gl_Position holds the per-vertex position, as written
+#    by the vertex shader to its built-in output variable gl_Position. 
+#    Note that writing to gl_Position from either the vertex or geometry shader is 
+#    optional (also see section 7.1(“Built-In Variables”) of the OpenGL Shading Language Specification)"
+
+[require]
+GL >= 2.0
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader]
+in vec4 vertex;
+
+void main()
+{   
+   gl_Position = vertex;
+}
+
+[geometry shader]
+#extension GL_ARB_gpu_shader5 : require
+layout(triangles) in;
+layout(triangle_strip, max_vertices = 3) out;
+layout(invocations = 4) in;
+
+void main()
+{
+   vec2 offset;
+   if (gl_InvocationID == 0)
+      offset.xy = vec2(-0.5, -0.5);
+   else if (gl_InvocationID == 1)
+      offset.xy = vec2( 0.5, -0.5);
+   else if (gl_InvocationID == 2)
+      offset.xy = vec2(-0.5,  0.5);
+   else if (gl_InvocationID == 3)
+      offset.xy = vec2( 0.5,  0.5);
+   
+   for (int i = 0; i < 3; i++) {
+       gl_Position = gl_in[i].gl_Position;
+       gl_Position.xy += offset;
+       EmitVertex();
+   }
+}
+
+[fragment shader]
+void main()
+{
+   gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
+}
+
+[vertex data]
+vertex/float/2
+-0.5 -0.5
+ 0.5 -0.5
+-0.5  0.0
+ 0.5  0.0
+-0.5  0.5
+ 0.5  0.5
+
+[test]
+clear color 0.0 0.0 0.0 0.0
+clear
+draw arrays GL_TRIANGLE_STRIP 0 6
+probe all rgba 0.0 1.0 0.0 1.0
\ No newline at end of file
-- 
2.7.4



More information about the Piglit mailing list