1# This test checks that the GLSL compiler respects the size of
2# gl_ClipDistanceIn when it is explicitly declared in the geometry
3# shader.
4
5[require]
6GL >= 2.0
7GLSL >= 1.30
8GL_ARB_geometry_shader4
9
10[vertex shader]
11#version 130
12out float gl_ClipDistance[2];
13in vec4 vertex;
14
15void main()
16{
17  gl_Position = vertex;
18}
19
20[geometry shader]
21#version 130
22#extension GL_ARB_geometry_shader4: enable
23
24in float gl_ClipDistanceIn[3][2];
25flat out int outer_size;
26flat out int inner_size;
27
28void main()
29{
30  for (int i = 0; i < 3; i++) {
31    gl_Position = gl_PositionIn[i];
32    outer_size = gl_ClipDistanceIn.length();
33    inner_size = gl_ClipDistanceIn[0].length();
34    EmitVertex();
35  }
36}
37
38[geometry layout]
39input type GL_TRIANGLES
40output type GL_TRIANGLE_STRIP
41vertices out 3
42
43[fragment shader]
44#version 130
45
46flat in int outer_size;
47flat in int inner_size;
48
49void main()
50{
51  if (outer_size != 3)
52    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
53  else if (inner_size != 2)
54    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
55  else
56    gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
57}
58
59[vertex data]
60vertex/float/2
61-1.0 -1.0
62 1.0 -1.0
63 1.0  1.0
64-1.0  1.0
65
66[test]
67draw arrays GL_TRIANGLE_FAN 0 4
68probe all rgba 0.0 1.0 0.0 1.0
69