ext_gpu_shader4: add compiler tests for everything
[piglit.git] / tests / spec / arb_geometry_shader4 / execution / clip-distance-in-param.shader_test
blob510dc9607b35d34baf5c285727c48cf3fd34e2e7
1 # This test checks that the geometry shader can pass an entire
2 # float[gl_MaxClipDistances] component of gl_ClipDistanceIn to a
3 # function.
5 [require]
6 GL >= 2.0
7 GLSL >= 1.30
8 GL_ARB_geometry_shader4
10 [vertex shader]
11 #version 130
13 in vec4 vertex;
14 in float offset;
15 out float offset_to_gs;
16 out float gl_ClipDistance[gl_MaxClipDistances];
18 void main()
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   }
27 [geometry shader]
28 #version 130
29 #extension GL_ARB_geometry_shader4: enable
31 in float offset_to_gs[3];
32 in float gl_ClipDistanceIn[3][gl_MaxClipDistances];
33 flat out int ok_to_fs;
35 bool test(float clip_distance_copy[gl_MaxClipDistances], float offset)
37   bool ok = true;
39   for (int j = 0; j < gl_MaxClipDistances; j++) {
40     if (clip_distance_copy[j] != offset + float(j))
41       ok = false;
42   }
44   return ok;
47 void main()
49   bool ok = true;
50   for (int i = 0; i < 3; i++) {
51     if (!test(gl_ClipDistanceIn[i], offset_to_gs[i]))
52       ok = false;
53   }
54   for (int i = 0; i < 3; i++) {
55     gl_Position = gl_PositionIn[i];
56     ok_to_fs = int(ok);
57     EmitVertex();
58   }
61 [geometry layout]
62 input type GL_TRIANGLES
63 output type GL_TRIANGLE_STRIP
64 vertices out 3
66 [fragment shader]
67 #version 130
69 flat in int ok_to_fs;
71 void main()
73   if (ok_to_fs != 0)
74     gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
75   else
76     gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
79 [vertex data]
80 vertex/float/2  offset/float/1
81 -1.0 -1.0       1.0
82  1.0 -1.0       2.0
83  1.0  1.0       3.0
84 -1.0  1.0       4.0
86 [test]
87 draw arrays GL_TRIANGLE_FAN 0 4
88 probe all rgba 0.0 1.0 0.0 1.0