1[require]
2GLSL >= 1.50
3GL_ARB_tessellation_shader
4
5[vertex shader passthrough]
6
7[tessellation control shader]
8#extension GL_ARB_tessellation_shader: require
9layout(vertices = 6) out;
10
11patch out int val[6];
12patch out vec4 pcolor;
13
14void main() {
15	gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
16        if (gl_InvocationID < val.length())
17                val[gl_InvocationID] = gl_InvocationID;
18
19        pcolor = vec4(0, 1, 0, 1);
20
21        barrier();
22
23        for (int i = 0; i < val.length(); i++) {
24                 // Switch things up so that each invocation checks
25                 // different locations
26                 int index = (i + gl_InvocationID) % val.length();
27                 if (val[index] != index)
28                         pcolor = vec4(1, 0, 0, 1);
29        }
30
31	gl_TessLevelOuter = float[4](1.0, 1.0, 1.0, 0.0);
32	gl_TessLevelInner = float[2](0.0, 0.0);
33}
34
35
36[tessellation evaluation shader]
37#extension GL_ARB_tessellation_shader: require
38layout(triangles) in;
39
40patch in vec4 pcolor;
41out vec4 color;
42
43void main() {
44	gl_Position = gl_in[0].gl_Position * gl_TessCoord[0]
45	            + gl_in[1].gl_Position * gl_TessCoord[1]
46	            + gl_in[2].gl_Position * gl_TessCoord[2];
47        color = pcolor;
48}
49
50
51[fragment shader]
52in vec4 color;
53void main()
54{
55	gl_FragColor = color;
56}
57
58[vertex data]
59piglit_vertex/float/2
60-1.0 -1.0
61 1.0 -1.0
62-1.0  1.0
63-1.0  1.0
64 1.0 -1.0
65 1.0  1.0
66-1.0  1.0
67 1.0 -1.0
68 1.0  1.0
69-1.0  1.0
70 1.0 -1.0
71 1.0  1.0
72
73[test]
74clear color 0.0 0.0 0.0 1.0
75clear
76
77patch parameter vertices 3
78draw arrays GL_PATCHES 0 6
79probe all rgba 0.0 1.0 0.0 1.0
80
81clear color 0.0 0.0 0.0 1.0
82clear
83
84patch parameter vertices 6
85draw arrays GL_PATCHES 0 12
86probe all rgba 0.0 1.0 0.0 1.0
87