ext_gpu_shader4: add compiler tests for everything
[piglit.git] / tests / spec / arb_geometry_shader4 / execution / texcoord-non-constant-indices.shader_test
blob9628a43d99b746c14da640fa3892519d4aefc1df
1 # Test accessing glTexCoordIn with redeclaration (with explicit size) and with
2 # non-constant indices.
4 # From the ARB_geometry_shader4 spec (section ):
5 # "Indices used to subscript gl_TexCoord must either be an integral constant
6 # expressions, or this array must be re-declared by the shader with a size."
8 # And from the GLSL 1.1 spec page 99 (page 105 of the PDF):
9 # "Multiple modules can declare it [gl_TexCoord] with different sizes, the
10 # maximum will be used at link time."
11 [require]
12 GL >= 2.0
13 GLSL >= 1.10
14 GL_ARB_geometry_shader4
16 [vertex shader]
17 #version 110
19 uniform int zero;
20 uniform int one;
21 uniform int two;
23 attribute vec4 vertex;
24 attribute float offset;
26 varying float gs_offset;
27 varying vec4 gl_TexCoord[3];
29 void main()
31         gl_TexCoord[zero] = vec4(offset + float(0));
32         gl_TexCoord[one] = vec4(offset + float(1));
33         gl_TexCoord[two] = vec4(offset + float(2));
35         gs_offset = offset;
36         gl_Position = vertex;
39 [geometry shader]
40 #version 110
41 #extension GL_ARB_geometry_shader4: enable
43 uniform int zero;
44 uniform int one;
46 varying in float gs_offset[];
47 varying in vec4 gl_TexCoordIn[][2];
49 varying out float fs_ok;
51 void main()
53         bool ok = true;
55         if (gl_TexCoordIn[0][zero] != vec4(gs_offset[0] + float(0)))
56                 ok = false;
57         if (gl_TexCoordIn[0][one] != vec4(gs_offset[0] + float(1)))
58                 ok = false;
59         if (gl_TexCoordIn[1][zero] != vec4(gs_offset[1] + float(0)))
60                 ok = false;
61         if (gl_TexCoordIn[1][one] != vec4(gs_offset[1] + float(1)))
62                 ok = false;
63         if (gl_TexCoordIn[2][zero] != vec4(gs_offset[2] + float(0)))
64                 ok = false;
65         if (gl_TexCoordIn[2][one] != vec4(gs_offset[2] + float(1)))
66                 ok = false;
68         for (int i = 0; i < 3; ++i) {
69                 fs_ok = float(ok);
70                 gl_Position = gl_PositionIn[i];
71                 EmitVertex();
72         }
75 [geometry layout]
76 input type GL_TRIANGLES
77 output type GL_TRIANGLE_STRIP
78 vertices out 3
80 [fragment shader]
81 #version 110
83 varying float fs_ok;
85 void main()
87         if (distance(fs_ok, 1.0) < 1e-6)
88                 gl_FragColor = vec4(0, 1, 0, 1);
89         else
90                 gl_FragColor = vec4(1, 0, 0, 1);
93 [vertex data]
94 vertex/float/2  offset/float/1
95 -1.0 -1.0       1.0
96  1.0 -1.0       2.0
97  1.0  1.0       3.0
98 -1.0  1.0       4.0
100 [test]
101 uniform int zero 0
102 uniform int one 1
103 uniform int two 2
104 draw arrays GL_TRIANGLE_FAN 0 4
105 probe all rgb 0 1 0