Consider 8 triangles on the screen like so:

    +-+-+
    |/|/|
    +-+-+
    |/|/|
    +-+-+

Draw the left 4 triangles front-facing, the right 4 triangles back-facing.
Flip the top 4 triangles in the geometry shader (swap the first and last
vertex). In the fragment shader write different colors according to
gl_FrontFacing. The result should be a 2x2 checkerboard.

Signed-off-by: Fabian Bieler <[email protected]>
---
 .../execution/geometry/two-side.shader_test        | 86 ++++++++++++++++++++++
 1 file changed, 86 insertions(+)
 create mode 100644 tests/spec/glsl-1.50/execution/geometry/two-side.shader_test

diff --git a/tests/spec/glsl-1.50/execution/geometry/two-side.shader_test 
b/tests/spec/glsl-1.50/execution/geometry/two-side.shader_test
new file mode 100644
index 0000000..8afd239
--- /dev/null
+++ b/tests/spec/glsl-1.50/execution/geometry/two-side.shader_test
@@ -0,0 +1,86 @@
+# Consider 8 triangles on the screen like so:
+#
+#     +-+-+
+#     |/|/|
+#     +-+-+
+#     |/|/|
+#     +-+-+
+#
+# Draw the left 4 triangles front-facing, the right 4 triangles back-facing.
+# Flip the top 4 triangles in the geometry shader (swap the first and last
+# vertex). In the fragment shader write different colors according to
+# gl_FrontFacing. The result should be a 2x2 checkerboard.
+[require]
+GL >= 3.2
+GLSL >= 1.50
+
+[vertex shader]
+attribute vec4 vertex;
+
+void main()
+{
+       gl_Position = vertex;
+}
+
+[geometry shader]
+layout(triangles) in;
+layout(triangle_strip, max_vertices = 3) out;
+
+void main()
+{
+       float y = gl_in[0].gl_Position.y + gl_in[1].gl_Position.y +
+                 gl_in[2].gl_Position.y;
+       for (int i = 0; i < 3; i++) {
+               /* Flip the triangles in the upper half of the screen. */
+               if (y > 0.0)
+                       gl_Position = gl_in[2 - i].gl_Position;
+               else
+                       gl_Position = gl_in[i].gl_Position;
+               EmitVertex();
+       }
+}
+
+[fragment shader]
+void main()
+{
+       if (gl_FrontFacing)
+               gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
+       else
+               gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);
+}
+
+[vertex data]
+vertex/float/2
+-1.0 -1.0
+ 0.0 -1.0
+ 0.0  0.0
+-1.0 -1.0
+ 0.0  0.0
+-1.0  0.0
+ 0.0 -1.0
+ 0.0  0.0
+ 1.0  0.0
+ 0.0 -1.0
+ 1.0  0.0
+ 1.0 -1.0
+-1.0  0.0
+ 0.0  0.0
+ 0.0  1.0
+-1.0  0.0
+ 0.0  1.0
+-1.0  1.0
+ 0.0  0.0
+ 0.0  1.0
+ 1.0  1.0
+ 0.0  0.0
+ 1.0  1.0
+ 1.0  0.0
+
+
+[test]
+enable GL_VERTEX_PROGRAM_TWO_SIDE
+draw arrays GL_TRIANGLES 0 24
+relative probe rgba (0.25, 0.25) (0.0, 1.0, 0.0, 1.0)
+relative probe rgba (0.75, 0.25) (0.0, 0.0, 1.0, 1.0)
+relative probe rgba (0.25, 0.75) (0.0, 0.0, 1.0, 1.0)
+relative probe rgba (0.75, 0.75) (0.0, 1.0, 0.0, 1.0)
-- 
1.8.3.2

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to