Add more structure constructor tests.
[piglit/hramrach.git] / tests / glslparsertest / shaders / CorrectConstFolding2.vert
blob04ab4302ad780e81f2c56cfa8edf6e4564d5bfda
1 void main()\r
2 {\r
3     const struct s {\r
4         int i;\r
5         float j;\r
6         struct s5 {\r
7            float k;\r
8            } s55;\r
9     } ss = s(4,1.0, s5(1.0));\r
12    const struct s2 { \r
13        int i;\r
14        vec3 v3; \r
15        bvec4 bv4;\r
16    } s22  = s2(8, vec3(9, 10, 11), bvec4(true, false, true, false));\r
18    const struct s1 {\r
19       s2 ss;\r
20       int i;\r
21       float f;\r
22       mat4 m;\r
23       struct s4 {\r
24           int ii;\r
25           vec4 v4;\r
26       } s44;\r
27    } s11 = s1(s22, 2, 4.0, mat4(5), s4(6, vec4(7, 8, 9, 10))) ;\r
30    const struct s7 {\r
31        int i;\r
32        mat3 m3;\r
33    } s77 = s7(12, mat3(15));\r
35   vec2       v21 = vec2(1);  // Not a constant \r
36   const vec2 v22 = vec2(11); // 11.0, 11.0\r
37   const vec4 v41 = vec4(2);  // 2.0, 2.0, 2.0, 2.0\r
38   const vec4 v43 = vec4(4,4,4,4); // 4.0, 4.0, 4.0, 4.0\r
39   const vec4 v44 = vec4(5.0, 5.0, 5.0, 5.0); // 5.0, 5.0, 5.0, 5.0\r
40   const vec4 v45 = vec4(v22, v22);  // 11.0, 11.0, 11.0, 11.0\r
41   const vec4 v46 = vec4(vec2(20, 21), vec2(22, 23));  // 20.0, 21.0, 22.0, 23.0\r
43   const vec3 v31 = vec3(s22.v3);  // 9.0, 10.0, 11.0\r
44   const vec3 v32 = vec3(s77.m3);  // 15.0, 0, 0 \r
45   const vec3 v33 = vec3(s77.m3[2]); // 0, 0, 15.0\r
46   const vec3 v34 = vec3(s77.m3[2][0]);  // 0,0,0\r
48   \r
49   const mat4 m41 = mat4(1);  // 1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1\r
50   const mat4 m42 = mat4(v44, v44, v44, v44);  // all 5s\r
51   const mat4 m43 = mat4( v43.x);  // 4,0,0,0,0,4,0,0,0,0,0,4,0,0,0,0,0,4\r
53   const vec4 v47 = vec4(m41[0][0]);  // 1.0,1.0,1.0,1.0\r
55   const mat4 m45 = mat4(s22.v3, v44, v45, v32, 50, 52);  //9,10,11,5,5,5,5,11,11,11,11,15.0, 0,0, 50.0, 52.0 \r
56   //const mat3 m31 = mat3(1, mat2(1), 2.0, vec3(1));  // 1.0, 1,0,0,1,2,1,1,1\r
57   const vec4 v48 = vec4(v31[0], v22[1], v41[0], v43[3]);  //9, 11, 2, 4\r
58   const vec4 v49 = vec4(s22.v3.xy, s22.v3.zx); // 9,10,11,9\r
59   const vec4 v410 = vec4(v44.xy, v43.zx);  //5,5,4,4\r
61   const vec4 v411 = vec4(m42[3]);  // 5,5,5,5\r
62   const vec4 v412 = vec4(m43[2]);  // 0,0,4,0\r
64   const vec2 v23 = vec2(m41);  // 1,0\r
65   \r
66   const vec2 v24 = vec2(33, s11.i);  // 33, 2\r
68   const vec4 v413 = vec4(vec2(1.0,2.0),ivec2(3.0,4.0));  // 1,2,3,4 \r
69   const ivec4 i41 = ivec4(1.0, 2.0, 3.0, 4.0);  // 1,2,3,4\r
70   \r
71   const ivec4 i42 = ivec4(6);  // 6,6,6,6\r
72   const ivec4 i43 = ivec4(v45);  //11,11,11,11\r
74   const ivec4 i44 = ivec4(v44[0]);  // 5,5,5,5\r
75   const ivec4 i45 = ivec4(vec2(20, 21), vec2(22, 23));  // 20, 21, 22, 23\r
76   const vec4 v414 = vec4(ivec2(29, 30), ivec2(31, 32)); // 29.0, 30.0, 31.0, 32.0 \r
77   const ivec4 i46 = ivec4(ivec2(2.0,3.0), ivec3(4.0,5.0,6.0));\r
78   const ivec4 i47 = ivec4(i46);  // 2,3,4,5\r
79   const ivec4 i48 = ivec4(v414.x);  // 29,29,29,29\r
81   const ivec4 i49 = ivec4(vec4(1)); // 1,1,1,1\r
82   const ivec4 i414 = ivec4(mat4(14)); // 14, 0,0,0,\r
83   const ivec4 i410 = ivec4(m43);  // 4,0,0,0\r
84   const ivec4 i411 = ivec4(m43[1]);  // 0, 4, 0, 0\r
85   const ivec4 i412 = ivec4(s77.i); // 12, 12, 12, 12\r
86   const ivec4 i416 = ivec4(s22.v3.zyx, 12);  // 11, 10, 9, 12\r
88   const vec4 v415 = vec4(ivec2(35), ivec2(36)); // 35.0, 35.0 ,36.0 , 36.0 \r
90   const bvec4 b41 = bvec4(1.0, 2.0, 3.0, 4.0);  // true,true,true,true\r
91   \r
92   const bvec4 b42 = bvec4(6);  // true,true,true,true\r
93   const bvec4 b43 = bvec4(v45);  //true,true,true,true\r
95   const bvec4 b44 = bvec4(v44[0]);  // true,true,true,true\r
96   const bvec4 b45 = bvec4(vec2(0, 21), vec2(0, 1));  // false, true, false, true\r
97   const bvec4 b46 = bvec4(ivec2(0.0,3.0), ivec3(0,5.0,6.0)); // false, true, false, true\r
98   const bvec4 b47 = bvec4(i46);  // true,true,true,true\r
99   const bvec4 b48 = bvec4(v414.x);  // true,true,true,true\r
101   const bvec4 b49 = bvec4(vec4(0)); // false,false,false,false\r
102   const bvec4 b414 = bvec4(mat4(14)); // true, false,false,false,\r
103   const bvec4 b410 = bvec4(m43);  // true,false,false,false\r
104   const bvec4 b411 = bvec4(m43[1]);  // false, true, false, false\r
105   const bvec4 b412 = bvec4(s77.i) ; // true, true, true, true\r
107   const vec3 v35 = vec3(s11.s44.v4);  // 7.0,8.0,9.0\r
109   const struct s8 {\r
110       int i;\r
111       struct s9 {\r
112           float f;\r
113           struct s10 {\r
114               int k;\r
115           } s101;\r
116       } s99; \r
117   } s88 = s8(1, s9(2.0, s10(5)));\r
119   const struct st1 {\r
120       int i;\r
121       struct st2 {\r
122           float f;\r
123           struct st3 {\r
124               int k;\r
125               int l;\r
126               struct st4 {\r
127                   int m;\r
128                   vec3 v3;\r
129               } st44;\r
130           } st33;\r
131       } st22; \r
132   } st11 = st1(1, st2(2.0, st3(5, 6, st4(7, v35))));\r
134   const vec4 v416 = vec4(s88.s99.s101.k); // all 5s\r
135   const vec4 v417 = vec4(st11.st22.st33.st44.v3, s88.s99.s101.k);  // 7.0, 8.0, 9.0, 5.0\r
136   const vec3 v36 = vec3(s11.ss.v3);  // 9, 10, 11\r
138   vec4 v418 = v416;  // all 5s\r
139   const float f1 = v416[0];  // 5.0\r
140   vec4 v419;\r
141   v419.xyz = st11.st22.st33.st44.v3;\r
142   mat4 m47;\r
144   struct struct2 {\r
145       int k;\r
146   } struct22 = struct2(4);\r
148   const struct struct1 {\r
149        struct2 sst2;\r
150   } struct11 = struct1(struct2(2));\r
152   const vec4 v420 = v417;  // 7.0, 8.0, 9.0 , 5.0\r
153   \r
154   vec4 v421 = vec4(s11.m);  // 5, 0, 0, 0\r
155   vec4 v422 = v420;  // 7.0, 8.0, 9.0 , 5.0\r
157   vec4 v423 = s11.s44.v4;   // 7, 8, 9, 10\r
158   \r
159   int int1 = ss.i * ss.i;  // 16\r
160   int int2 = ss.i * 2;  // 8\r
162   const vec4 v425 = v420 * v420;  // 49, 64, 81, 25\r
163   const vec4 v426 = s11.m * s11.s44.v4; // 35, 40, 45, 50\r
164   const vec4 v427 = s11.s44.v4 * s11.m; // 35, 40, 45, 50\r
165   \r
166   float ff = 2.0; \r
167   const float ffConst = 2.0;\r
168   \r
169   vec4 v428 = ff + v425;  // ordinary assignment with binary node\r
170   vec3 v39 = vec3(5);\r
172   vec3 v310 = s22.v3 + v39;  //14, 15, 16\r
174   const vec4 v429 = v420 + v420; // 14, 16, 18, 10\r
175   const vec4 v430 = v420 + ffConst;  // 9, 10, 11,7 \r
176   const vec4 v432 =  v429 + s11.f;  // 18, 20, 22, 14\r
178   const vec4 v433 = vec4(s11.f + s11.f);  // all 8s\r
179   const vec4 v434 = v432 + vec4(3);  // 21, 23, 25, 17\r
180   const mat4 m48 = s11.m + ffConst;  // diagonal 7s and others 2s\r
181   const mat4 m49 = mat4(ffConst + s11.f);  // diagonal 6s\r
182   const mat4 m410 = m48 + s11.f;  // diagonal 11, others - 6s\r
184   const mat4 m413 = m48 + m48 ; // diagonal 14, others 4\r
185   const mat4 m414 = m413 + ffConst ; // diagonal 16, others 6 \r
187   const vec4 v435 = ffConst + v420;  // 9, 10, 11,7 \r
188   const vec4 v436 =  s11.f + v429;  // 18, 20, 22, 14\r
189   const mat4 m415 = ffConst + s11.m;  // diagonal 7s and others 2s\r
190   const mat4 m416 = s11.f + m48 ;  // diagonal 11, others - 6s\r
191   const mat4 m417 = ffConst + m413 ; // diagonal 16, others 6 \r
193   const vec4 v437 = v420 - v420; // 0, 0, 0, 0\r
194   const vec4 v438 = v420 - ffConst;  // 5, 6, 7,3 \r
195   const vec4 v440 =  v429 - s11.f;  // 10, 12, 14, 6\r
197   const vec4 v441 = vec4(s11.f - s11.f);  // all 0s\r
198   const vec4 v442 = v432 - vec4(3);  // 15, 17, 19, 11\r
199   const mat4 m418 = s11.m - ffConst;  // diagonal 3s and others -2s\r
200   const mat4 m419 = mat4(ffConst - s11.f);  // diagonal -> -2s\r
201   const mat4 m420 = m48 - s11.f;  // diagonal 3, others -> -2\r
203   const mat4 m423 = m48 - m48 ; // All 0s\r
204   const mat4 m424 = m413 - ffConst ; // diagonal 12, others 2 \r
206   const vec4 v443 = ffConst - v420;  // -5, -6, -7,-3 \r
207   const vec4 v444 =  s11.f - v429;  // -10, -12, -14, -6\r
208   const mat4 m425 = ffConst - s11.m;  // diagonal -3s and others 2s\r
209   const mat4 m426 = s11.f - m48 ;  // diagonal -3, others  2s\r
210   const mat4 m427 = ffConst - m413 ; // diagonal -12, others -2 \r
212   const vec4 v445 = v420 * v420; // 49, 64, 81, 25\r
213   const vec4 v446 = v420 * ffConst;  // 14, 16, 18,10 \r
214   const vec4 v448 =  v429 * s11.f;  // 56, 46, 72, 40\r
216   const vec4 v449 = vec4(s11.f * s11.f);  // all 16\r
217   const vec4 v450 = v432 * vec4(3);  // 54, 60, 66, 42\r
218   const mat4 m428 = s11.m * ffConst;  // diagonal 10 and others 0s\r
219   const mat4 m429 = mat4(ffConst * s11.f);  // diagonal 8\r
220   const mat4 m430 = m48 * s11.f;  // diagonal 28, others 8\r
222   const mat4 m433 = m48 * m48 ; // diagonal 61, others 36\r
223   const mat4 m434 = m413 * ffConst ; // diagonal 28, others 8 \r
225   const vec4 v451 = ffConst * v420;  // 14, 16, 18,10 \r
226   const vec4 v452 =  s11.f * v429;  // 56, 64, 72, 40\r
227   const mat4 m435 = ffConst * s11.m;  //  diagonal 10 and others 0s\r
228   const mat4 m436 = s11.f * m48 ;  // diagonal 28, others - 8s\r
229   const mat4 m437 = ffConst * m413 ; // diagonal 28, others 8\r
231   const vec4 v453 = v420 / v420; // 1, 1, 1, 1\r
232   const vec4 v454 = v420 / ffConst;  // 3.5, 4, 4.5,2.5 \r
234   const vec4 v457 = vec4(s11.f / s11.f);  // all 1s\r
235   const vec4 v458 = v432 / vec4(3);  // 6, 6.6666, 7.333, 4.6666\r
236   const mat4 m438 = s11.m / ffConst;  // diagonal 2.5 and others 0s\r
237   const mat4 m439 = mat4(ffConst / s11.f);  // diagonal 0.5s\r
238   const mat4 m440 = m48 / s11.f;  // diagonal 1.75, others 0.5s \r
240   const mat4 m443 = m48 / m48 ; // All 1s\r
241   const mat4 m444 = m413 / ffConst ; // diagonal 7, others 2 \r
243   const vec4 v459 = ffConst / v420;  // .2857 , .25, .22, .4\r
244   const vec4 v460 =  s11.f / v429;  // .2857, .25, .22, .4\r
245   //const mat4 m445 = ffConst / s11.m;  // divide by zero error\r
246   const mat4 m446 = s11.f / m48 ;  // diagonal .571,  others 2\r
247   const mat4 m447 = ffConst / m413 ; // diagonal .1428, others 0.5\r
249   const vec4 v461 = v453 * m428; // 10, 10, 10, 10\r
250   const vec4 v462 = v453 * m437; // 52, 52, 52, 52\r
251   const vec4 v463 = m428 * v451; // 140, 160, 180, 100\r
252   const vec4 v464 = m437 * v451; // 744, 784, 824, 664\r
254   int ii = 2; \r
255   const int iiConst = 2;\r
257   const ivec4 i420 = ivec4( 7,8,9,5);  // 7, 8, 9, 5\r
259   const ivec4 i429 = i420 + i420; // 14, 16, 18, 10\r
260   const ivec4 i430 = i420 + iiConst;  // 9, 10, 11,7 \r
261   const ivec4 i432 =  i429 + ss.i;  // 18, 20, 22, 14\r
263   const ivec4 i433 = ivec4(ss.i + ss.i);  // all 8s\r
265   const ivec4 i435 = iiConst + i420;  // 9, 10, 11,7 \r
266   const ivec4 i436 =  ss.i + i429;  // 18, 20, 22, 14\r
268   const ivec4 i437 = i420 - i420; // 0, 0, 0, 0\r
269   const ivec4 i438 = i420 - iiConst;  // 5, 6, 7,3 \r
270   const ivec4 i440 =  i429 - ss.i;  // 10, 12, 14, 6\r
272   const ivec4 i441 = ivec4(ss.i - ss.i);  // all 0s\r
274   const ivec4 i443 = iiConst - i420;  // -5, -6, -7,-3 \r
275   const ivec4 i444 =  ss.i - i429;  // -10, -12, -14, -6\r
277   const ivec4 i445 = i420 * i420; // 49, 64, 81, 25\r
278   const ivec4 i446 = i420 * iiConst;  // 14, 16, 18,10 \r
279   const ivec4 i448 =  i429 * ss.i;  // 56, 64, 72, 40\r
281   const ivec4 i449 = ivec4(ss.i * ss.i);  // all 16\r
283   const ivec4 i451 = iiConst * i420;  // 14, 16, 18,10 \r
284   const ivec4 i452 =  ss.i * i429;  // 56, 64, 72, 40\r
286   const ivec4 i453 = i420 / i420; // 1, 1, 1, 1\r
287   const ivec4 i454 = i420 / iiConst;  // 3, 4, 4,2 \r
288   const ivec4 i456 =  i429 / ss.i;  // 3, 4, 4, 2\r
290   const ivec4 i457 = ivec4(ss.i / ss.i);  // all 1s\r
292   const ivec4 i459 = iiConst / i420;  // 0 , 0, 0,0 \r
293   const ivec4 i460 =  ss.i / i429;  // 0, 0, 0,0 \r
295   const bvec4 b424 = bvec4(s22.bv4);\r
297   const bool b1 = s22.bv4 == b424;  // true\r
298   const bool b2 = i420 == i420;  // true\r
299   const bool b3 = i420 == i445;  // false\r
300   const bool b4 = v420 == v420;  // true\r
301   const bool b5 = m430 == m434; // true\r
303   const vec4 v465 = -v420; // -7, -8, -9, -5\r
304   const mat4 m448 = -m447 ; // diagonal -.1428, others -0.5\r
305   const ivec4 i465 = -i456 ;  // -3, -4, -4,-2 \r
307   const bool b7 = s22 == s22;\r
309   const vec4 v466 = v432 + vec4(3,4,5,6);  // 21, 24, 27, 20\r
310   const vec4 v467 = v432 + vec4(vec2(3,4),5,6);  // 21, 24, 27, 20\r
311   const vec4 v468 = v432 + vec4(3, vec2(4, 5),vec2(6,7));  // 21, 24, 27, 20\r
312   const vec4 v469 = vec4(v468) + vec4(3) + v468 + vec4(s77.m3[2][0]); // 45, 51, 57, 43\r
314   const bool b8 = ss == ss;  // true\r
316   struct st5 {\r
317       int i;\r
318       float f;\r
319       struct st6 {\r
320           vec3 v;\r
321       } st66;\r
322   } st55;\r
324   const st5 st551 = st5(2, 4.0, st6(vec3(7)));\r
325   const st5 st552 = st5(2, 4.0, st6(vec3(7)));\r
327   const bool b10 = st551 == st552;  // true\r
329   const bool b11 = st551.st66 == st552.st66;  // true\r
331   const st5 st553 = st5(2, 4.0, st6(vec3(8)));\r
333   const bool b12 = st551.st66 == st553.st66;  // false\r
334   const bool b13 = st551 == st553;  // false\r
336   const bool b14 = st551 != st552;  // false\r
337   const bool b15 = st551.st66 != st552.st66;  // false\r
338   const bool b16 = st551.st66 != st553.st66;  // true\r
339   const bool b17 = st551 != st553;  // true\r
341   const bool b18 = s22.bv4 != b424;  // false\r
342   const bool b19 = i420 != i420;  // false\r
343   const bool b20 = i420 != i445;  // true\r
344   const bool b21 = v420 != v420;  // false\r
345   const bool b22 = m430 != m434; // false\r
347   const int int10 = i420.xy.y;  // 8\r
349   //float f = v470.x;\r
353   const int int13 = -ss.i;\r
354   \r
355   const vec4 v474 = -vec4(0.5);\r
357   int int14 = ii++;\r
358   int array[3];\r
359   array[2];\r
361   const vec4 v478 = v466 * 2.0; // 42, 48, 54, 40\r
363   const vec4 v479 = iiConst > 1 ? v466 : v478; // 21, 24, 27, 20\r
365   const struct st7 { \r
366        int i; \r
367        bool b;\r
368   } st77 = st7(ss.i, true);\r
370   const vec4 v481 = vec4(st77.i);\r
372   const struct st8 {\r
373       int i;\r
374   } ;\r
377   const struct st9 {\r
378       s2 ss;\r
379   } st99 = st9(s22);\r
381   const vec3 v312 = st99.ss.v3;   // 9, 10, 11\r
382   const vec4 v482 = mat4(1)[0];  // 1, 0, 0 , 0\r
383   \r
384   const mat4 m450 = mat4(ss.i);  // mat4(4)\r
385   const mat4 m451 = mat4(b20);   // mat4(1)\r
386   const mat4 m452 = mat4(st77.b); // mat4(1)\r
388   const vec4 v483 = vec4(vec4(3).x);  // 3,3,3,3\r
389   const mat4 m453 = mat4(vec4(5).x);  // mat5(5)\r
391   const vec4 v484 = vec4(mat4(6)[1]);  // 0,6,0,0\r
392   const mat4 m454 = mat4(mat4(6)[1][1]);  // mat4(6)\r
394   const vec4 v485 = vec4(st7(8, true).b);  // 1,1,1,1\r
396   const vec4 v487 = vec4(vec4(12, 13, 14, 15).wy, 12, 14);\r
398   int i20 = ss.i;\r
399   const vec4 v489 = -vec4(7,8,9,5); // -7, -8, -9, -5\r
401   gl_Position = vec4(1);\r