ext_gpu_shader4: add compiler tests for everything
[piglit.git] / tests / spec / arb_tessellation_shader / execution / variable-indexing / tcs-output-array-vec2-index-wr.shader_test
blob6d8bc59f2e45363023e35e76817c2f41d1f7d602
1 [require]
2 GLSL >= 1.50
3 GL_ARB_tessellation_shader
5 [vertex shader]
6 #version 150
8 in vec4 piglit_vertex;
10 void main()
12     gl_Position = piglit_vertex;
15 [tessellation control shader]
16 #version 150
17 #extension GL_ARB_tessellation_shader : require
18 layout(vertices = 4) out;
20 uniform int index;
21 out block {
22   vec2 m1[16];
23   vec2 m2[15];
24 } var[];
26 void main()
28     for (int i = 0; i < 16; i++)
29         var[gl_InvocationID].m1[i] = vec2(1.0, 1.1) + vec2(i);
31     for (int i = 0; i < 15; i++)
32         var[gl_InvocationID].m2[i] = vec2(1.0, 1.1) + vec2(16+i);
34     if (index >= 16)
35         var[gl_InvocationID].m2[index-16] = vec2(0.0, 0.1);
36     else
37         var[gl_InvocationID].m1[index] = vec2(0.0, 0.1);
39     gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
40     gl_TessLevelOuter = float[4](1.0, 1.0, 1.0, 1.0);
41     gl_TessLevelInner = float[2](1.0, 1.0);
44 [tessellation evaluation shader]
45 #version 150
46 #extension GL_ARB_tessellation_shader : require
47 layout(quads, equal_spacing) in;
49 uniform int index;
50 in block {
51     vec2 m1[16];
52     vec2 m2[15];
53 } var[];
54 out vec4 fscolor;
56 #define INTERP_QUADj(TYPE, INj, OUT) do { \
57     TYPE v[4]; \
58     for (int j = 0; j < 4; j++) v[j] = INj; \
59     OUT = mix(mix(v[0], v[1], gl_TessCoord[0]), mix(v[2], v[3], gl_TessCoord[0]), \
60               gl_TessCoord[1]); \
61 } while(false)
63 void main() {
64     bool pass = true;
66     for (int i = 0; i < 16; i++) {
67         vec2 x;
69         INTERP_QUADj(vec2, var[j].m1[i], x);
70         pass = pass && x == (index == i ?
71                              vec2(0.0, 0.1) :
72                              vec2(1.0, 1.1) + vec2(i));
73     }
75     for (int i = 0; i < 15; i++) {
76         vec2 x;
78         INTERP_QUADj(vec2, var[j].m2[i], x);
79         pass = pass && x == (index == 16+i ?
80                              vec2(0.0, 0.1) :
81                              vec2(17.0, 17.1) + vec2(i));
82     }
84     fscolor = pass ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
86     INTERP_QUADj(vec4, gl_in[j].gl_Position, gl_Position);
89 [fragment shader]
90 #version 150
91 in vec4 fscolor;
92 out vec4 outcolor;
94 void main()
96     outcolor = fscolor;
99 [test]
100 clear color 0.5 0.5 0.5 0.5
101 clear
103 patch parameter vertices 4
105 uniform int index 0
106 draw rect patch -1 -1 0.09 0.09
107 #draw arrays GL_PATCHES 0 4
108 probe rgb 6 6 0.0 1.0 0.0
110 uniform int index 1
111 draw rect patch -0.9 -1 0.09 0.09
112 probe rgb 18 6 0.0 1.0 0.0
114 uniform int index 2
115 draw rect patch -0.8 -1 0.09 0.09
116 probe rgb 31 6 0.0 1.0 0.0
118 uniform int index 3
119 draw rect patch -0.7 -1 0.09 0.09
120 probe rgb 43 6 0.0 1.0 0.0
122 uniform int index 4
123 draw rect patch -0.6 -1 0.09 0.09
124 probe rgb 56 6 0.0 1.0 0.0
126 uniform int index 5
127 draw rect patch -0.5 -1 0.09 0.09
128 probe rgb 68 6 0.0 1.0 0.0
130 uniform int index 6
131 draw rect patch -0.4 -1 0.09 0.09
132 probe rgb 81 6 0.0 1.0 0.0
134 uniform int index 7
135 draw rect patch -0.3 -1 0.09 0.09
136 probe rgb 93 6 0.0 1.0 0.0
138 uniform int index 8
139 draw rect patch -0.2 -1 0.09 0.09
140 probe rgb 106 6 0.0 1.0 0.0
142 uniform int index 9
143 draw rect patch -0.1 -1 0.09 0.09
144 probe rgb 118 6 0.0 1.0 0.0
146 uniform int index 10
147 draw rect patch 0 -1 0.09 0.09
148 probe rgb 131 6 0.0 1.0 0.0
150 uniform int index 11
151 draw rect patch 0.1 -1 0.09 0.09
152 probe rgb 143 6 0.0 1.0 0.0
154 uniform int index 12
155 draw rect patch 0.2 -1 0.09 0.09
156 probe rgb 156 6 0.0 1.0 0.0
158 uniform int index 13
159 draw rect patch 0.3 -1 0.09 0.09
160 probe rgb 168 6 0.0 1.0 0.0
162 uniform int index 14
163 draw rect patch 0.4 -1 0.09 0.09
164 probe rgb 181 6 0.0 1.0 0.0
166 uniform int index 15
167 draw rect patch 0.5 -1.0 0.09 0.09
168 probe rgb 193 6 0.0 1.0 0.0
170 uniform int index 16
171 draw rect patch -1 -0.9 0.09 0.09
172 probe rgb 6 18 0.0 1.0 0.0
174 uniform int index 17
175 draw rect patch -0.9 -0.9 0.09 0.09
176 probe rgb 18 18 0.0 1.0 0.0
178 uniform int index 18
179 draw rect patch -0.8 -0.9 0.09 0.09
180 probe rgb 31 18 0.0 1.0 0.0
182 uniform int index 19
183 draw rect patch -0.7 -0.9 0.09 0.09
184 probe rgb 43 18 0.0 1.0 0.0
186 uniform int index 20
187 draw rect patch -0.6 -0.9 0.09 0.09
188 probe rgb 56 18 0.0 1.0 0.0
190 uniform int index 21
191 draw rect patch -0.5 -0.9 0.09 0.09
192 probe rgb 68 18 0.0 1.0 0.0
194 uniform int index 22
195 draw rect patch -0.4 -0.9 0.09 0.09
196 probe rgb 81 18 0.0 1.0 0.0
198 uniform int index 23
199 draw rect patch -0.3 -0.9 0.09 0.09
200 probe rgb 93 18 0.0 1.0 0.0
202 uniform int index 24
203 draw rect patch -0.2 -0.9 0.09 0.09
204 probe rgb 106 18 0.0 1.0 0.0
206 uniform int index 25
207 draw rect patch -0.1 -0.9 0.09 0.09
208 probe rgb 118 18 0.0 1.0 0.0
210 uniform int index 26
211 draw rect patch 0 -0.9 0.09 0.09
212 probe rgb 131 18 0.0 1.0 0.0
214 uniform int index 27
215 draw rect patch 0.1 -0.9 0.09 0.09
216 probe rgb 143 18 0.0 1.0 0.0
218 uniform int index 28
219 draw rect patch 0.2 -0.9 0.09 0.09
220 probe rgb 156 18 0.0 1.0 0.0
222 uniform int index 29
223 draw rect patch 0.3 -0.9 0.09 0.09
224 probe rgb 168 18 0.0 1.0 0.0
226 uniform int index 30
227 draw rect patch 0.4 -0.9 0.09 0.09
228 probe rgb 181 18 0.0 1.0 0.0