ext_gpu_shader4: add compiler tests for everything
[piglit.git] / tests / spec / arb_geometry_shader4 / execution / clip-distance-in-bulk-read.shader_test
blob902240fe438c877e010970e95a1521f8316d8d56
1 # This test checks that the geometry shader can read an entire
2 # float[gl_MaxClipDistances] component of gl_ClipDistanceIn using a
3 # single bulk assignment.
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;
34 uniform float foo;
36 void main()
38   bool ok = true;
39   for (int i = 0; i < 3; i++) {
40     float clip_distance_copy[gl_MaxClipDistances] = gl_ClipDistanceIn[i];
42     /* Make sure the copy doesn't get optimized out */
43     clip_distance_copy[0] += foo;
45     for (int j = 0; j < gl_MaxClipDistances; j++) {
46       if (clip_distance_copy[j] != offset_to_gs[i] + float(j))
47         ok = false;
48     }
49   }
50   for (int i = 0; i < 3; i++) {
51     gl_Position = gl_PositionIn[i];
52     ok_to_fs = int(ok);
53     EmitVertex();
54   }
57 [geometry layout]
58 input type GL_TRIANGLES
59 output type GL_TRIANGLE_STRIP
60 vertices out 3
62 [fragment shader]
63 #version 130
65 flat in int ok_to_fs;
67 void main()
69   if (ok_to_fs != 0)
70     gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
71   else
72     gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
75 [vertex data]
76 vertex/float/2  offset/float/1
77 -1.0 -1.0       1.0
78  1.0 -1.0       2.0
79  1.0  1.0       3.0
80 -1.0  1.0       4.0
82 [test]
83 uniform float foo 0.0
84 draw arrays GL_TRIANGLE_FAN 0 4
85 probe all rgba 0.0 1.0 0.0 1.0