ext_gpu_shader4: add compiler tests for everything
[piglit.git] / tests / spec / arb_geometry_shader4 / execution / clip-distance-bulk-copy.shader_test
blob7817e438edcc0d7232eed99d416ffd9468c89523
1 # This test checks that the geometry shader can perform a bulk
2 # assignment of an entire float[8] component of gl_ClipDistanceIn to
3 # gl_ClipDistance.
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[8];
18 void main()
20   gl_Position = vertex;
21   offset_to_gs = offset;
22   for (int i = 0; i < 8; 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][8];
33 out float offset_to_fs;
34 out float gl_ClipDistance[8];
36 void main()
38   bool ok = true;
39   for (int i = 0; i < 3; i++) {
40     gl_Position = gl_PositionIn[i];
41     gl_ClipDistance = gl_ClipDistanceIn[i];
42     offset_to_fs = offset_to_gs[i];
43     EmitVertex();
44   }
47 [geometry layout]
48 input type GL_TRIANGLES
49 output type GL_TRIANGLE_STRIP
50 vertices out 3
52 [fragment shader]
53 #version 130
55 in float gl_ClipDistance[8];
56 in float offset_to_fs;
58 void main()
60   bool ok = true;
61   for (int i = 0; i < 8; i++) {
62     if (distance(gl_ClipDistance[i], offset_to_fs + float(i)) > 1e-6)
63       ok = false;
64   }
65   if (ok)
66     gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
67   else
68     gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
71 [vertex data]
72 vertex/float/2  offset/float/1
73 -1.0 -1.0       1.0
74  1.0 -1.0       2.0
75  1.0  1.0       3.0
76 -1.0  1.0       4.0
78 [test]
79 # Since the fragment shader's gl_ClipDistance array is only defined
80 # for elements that have clipping enabled, we need to enable all 8
81 # clip planes.  Fortunately the values we use for gl_ClipDistance are
82 # always positive, so no pixels are actually clipped.
83 enable GL_CLIP_PLANE0
84 enable GL_CLIP_PLANE1
85 enable GL_CLIP_PLANE2
86 enable GL_CLIP_PLANE3
87 enable GL_CLIP_PLANE4
88 enable GL_CLIP_PLANE5
89 enable GL_CLIP_PLANE6
90 enable GL_CLIP_PLANE7
91 draw arrays GL_TRIANGLE_FAN 0 4
92 probe all rgba 0.0 1.0 0.0 1.0