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