1 #X1. Type: float[5] // An array type with 5 elements
2 #X2. Return value: float[5] func() { ... } // Function with a 5-element array return value
3 #X3. Array constructor: float[3] (1.0, 2.0, 5.5) // 3-element array with given elements
4 # // Fails with array of matrices!
5 #X4. As unnamed parameter: void func(float[5]);
6 #X5. Variable declaration: float[5] a; // Equivalent to float a[5]; (?)
7 #X6. Empty brackets: float x[] = float[] (1.0, 2.0, 3.0); // Size of x is 3
8 # float y[] = float[3] (1.0, 2.0, 3.0); // Size of y is 3 (equivalent)
9 # float z[] = y; // Size of z is 3
10 #X7. Testing that 2-dimensional arrays don't work: float a[5][3]; // Illegal
11 # float[5] a[3]; // Illegal
12 #X8. Testing that array declaration with dynamic variables as array size won't work.
13 #X9. Testing length() operator: z.length(); // Returns 3 for z defined before
14 #X10. Test C/C++ style {}-constructor
15 #X11. Test struct arrays
16 #X12. Test array element access at initialization with const/dynamic values
18 group constructor "Array constructors"
24 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
25 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
30 precision mediump float;
37 x = float[3] (in0.z, in0.x, in0.y);
38 out0 = vec3(x[0], x[1], x[2]);
48 input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 0.2) | vec4(7.4, -1.0, 2.0, -1.3) | vec4(3.0, 1.6, -2.0, 0.5) ];
49 output vec4 out0 = [ vec4(2.0, 0.5, 0.2, 1.0) | vec4(2.0, 7.4, -1.3, -1.0) | vec4(-2.0, 3.0, 0.5, 1.6) ];
54 precision mediump float;
61 x = float[4] (in0.z, in0.x, in0.w, in0.y);
62 out0 = vec4(x[0], x[1], x[2], x[3]);
72 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
73 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
78 precision mediump int;
79 precision mediump float;
86 x = int[3] (in0.z, in0.x, in0.y);
87 out0 = ivec3(x[0], x[1], x[2]);
97 input ivec4 in0 = [ ivec4(0, 1, 2, 0) | ivec4(7, -1, 2, -1) | ivec4(3, 1, -2, 0) ];
98 output ivec4 out0 = [ ivec4(2, 0, 0, 1) | ivec4(2, 7, -1, -1) | ivec4(-2, 3, 0, 1) ];
103 precision mediump int;
104 precision mediump float;
111 x = int[4] (in0.z, in0.x, in0.w, in0.y);
112 out0 = ivec4(x[0], x[1], x[2], x[3]);
122 input bvec3 in0 = [ bvec3(true, true, false) ];
123 output bvec3 out0 = [ bvec3(false, true, true) ];
128 precision mediump float;
135 x = bool[3] (in0.z, in0.x, in0.y);
136 out0 = bvec3(x[0], x[1], x[2]);
146 input bvec4 in0 = [ bvec4(true, true, false, false) ];
147 output bvec4 out0 = [ bvec4(false, true, true, false) ];
152 precision mediump float;
159 x = bool[4] (in0.z, in0.x, in0.y, in0.w);
160 out0 = bvec4(x[0], x[1], x[2], x[3]);
170 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
171 output vec3 out0 = [ vec3(2.0, -0.5, -1.0) ];
176 precision mediump float;
191 test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
192 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
193 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
195 test[3] x = test[3] (a, b, c);
197 out0 = vec3(x[0].f, x[1].v.y, x[2].v.x);
207 input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 1.5) ];
208 output vec4 out0 = [ vec4(2.0, -0.5, -1.0, -1.5) ];
213 precision mediump float;
228 test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
229 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
230 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
231 test d = test(-in0.w, vec3(-in0.w, -in0.x, -in0.z));
233 test[4] x = test[4] (a, b, c, d);
235 out0 = vec4(x[0].f, x[1].v.y, x[2].v.x, x[3].v.x);
246 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
247 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(7.4, -2.0, -1.0) | vec3(3.0, 2.0, 1.6) ];
252 precision mediump float;
260 x = vec3[3] ( vec3(in0.x, in0.y, in0.z) ,
261 vec3(-in0.y, -in0.z, -in0.x),
262 vec3(in0.z, in0.x, in0.y) );
263 out0 = vec3(x[0].x, x[1].y, x[2].z);
273 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
274 output ivec3 out0 = [ ivec3(5, -2, 1) | ivec3(7, -2, -1) | ivec3(3, 2, 1) ];
279 precision mediump int;
280 precision mediump float;
288 x = ivec3[3] ( ivec3(in0.x, in0.y, in0.z) ,
289 ivec3(-in0.y, -in0.z, -in0.x),
290 ivec3(in0.z, in0.x, in0.y) );
291 out0 = ivec3(x[0].x, x[1].y, x[2].z);
301 input bvec3 in0 = [ bvec3(true, false, true) ];
302 output bvec3 out0 = [ bvec3(true, true, false) ];
307 precision mediump float;
315 x = bvec3[3] ( bvec3(in0.x, in0.y, in0.z) ,
316 bvec3(in0.y, in0.z, in0.x),
317 bvec3(in0.z, in0.x, in0.y) );
318 out0 = bvec3(x[0].x, x[1].y, x[2].z);
328 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
329 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
334 precision mediump float;
340 mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z,
342 in0.x, in0.y, in0.z) ,
343 mat3( in0.z, in0.x, -in0.y,
344 in0.z, in0.x, -in0.y,
345 in0.z, in0.x, -in0.y) ,
346 mat3( -in0.z, -in0.z, in0.z,
347 -in0.y, -in0.y, in0.y,
348 -in0.x, -in0.x, in0.x) );
354 float ret0 = a0[2][0];
355 float ret1 = a1[0][2];
356 float ret2 = a2[1][2];
358 out0 = vec3(ret0, ret1, ret2);
368 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
369 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
374 precision mediump int;
375 precision mediump float;
381 mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z,
383 in0.x, in0.y, in0.z) ,
384 mat3( in0.z, in0.x, -in0.y,
385 in0.z, in0.x, -in0.y,
386 in0.z, in0.x, -in0.y) ,
387 mat3( -in0.z, -in0.z, in0.z,
388 -in0.y, -in0.y, in0.y,
389 -in0.x, -in0.x, in0.x) );
395 float ret0 = a0[2][0];
396 float ret1 = a1[0][2];
397 float ret2 = a2[1][2];
399 out0 = ivec3(ret0, ret1, ret2);
409 input bvec3 in0 = [ bvec3(true, false, true) ];
410 output bvec3 out0 = [ bvec3(true, false, false) ];
415 precision mediump float;
421 mat3[3] a = mat3[3] ( mat3( in0.x, in0.y, in0.z,
423 in0.x, in0.y, in0.z) ,
424 mat3( in0.z, in0.x, in0.y,
426 in0.z, in0.x, in0.y) ,
427 mat3( in0.z, in0.z, in0.z,
429 in0.x, in0.x, in0.x) );
435 float ret0 = a0[2][0];
436 float ret1 = a1[0][2];
437 float ret2 = a2[1][2];
439 out0 = bvec3(ret0, ret1, ret2);
447 group return "Arrays as return value"
453 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
454 output vec3 out0 = [ vec3(2.0, -0.5, 1.0) | vec3(2.0, -7.4, -1.0) | vec3(-2.0, -3.0, 1.6) ];
459 precision mediump float;
462 float[3] func(vec3 a)
464 return float[3] (a.z, -a.x, a.y);
470 float[3] x = func(in0);
471 out0 = vec3(x[0], x[1], x[2]);
481 input ivec3 in0 = [ ivec3(4, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
482 output ivec3 out0 = [ ivec3(2, -4, 1) | ivec3(2, -7, -1) | ivec3(-2, -3, 1) ];
487 precision mediump int;
488 precision mediump float;
493 return int[3] (a.z, -a.x, a.y);
499 int[3] x = func(in0);
500 out0 = ivec3(x[0], x[1], x[2]);
510 input bvec3 in0 = [ bvec3(false, true, true) ];
511 output bvec3 out0 = [ bvec3(true, false, true) ];
516 precision mediump float;
519 bool[3] func(bvec3 a)
521 return bool[3] (a.z, a.x, a.y);
527 bool[3] x = func(in0);
528 out0 = bvec3(x[0], x[1], x[2]);
540 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
541 output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ];
546 precision mediump float;
549 vec3[3] func(vec3[3] a)
551 return vec3[3] (a[1], a[2], a[0]);
557 vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z) ,
558 vec3(in0.y, -in0.z, in0.x) ,
559 vec3(-in0.z, in0.x, in0.y) );
561 out0 = vec3(x[0].x, x[1].y, x[2].z);
571 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
572 output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ];
577 precision mediump float;
586 test[3] func(test[3] a)
588 return test[3] (a[1], a[2], a[0]);
595 test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
596 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
597 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
599 test[3] t = test[3] (a, b, c);
602 out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x);
612 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ];
613 output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ];
618 precision mediump int;
619 precision mediump float;
622 ivec3[3] func(ivec3[3] a)
624 return ivec3[3] (a[1], a[2], a[0]);
630 ivec3[3] x = ivec3[3]( ivec3(in0.x, in0.y, -in0.z) ,
631 ivec3(in0.y, -in0.z, in0.x) ,
632 ivec3(-in0.z, in0.x, in0.y) );
634 out0 = ivec3(x[0].x, x[1].y, x[2].z);
644 input bvec3 in0 = [ bvec3(true, false, false) ];
645 output bvec3 out0 = [ bvec3(false, true, false) ];
650 precision mediump int;
651 precision mediump float;
654 bvec3[3] func(bvec3[3] a)
656 return bvec3[3] (a[1], a[2], a[0]);
662 bvec3[3] x = bvec3[3]( bvec3(in0.x, in0.y, in0.z) ,
663 bvec3(in0.y, in0.z, in0.x) ,
664 bvec3(in0.z, in0.x, in0.y) );
666 out0 = bvec3(x[0].x, x[1].y, x[2].z);
676 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
677 output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ];
682 precision mediump float;
685 mat3[3] func(mat3[3] x)
698 a[0] = mat3(in0.x, in0.y, in0.z,
700 in0.x, in0.y, in0.z);
701 a[1] = mat3(in0.z, in0.x, -in0.y,
702 in0.z, in0.x, -in0.y,
703 in0.z, in0.x, -in0.y);
704 a[2] = mat3(-in0.z, -in0.z, in0.z,
705 -in0.y, -in0.y, in0.y,
706 -in0.x, -in0.x, in0.x);
714 float ret0 = b0[0][0];
715 float ret1 = b1[1][1];
716 float ret2 = b2[2][2];
718 out0 = vec3(ret0, ret1, ret2);
728 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ];
729 output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ];
734 precision mediump int;
735 precision mediump float;
738 mat3[3] func(mat3[3] x)
751 a[0] = mat3(in0.x, in0.y, in0.z,
753 in0.x, in0.y, in0.z);
754 a[1] = mat3(in0.z, in0.x, -in0.y,
755 in0.z, in0.x, -in0.y,
756 in0.z, in0.x, -in0.y);
757 a[2] = mat3(-in0.z, -in0.z, in0.z,
758 -in0.y, -in0.y, in0.y,
759 -in0.x, -in0.x, in0.x);
767 float ret0 = b0[0][0];
768 float ret1 = b1[1][1];
769 float ret2 = b2[2][2];
771 out0 = ivec3(ret0, ret1, ret2);
781 input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ];
782 output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ];
787 precision mediump float;
790 mat3[3] func(mat3[3] x)
803 a[0] = mat3(in0.x, in0.y, in0.z,
805 in0.x, in0.y, in0.z);
806 a[1] = mat3(in0.z, in0.x, in0.y,
808 in0.z, in0.x, in0.y);
809 a[2] = mat3(in0.z, in0.z, in0.z,
811 in0.x, in0.x, in0.x);
819 float ret0 = b0[0][0];
820 float ret1 = b1[1][1];
821 float ret2 = b2[2][2];
823 out0 = bvec3(ret0, ret1, ret2);
831 group unnamed_parameter "Array type as unnamed parameter of a function prototype"
837 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
838 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
843 precision mediump float;
846 float[3] func(float[3]);
851 float[3] a = float[3] (in0.x, in0.y, in0.z);
852 float[3] b = func(a);
853 out0 = vec3(b[0], b[1], b[2]);
857 float[3] func(float[3] a)
859 return float[3] (a[2], a[0], a[1]);
869 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
870 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
875 precision mediump int;
876 precision mediump float;
884 int[3] a = int[3] (in0.x, in0.y, in0.z);
886 out0 = ivec3(b[0], b[1], b[2]);
890 int[3] func(int[3] a)
892 return int[3] (a[2], a[0], a[1]);
902 input bvec3 in0 = [ bvec3(false, true, true) ];
903 output bvec3 out0 = [ bvec3(true, false, true) ];
908 precision mediump float;
911 bool[3] func(bool[3]);
916 bool[3] a = bool[3] (in0.x, in0.y, in0.z);
918 out0 = bvec3(b[0], b[1], b[2]);
922 bool[3] func(bool[3] a)
924 return bool[3] (a[2], a[0], a[1]);
934 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
935 output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ];
940 precision mediump float;
949 test[3] func(test[3]);
955 test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
956 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
957 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
959 test[3] t = test[3] (a, b, c);
961 out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x);
965 test[3] func(test[3] a)
967 return test[3] (a[1], a[2], a[0]);
977 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
978 output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ];
983 precision mediump float;
986 vec3[3] func(vec3[3]);
991 vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z) ,
992 vec3(in0.y, -in0.z, in0.x) ,
993 vec3(-in0.z, in0.x, in0.y) );
995 out0 = vec3(x[0].x, x[1].y, x[2].z);
999 vec3[3] func(vec3[3] a)
1001 return vec3[3] (a[1], a[2], a[0]);
1010 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ];
1011 output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ];
1016 precision mediump int;
1017 precision mediump float;
1020 ivec3[3] func(ivec3[3]);
1025 ivec3[3] x = ivec3[3]( ivec3(in0.x, in0.y, -in0.z) ,
1026 ivec3(in0.y, -in0.z, in0.x) ,
1027 ivec3(-in0.z, in0.x, in0.y) );
1029 out0 = ivec3(x[0].x, x[1].y, x[2].z);
1033 ivec3[3] func(ivec3[3] a)
1035 return ivec3[3] (a[1], a[2], a[0]);
1044 input bvec3 in0 = [ bvec3(true, false, false) ];
1045 output bvec3 out0 = [ bvec3(false, true, false) ];
1050 precision mediump int;
1051 precision mediump float;
1054 bvec3[3] func(bvec3[3]);
1059 bvec3[3] x = bvec3[3]( bvec3(in0.x, in0.y, in0.z) ,
1060 bvec3(in0.y, in0.z, in0.x) ,
1061 bvec3(in0.z, in0.x, in0.y) );
1063 out0 = bvec3(x[0].x, x[1].y, x[2].z);
1067 bvec3[3] func(bvec3[3] a)
1069 return bvec3[3] (a[1], a[2], a[0]);
1079 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
1080 output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ];
1085 precision mediump float;
1088 mat3[3] func(mat3[3]);
1094 a[0] = mat3(in0.x, in0.y, in0.z,
1095 in0.x, in0.y, in0.z,
1096 in0.x, in0.y, in0.z);
1097 a[1] = mat3(in0.z, in0.x, -in0.y,
1098 in0.z, in0.x, -in0.y,
1099 in0.z, in0.x, -in0.y);
1100 a[2] = mat3(-in0.z, -in0.z, in0.z,
1101 -in0.y, -in0.y, in0.y,
1102 -in0.x, -in0.x, in0.x);
1110 float ret0 = b0[0][0];
1111 float ret1 = b1[1][1];
1112 float ret2 = b2[2][2];
1114 out0 = vec3(ret0, ret1, ret2);
1118 mat3[3] func(mat3[3] x)
1133 input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ];
1134 output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ];
1139 precision mediump int;
1140 precision mediump float;
1143 mat3[3] func(mat3[3]);
1149 a[0] = mat3(in0.x, in0.y, in0.z,
1150 in0.x, in0.y, in0.z,
1151 in0.x, in0.y, in0.z);
1152 a[1] = mat3(in0.z, in0.x, -in0.y,
1153 in0.z, in0.x, -in0.y,
1154 in0.z, in0.x, -in0.y);
1155 a[2] = mat3(-in0.z, -in0.z, in0.z,
1156 -in0.y, -in0.y, in0.y,
1157 -in0.x, -in0.x, in0.x);
1165 float ret0 = b0[0][0];
1166 float ret1 = b1[1][1];
1167 float ret2 = b2[2][2];
1169 out0 = ivec3(ret0, ret1, ret2);
1173 mat3[3] func(mat3[3] x)
1188 input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ];
1189 output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ];
1194 precision mediump float;
1197 mat3[3] func(mat3[3]);
1202 a[0] = mat3(in0.x, in0.y, in0.z,
1203 in0.x, in0.y, in0.z,
1204 in0.x, in0.y, in0.z);
1205 a[1] = mat3(in0.z, in0.x, in0.y,
1206 in0.z, in0.x, in0.y,
1207 in0.z, in0.x, in0.y);
1208 a[2] = mat3(in0.z, in0.z, in0.z,
1209 in0.y, in0.y, in0.y,
1210 in0.x, in0.x, in0.x);
1218 float ret0 = b0[0][0];
1219 float ret1 = b1[1][1];
1220 float ret2 = b2[2][2];
1222 out0 = bvec3(ret0, ret1, ret2);
1226 mat3[3] func(mat3[3] x)
1237 end # unnamed_parameter
1239 group declaration "Declaring arrays"
1241 case implicit_size_float
1245 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
1246 output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
1251 precision mediump float;
1257 float[] x = float[] (in0.z, in0.x, in0.y);
1260 out0 = vec3(y[0], y[1], y[2]);
1266 case implicit_size_int
1270 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
1271 output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
1276 precision mediump int;
1277 precision mediump float;
1283 int[] x = int[] (in0.z, in0.x, in0.y);
1286 out0 = ivec3(y[0], y[1], y[2]);
1292 case implicit_size_bool
1296 input bvec3 in0 = [ bvec3(false, true, true) ];
1297 output bvec3 out0 = [ bvec3(true, false, true) ];
1302 precision mediump float;
1308 bool[] x = bool[] (in0.z, in0.x, in0.y);
1311 out0 = bvec3(y[0], y[1], y[2]);
1317 case implicit_size_struct
1321 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1322 output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ];
1327 precision mediump float;
1340 test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
1341 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
1342 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
1344 test[] x = test[] (c, b, a);
1347 out0 = vec3(y[0].v.x, y[1].v.y, y[2].v.z);
1353 case implicit_size_float_vec3
1357 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
1358 output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ];
1363 precision mediump float;
1369 vec3[] x = vec3[] ( vec3(in0.x, in0.y, -in0.z) ,
1370 vec3(in0.y, -in0.z, in0.x) ,
1371 vec3(-in0.z, in0.x, in0.y) );
1373 out0 = vec3(y[0].x, y[1].y, y[2].z);
1379 case implicit_size_int_ivec3
1383 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(5, 11, -1) ];
1384 output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ];
1389 precision mediump int;
1390 precision mediump float;
1396 ivec3[] x = ivec3[] ( ivec3(in0.x, in0.y, -in0.z) ,
1397 ivec3(in0.y, -in0.z, in0.x) ,
1398 ivec3(-in0.z, in0.x, in0.y) );
1400 out0 = ivec3(y[0].x, y[1].y, y[2].z);
1406 case implicit_size_bool_bvec3
1410 input bvec3 in0 = [ bvec3(true, false, true) ];
1411 output bvec3 out0 = [ bvec3(true, true, false) ];
1416 precision mediump float;
1422 bvec3[] x = bvec3[] ( bvec3(in0.x, in0.y, in0.z) ,
1423 bvec3(in0.y, in0.z, in0.x) ,
1424 bvec3(in0.z, in0.x, in0.y) );
1426 out0 = bvec3(y[0].x, y[1].y, y[2].z);
1432 case implicit_size_float_mat3
1436 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
1437 output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
1442 precision mediump float;
1448 mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z,
1449 in0.x, in0.y, in0.z,
1450 in0.x, in0.y, in0.z) ,
1451 mat3( in0.z, in0.x, -in0.y,
1452 in0.z, in0.x, -in0.y,
1453 in0.z, in0.x, -in0.y) ,
1454 mat3( -in0.z, -in0.z, in0.z,
1455 -in0.y, -in0.y, in0.y,
1456 -in0.x, -in0.x, in0.x) );
1462 float ret0 = a0[2][0];
1463 float ret1 = a1[0][2];
1464 float ret2 = a2[1][2];
1466 out0 = vec3(ret0, ret1, ret2);
1472 case implicit_size_int_mat3
1476 input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
1477 output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
1482 precision mediump int;
1483 precision mediump float;
1489 mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z,
1490 in0.x, in0.y, in0.z,
1491 in0.x, in0.y, in0.z) ,
1492 mat3( in0.z, in0.x, -in0.y,
1493 in0.z, in0.x, -in0.y,
1494 in0.z, in0.x, -in0.y) ,
1495 mat3( -in0.z, -in0.z, in0.z,
1496 -in0.y, -in0.y, in0.y,
1497 -in0.x, -in0.x, in0.x) );
1503 float ret0 = a0[2][0];
1504 float ret1 = a1[0][2];
1505 float ret2 = a2[1][2];
1507 out0 = ivec3(ret0, ret1, ret2);
1513 case implicit_size_bool_mat3
1517 input bvec3 in0 = [ bvec3(true, false, true) ];
1518 output bvec3 out0 = [ bvec3(true, false, false) ];
1523 precision mediump float;
1529 mat3[] a = mat3[] ( mat3( in0.x, in0.y, in0.z,
1530 in0.x, in0.y, in0.z,
1531 in0.x, in0.y, in0.z) ,
1532 mat3( in0.z, in0.x, in0.y,
1533 in0.z, in0.x, in0.y,
1534 in0.z, in0.x, in0.y) ,
1535 mat3( in0.z, in0.z, in0.z,
1536 in0.y, in0.y, in0.y,
1537 in0.x, in0.x, in0.x) );
1543 float ret0 = a0[2][0];
1544 float ret1 = a1[0][2];
1545 float ret2 = a2[1][2];
1547 out0 = bvec3(ret0, ret1, ret2);
1554 case constant_expression_array_size
1559 precision mediump float;
1569 float[array1.length()] array3;
1576 case constant_expression_array_access
1580 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1581 output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ];
1586 precision mediump float;
1595 float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [a];
1596 float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [b+2];
1597 float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [5];
1598 out0 = vec3(x, y, z);
1604 case dynamic_expression_array_access
1608 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1609 input ivec2 in1 = ivec2(3, 2);
1610 output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ];
1615 precision mediump float;
1621 float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x];
1622 float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.y+2];
1623 float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x+in1.y];
1624 out0 = vec3(x, y, z);
1630 case multiple_declarations_single_statement_explicit
1634 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1635 output vec3 out0 = [ vec3(2.0, -1.0, 0.5) ];
1640 precision mediump float;
1646 float[] x = float[6] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
1647 y = float[2] (in0.x, -in0.y);
1648 out0 = vec3(x[2], y[1], x[0]);
1654 case multiple_declarations_single_statement_implicit
1658 input ivec3 in0 = [ ivec3(5, 1, 2) ];
1659 output ivec3 out0 = [ ivec3(2, -1, 5) ];
1664 precision mediump float;
1670 int[] x = int[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
1671 y = int[] (in0.x, -in0.y);
1672 out0 = ivec3(x[2], y[1], x[0]);
1680 group length "Array length method"
1686 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1687 output ivec3 out0 = [ ivec3(3, 5, 13) ];
1692 precision mediump float;
1698 float[] x = float[3] (in0.z, in0.x, in0.y);
1699 float[] y = float[] (in0.z, in0.x, in0.y, in0.x, in0.y);
1702 out0 = ivec3(x.length(), y.length(), z.length());
1712 input ivec3 in0 = [ ivec3(0, 1, 2) ];
1713 output ivec3 out0 = [ ivec3(3, 5, 13) ];
1718 precision mediump int;
1719 precision mediump float;
1725 int[] x = int[3] (in0.z, in0.x, in0.y);
1726 int[] y = int[] (in0.z, in0.x, in0.y, in0.x, in0.y);
1729 out0 = ivec3(x.length(), y.length(), z.length());
1739 input bvec3 in0 = [ bvec3(true, false, true) ];
1740 output ivec3 out0 = [ ivec3(3, 5, 13) ];
1745 precision mediump float;
1751 bool[] x = bool[3] (in0.z, in0.x, in0.y);
1752 bool[] y = bool[] (in0.z, in0.x, in0.y, in0.x, in0.y);
1755 out0 = ivec3(x.length(), y.length(), z.length());
1765 input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1766 output ivec3 out0 = [ ivec3(3, 5, 13) ];
1771 precision mediump float;
1784 test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
1785 test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
1786 test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
1788 test[] x = test[3] (a, b, c);
1789 test[] y = test[] (c, a, b, b, a);
1792 out0 = ivec3(x.length(), y.length(), z.length());
1800 group invalid "Invalid Functions"
1802 case multidimensional_array1
1808 precision mediump float;
1814 ${POSITION_FRAG_COLOR} = vec4(1.0);
1819 case multidimensional_array2
1825 precision mediump float;
1831 ${POSITION_FRAG_COLOR} = vec4(1.0);
1836 case multidimensional_uniform_array
1842 precision mediump float;
1844 uniform float a[3][2];
1848 ${POSITION_FRAG_COLOR} = vec4(1.0);
1853 case multidimensional_array_in_uniform_block
1859 precision mediump float;
1868 ${POSITION_FRAG_COLOR} = vec4(1.0);
1873 case dynamic_expression_array_size
1879 precision mediump float;
1886 ${POSITION_FRAG_COLOR} = vec4(1.0);
1891 case empty_declaration_without_var_name
1893 expect compile_or_link_fail
1897 precision mediump float;
1903 ${POSITION_FRAG_COLOR} = vec4(1.0);
1908 case empty_declaration_with_var_name
1910 expect compile_or_link_fail
1914 precision mediump float;
1920 ${POSITION_FRAG_COLOR} = vec4(1.0);
1925 case constructor_c_style1
1931 precision mediump float;
1937 a = float[3] { 1.0, 2.0, 3.0 };
1939 ${POSITION_FRAG_COLOR} = vec4(1.0);
1944 case constructor_c_style2
1950 precision mediump float;
1955 float a[5] = { 1.0, 2.0, 3.0 };
1957 ${POSITION_FRAG_COLOR} = vec4(1.0);
1962 case constructor_c_style3
1968 precision mediump float;
1973 float a[] = float[3] { 1.0, 2.0, 3.0 };
1975 ${POSITION_FRAG_COLOR} = vec4(1.0);
1980 case constructor_c_style4
1986 precision mediump float;
1991 float a[3] = { 1.0, 2.0, 3.0 };
1993 ${POSITION_FRAG_COLOR} = vec4(1.0);