1[require]
2GLSL >= 1.50
3GL_ARB_tessellation_shader
4GL_ARB_gpu_shader_fp64
5
6[vertex shader]
7in vec4 vertex;
8
9void main()
10{
11	gl_Position = vertex;
12}
13
14
15[tessellation control shader]
16#extension GL_ARB_tessellation_shader: require
17#extension GL_ARB_gpu_shader_fp64: require
18layout(vertices = 3) out;
19
20out block {
21	dvec4 tcs_var0[4];
22} blk[];
23
24void main() {
25	gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
26	gl_TessLevelOuter = float[4](1.0, 1.0, 1.0, 0.0);
27	gl_TessLevelInner = float[2](0.0, 0.0);
28	blk[gl_InvocationID].tcs_var0[0] = dvec4(1.0LF, 0.0LF, 0.0LF, 1.0LF);
29	blk[gl_InvocationID].tcs_var0[1] = dvec4(0.0LF, 1.0LF, 0.0LF, 1.0LF);
30	blk[gl_InvocationID].tcs_var0[2] = dvec4(0.0LF, 0.0LF, 1.0LF, 1.0LF);
31	blk[gl_InvocationID].tcs_var0[3] = dvec4(1.0LF, 1.0LF, 0.0LF, 1.0LF);
32}
33
34
35[tessellation evaluation shader]
36#extension GL_ARB_tessellation_shader: require
37#extension GL_ARB_gpu_shader_fp64: require
38layout(triangles) in;
39
40uniform int index;
41in block {
42	dvec4 tcs_var0[4];
43} blk[];
44
45out vec4 color;
46
47void main() {
48	gl_Position = gl_in[0].gl_Position * gl_TessCoord[0]
49	            + gl_in[1].gl_Position * gl_TessCoord[1]
50	            + gl_in[2].gl_Position * gl_TessCoord[2];
51
52	color = vec4(blk[0].tcs_var0[index]);
53}
54
55
56[fragment shader]
57#extension GL_ARB_gpu_shader_fp64: require
58in vec4 color;
59
60void main()
61{
62    gl_FragColor = color;
63}
64
65[vertex data]
66vertex/float/2
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 1.0  1.0
73
74[test]
75clear color 0.1 0.1 0.1 0.1
76clear
77patch parameter vertices 3
78
79uniform int index 0
80draw arrays GL_PATCHES 0 6
81probe all rgba 1.0 0.0 0.0 1.0
82
83uniform int index 1
84draw arrays GL_PATCHES 0 6
85probe all rgba 0.0 1.0 0.0 1.0
86
87uniform int index 2
88draw arrays GL_PATCHES 0 6
89probe all rgba 0.0 0.0 1.0 1.0
90
91uniform int index 3
92draw arrays GL_PATCHES 0 6
93probe all rgba 1.0 1.0 0.0 1.0
94