1# This test checks that when ARB_arrays_of_arrays is supported, the 2# geometry shader can pass all of gl_ClipDistanceIn to a function. 3 4[require] 5GL >= 2.0 6GLSL >= 1.30 7GL_ARB_geometry_shader4 8GL_ARB_arrays_of_arrays 9 10[vertex shader] 11#version 130 12 13in vec4 vertex; 14in float offset; 15out float offset_to_gs; 16out float gl_ClipDistance[gl_MaxClipDistances]; 17 18void main() 19{ 20 gl_Position = vertex; 21 offset_to_gs = offset; 22 for (int i = 0; i < gl_MaxClipDistances; i++) { 23 gl_ClipDistance[i] = offset + float(i); 24 } 25} 26 27[geometry shader] 28#version 130 29#extension GL_ARB_geometry_shader4: enable 30 31in float offset_to_gs[3]; 32in float gl_ClipDistanceIn[3][gl_MaxClipDistances]; 33flat out int ok_to_fs; 34 35bool test(float clip_distance_copy[3][gl_MaxClipDistances]) 36{ 37 bool ok = true; 38 39 for (int i = 0; i < 3; i++) { 40 for (int j = 0; j < gl_MaxClipDistances; j++) { 41 if (clip_distance_copy[i][j] != offset_to_gs[i] + float(j)) 42 ok = false; 43 } 44 } 45 46 return ok; 47} 48 49void main() 50{ 51 bool ok = test(gl_ClipDistanceIn); 52 for (int i = 0; i < 3; i++) { 53 gl_Position = gl_PositionIn[i]; 54 ok_to_fs = int(ok); 55 EmitVertex(); 56 } 57} 58 59[geometry layout] 60input type GL_TRIANGLES 61output type GL_TRIANGLE_STRIP 62vertices out 3 63 64[fragment shader] 65#version 130 66 67flat in int ok_to_fs; 68 69void main() 70{ 71 if (ok_to_fs != 0) 72 gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); 73 else 74 gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); 75} 76 77[vertex data] 78vertex/float/2 offset/float/1 79-1.0 -1.0 1.0 80 1.0 -1.0 2.0 81 1.0 1.0 3.0 82-1.0 1.0 4.0 83 84[test] 85draw arrays GL_TRIANGLE_FAN 0 4 86probe all rgba 0.0 1.0 0.0 1.0 87