• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
17
18group constructor "Array constructors"
19
20	case float3
21		version 310 es
22		values
23		{
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) ];
26		}
27
28		both ""
29			#version 310 es
30			precision highp float;
31			${DECLARATIONS}
32
33			void main()
34			{
35				${SETUP}
36				float[3] x;
37				x = float[3] (in0.z, in0.x, in0.y);
38				out0 = vec3(x[0], x[1], x[2]);
39				${OUTPUT}
40			}
41		""
42	end
43
44	case float4
45		version 310 es
46		values
47		{
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) ];
50		}
51
52		both ""
53			#version 310 es
54			precision highp float;
55			${DECLARATIONS}
56
57			void main()
58			{
59				${SETUP}
60				float[4] x;
61				x = float[4] (in0.z, in0.x, in0.w, in0.y);
62				out0 = vec4(x[0], x[1], x[2], x[3]);
63				${OUTPUT}
64			}
65		""
66	end
67
68	case int3
69		version 310 es
70		values
71		{
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) ];
74		}
75
76		both ""
77			#version 310 es
78			precision highp int;
79			precision highp float;
80			${DECLARATIONS}
81
82			void main()
83			{
84				${SETUP}
85				int[3] x;
86				x = int[3] (in0.z, in0.x, in0.y);
87				out0 = ivec3(x[0], x[1], x[2]);
88				${OUTPUT}
89			}
90		""
91	end
92
93	case int4
94		version 310 es
95		values
96		{
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) ];
99		}
100
101		both ""
102			#version 310 es
103			precision highp int;
104			precision highp float;
105			${DECLARATIONS}
106
107			void main()
108			{
109				${SETUP}
110				int[4] x;
111				x = int[4] (in0.z, in0.x, in0.w, in0.y);
112				out0 = ivec4(x[0], x[1], x[2], x[3]);
113				${OUTPUT}
114			}
115		""
116	end
117
118	case bool3
119		version 310 es
120		values
121		{
122			input bvec3 in0 = [ bvec3(true, true, false) ];
123			output bvec3 out0 = [ bvec3(false, true, true) ];
124		}
125
126		both ""
127			#version 310 es
128			precision highp int;
129			precision highp float;
130			${DECLARATIONS}
131
132			void main()
133			{
134				${SETUP}
135				bool[3] x;
136				x = bool[3] (in0.z, in0.x, in0.y);
137				out0 = bvec3(x[0], x[1], x[2]);
138				${OUTPUT}
139			}
140		""
141	end
142
143	case bool4
144		version 310 es
145		values
146		{
147			input bvec4 in0 = [ bvec4(true, true, false, false) ];
148			output bvec4 out0 = [ bvec4(false, true, true, false) ];
149		}
150
151		both ""
152			#version 310 es
153			precision highp int;
154			precision highp float;
155			${DECLARATIONS}
156
157			void main()
158			{
159				${SETUP}
160				bool[4] x;
161				x = bool[4] (in0.z, in0.x, in0.y, in0.w);
162				out0 = bvec4(x[0], x[1], x[2], x[3]);
163				${OUTPUT}
164			}
165		""
166	end
167
168	case struct3
169		version 310 es
170		values
171		{
172			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
173			output vec3 out0 = [ vec3(2.0, -0.5, -1.0) ];
174		}
175
176		both ""
177			#version 310 es
178			precision highp float;
179			${DECLARATIONS}
180
181
182
183			void main()
184			{
185				${SETUP}
186
187				struct test
188				{
189					float f;
190					vec3 v;
191				};
192
193				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
194				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
195				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
196
197				test[3] x = test[3] (a, b, c);
198
199				out0 = vec3(x[0].f, x[1].v.y, x[2].v.x);
200				${OUTPUT}
201			}
202		""
203	end
204
205	case struct4
206		version 310 es
207		values
208		{
209			input vec4 in0 = [ vec4(0.5, 1.0, 2.0, 1.5) ];
210			output vec4 out0 = [ vec4(2.0, -0.5, -1.0, -1.5) ];
211		}
212
213		both ""
214			#version 310 es
215			precision highp float;
216			${DECLARATIONS}
217
218
219			void main()
220			{
221				${SETUP}
222
223
224				struct test
225				{
226					float f;
227					vec3 v;
228				};
229
230				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
231				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
232				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
233				test d = test(-in0.w, vec3(-in0.w, -in0.x, -in0.z));
234
235				test[4] x = test[4] (a, b, c, d);
236
237				out0 = vec4(x[0].f, x[1].v.y, x[2].v.x, x[3].v.x);
238				${OUTPUT}
239			}
240		""
241	end
242
243
244	case float_vec3
245		version 310 es
246		values
247		{
248			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
249			output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(7.4, -2.0, -1.0) | vec3(3.0, 2.0, 1.6) ];
250		}
251
252		both ""
253			#version 310 es
254			precision highp float;
255			${DECLARATIONS}
256
257			void main()
258			{
259				${SETUP}
260
261				vec3[3] x;
262				x = vec3[3] (	vec3(in0.x, in0.y, in0.z)	,
263								vec3(-in0.y, -in0.z, -in0.x),
264								vec3(in0.z, in0.x, in0.y)	);
265				out0 = vec3(x[0].x, x[1].y, x[2].z);
266				${OUTPUT}
267			}
268		""
269	end
270
271	case int_vec3
272		version 310 es
273		values
274		{
275			input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
276			output ivec3 out0 = [ ivec3(5, -2, 1) | ivec3(7, -2, -1) | ivec3(3, 2, 1) ];
277		}
278
279		both ""
280			#version 310 es
281			precision highp int;
282			precision highp float;
283			${DECLARATIONS}
284
285			void main()
286			{
287				${SETUP}
288
289				ivec3[3] x;
290				x = ivec3[3] (	ivec3(in0.x, in0.y, in0.z)	,
291								ivec3(-in0.y, -in0.z, -in0.x),
292								ivec3(in0.z, in0.x, in0.y)	);
293				out0 = ivec3(x[0].x, x[1].y, x[2].z);
294				${OUTPUT}
295			}
296		""
297	end
298
299	case bool_vec3
300		version 310 es
301		values
302		{
303			input bvec3 in0 = [ bvec3(true, false, true) ];
304			output bvec3 out0 = [ bvec3(true, true, false) ];
305		}
306
307		both ""
308			#version 310 es
309			precision highp int;
310			precision highp float;
311			${DECLARATIONS}
312
313			void main()
314			{
315				${SETUP}
316
317				bvec3[3] x;
318				x = bvec3[3] (	bvec3(in0.x, in0.y, in0.z)	,
319								bvec3(in0.y, in0.z, in0.x),
320								bvec3(in0.z, in0.x, in0.y)	);
321				out0 = bvec3(x[0].x, x[1].y, x[2].z);
322				${OUTPUT}
323			}
324		""
325	end
326
327	case float_mat3
328		version 310 es
329		values
330		{
331			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
332			output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
333		}
334
335		both ""
336			#version 310 es
337			precision highp float;
338			${DECLARATIONS}
339
340			void main()
341			{
342				${SETUP}
343				mat3[3] a = mat3[3] (	mat3(	in0.x, in0.y, in0.z,
344												in0.x, in0.y, in0.z,
345												in0.x, in0.y, in0.z)	,
346										mat3(	in0.z, in0.x, -in0.y,
347												in0.z, in0.x, -in0.y,
348												in0.z, in0.x, -in0.y)	,
349										mat3(	-in0.z, -in0.z, in0.z,
350												-in0.y, -in0.y, in0.y,
351												-in0.x, -in0.x, in0.x)	);
352
353				mat3 a0 = a[0];
354				mat3 a1 = a[1];
355				mat3 a2 = a[2];
356
357				float ret0 = a0[2][0];
358				float ret1 = a1[0][2];
359				float ret2 = a2[1][2];
360
361				out0 = vec3(ret0, ret1, ret2);
362				${OUTPUT}
363			}
364		""
365	end
366
367	case int_mat3
368		version 310 es
369		values
370		{
371			input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
372			output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
373		}
374
375		both ""
376			#version 310 es
377			precision highp int;
378			precision highp float;
379			${DECLARATIONS}
380
381			void main()
382			{
383				${SETUP}
384				mat3[3] a = mat3[3] (	mat3(	in0.x, in0.y, in0.z,
385												in0.x, in0.y, in0.z,
386												in0.x, in0.y, in0.z)	,
387										mat3(	in0.z, in0.x, -in0.y,
388												in0.z, in0.x, -in0.y,
389												in0.z, in0.x, -in0.y)	,
390										mat3(	-in0.z, -in0.z, in0.z,
391												-in0.y, -in0.y, in0.y,
392												-in0.x, -in0.x, in0.x)	);
393
394				mat3 a0 = a[0];
395				mat3 a1 = a[1];
396				mat3 a2 = a[2];
397
398				float ret0 = a0[2][0];
399				float ret1 = a1[0][2];
400				float ret2 = a2[1][2];
401
402				out0 = ivec3(ret0, ret1, ret2);
403				${OUTPUT}
404			}
405		""
406	end
407
408	case bool_mat3
409		version 310 es
410		values
411		{
412			input bvec3 in0 = [ bvec3(true, false, true) ];
413			output bvec3 out0 = [ bvec3(true, false, false) ];
414		}
415
416		both ""
417			#version 310 es
418			precision highp int;
419			precision highp float;
420			${DECLARATIONS}
421
422			void main()
423			{
424				${SETUP}
425				mat3[3] a = mat3[3] (	mat3(	in0.x, in0.y, in0.z,
426												in0.x, in0.y, in0.z,
427												in0.x, in0.y, in0.z)	,
428										mat3(	in0.z, in0.x, in0.y,
429												in0.z, in0.x, in0.y,
430												in0.z, in0.x, in0.y)	,
431										mat3(	in0.z, in0.z, in0.z,
432												in0.y, in0.y, in0.y,
433												in0.x, in0.x, in0.x)	);
434
435				mat3 a0 = a[0];
436				mat3 a1 = a[1];
437				mat3 a2 = a[2];
438
439				float ret0 = a0[2][0];
440				float ret1 = a1[0][2];
441				float ret2 = a2[1][2];
442
443				out0 = bvec3(ret0, ret1, ret2);
444				${OUTPUT}
445			}
446		""
447	end
448
449end # type
450
451group return "Arrays as return value"
452
453	case float
454		version 310 es
455		values
456		{
457			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
458			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		}
460
461		both ""
462			#version 310 es
463			precision highp float;
464			${DECLARATIONS}
465
466			float[3] func(vec3 a)
467			{
468				return float[3] (a.z, -a.x, a.y);
469			}
470
471			void main()
472			{
473				${SETUP}
474				float[3] x = func(in0);
475				out0 = vec3(x[0], x[1], x[2]);
476				${OUTPUT}
477			}
478		""
479	end
480
481	case int
482		version 310 es
483		values
484		{
485			input ivec3 in0 = [ ivec3(4, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
486			output ivec3 out0 =	[ ivec3(2, -4, 1) | ivec3(2, -7, -1) | ivec3(-2, -3, 1) ];
487		}
488
489		both ""
490			#version 310 es
491			precision highp int;
492			precision highp float;
493			${DECLARATIONS}
494
495			int[3] func(ivec3 a)
496			{
497				return int[3] (a.z, -a.x, a.y);
498			}
499
500			void main()
501			{
502				${SETUP}
503				int[3] x = func(in0);
504				out0 = ivec3(x[0], x[1], x[2]);
505				${OUTPUT}
506			}
507		""
508	end
509
510	case bool
511		version 310 es
512		values
513		{
514			input bvec3 in0 =	[ bvec3(false, true, true) ];
515			output bvec3 out0 = [ bvec3(true, false, true) ];
516		}
517
518		both ""
519			#version 310 es
520			precision highp int;
521			precision highp float;
522			${DECLARATIONS}
523
524			bool[3] func(bvec3 a)
525			{
526				return bool[3] (a.z, a.x, a.y);
527			}
528
529			void main()
530			{
531				${SETUP}
532				bool[3] x = func(in0);
533				out0 = bvec3(x[0], x[1], x[2]);
534				${OUTPUT}
535			}
536		""
537	end
538
539
540
541	case float_vec3
542		version 310 es
543		values
544		{
545			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
546			output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ];
547		}
548
549		both ""
550			#version 310 es
551			precision highp float;
552			${DECLARATIONS}
553
554			vec3[3] func(vec3[3] a)
555			{
556				return vec3[3] (a[1], a[2], a[0]);
557			}
558
559			void main()
560			{
561				${SETUP}
562				vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z)	,
563									vec3(in0.y, -in0.z, in0.x)	,
564									vec3(-in0.z, in0.x, in0.y)	);
565				x = func(x);
566				out0 = vec3(x[0].x, x[1].y, x[2].z);
567				${OUTPUT}
568			}
569		""
570	end
571
572	case struct
573		version 310 es
574		values
575		{
576			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) ];
577			output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ];
578		}
579
580		both ""
581			#version 310 es
582			precision highp float;
583			${DECLARATIONS}
584
585			struct test
586			{
587				float f;
588				vec3 v;
589			};
590
591			test[3] func(test[3] a)
592			{
593				return test[3] (a[1], a[2], a[0]);
594			}
595
596			void main()
597			{
598				${SETUP}
599
600				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
601				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
602				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
603
604				test[3] t = test[3] (a, b, c);
605				test[3] x = func(t);
606
607				out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x);
608				${OUTPUT}
609			}
610		""
611	end
612
613	case int_vec3
614		version 310 es
615		values
616		{
617			input ivec3 in0 =	[ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ];
618			output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ];
619		}
620
621		both ""
622			#version 310 es
623			precision highp int;
624			precision highp float;
625			${DECLARATIONS}
626
627			ivec3[3] func(ivec3[3] a)
628			{
629				return ivec3[3] (a[1], a[2], a[0]);
630			}
631
632			void main()
633			{
634				${SETUP}
635				ivec3[3] x = ivec3[3](	ivec3(in0.x, in0.y, -in0.z)	,
636										ivec3(in0.y, -in0.z, in0.x)	,
637										ivec3(-in0.z, in0.x, in0.y)	);
638				x = func(x);
639				out0 = ivec3(x[0].x, x[1].y, x[2].z);
640				${OUTPUT}
641			}
642		""
643	end
644
645	case bool_vec3
646		version 310 es
647		values
648		{
649			input bvec3 in0 =	[ bvec3(true, false, false) ];
650			output bvec3 out0 = [ bvec3(false, true, false) ];
651		}
652
653		both ""
654			#version 310 es
655			precision highp int;
656			precision highp float;
657			${DECLARATIONS}
658
659			bvec3[3] func(bvec3[3] a)
660			{
661				return bvec3[3] (a[1], a[2], a[0]);
662			}
663
664			void main()
665			{
666				${SETUP}
667				bvec3[3] x = bvec3[3](	bvec3(in0.x, in0.y, in0.z)	,
668										bvec3(in0.y, in0.z, in0.x)	,
669										bvec3(in0.z, in0.x, in0.y)	);
670				x = func(x);
671				out0 = bvec3(x[0].x, x[1].y, x[2].z);
672				${OUTPUT}
673			}
674		""
675	end
676
677	case float_mat3
678		version 310 es
679		values
680		{
681			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
682			output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ];
683		}
684
685		both ""
686			#version 310 es
687			precision highp float;
688			${DECLARATIONS}
689
690			mat3[3] func(mat3[3] x)
691			{
692				mat3[3] r;
693				r[0] = x[1];
694				r[1] = x[2];
695				r[2] = x[0];
696				return r;
697			}
698
699			void main()
700			{
701				${SETUP}
702				mat3[3] a, b;
703				a[0] = mat3(in0.x, in0.y, in0.z,
704							in0.x, in0.y, in0.z,
705							in0.x, in0.y, in0.z);
706				a[1] = mat3(in0.z, in0.x, -in0.y,
707							in0.z, in0.x, -in0.y,
708							in0.z, in0.x, -in0.y);
709				a[2] = mat3(-in0.z, -in0.z, in0.z,
710							-in0.y, -in0.y, in0.y,
711							-in0.x, -in0.x, in0.x);
712
713				b = func(a);
714
715				mat3 b0 = b[0];
716				mat3 b1 = b[1];
717				mat3 b2 = b[2];
718
719				float ret0 = b0[0][0];
720				float ret1 = b1[1][1];
721				float ret2 = b2[2][2];
722
723				out0 = vec3(ret0, ret1, ret2);
724				${OUTPUT}
725			}
726		""
727	end
728
729	case int_mat3
730		version 310 es
731		values
732		{
733			input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ];
734			output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ];
735		}
736
737		both ""
738			#version 310 es
739			precision highp int;
740			precision highp float;
741			${DECLARATIONS}
742
743			mat3[3] func(mat3[3] x)
744			{
745				mat3[3] r;
746				r[0] = x[1];
747				r[1] = x[2];
748				r[2] = x[0];
749				return r;
750			}
751
752			void main()
753			{
754				${SETUP}
755				mat3[3] a, b;
756				a[0] = mat3(in0.x, in0.y, in0.z,
757							in0.x, in0.y, in0.z,
758							in0.x, in0.y, in0.z);
759				a[1] = mat3(in0.z, in0.x, -in0.y,
760							in0.z, in0.x, -in0.y,
761							in0.z, in0.x, -in0.y);
762				a[2] = mat3(-in0.z, -in0.z, in0.z,
763							-in0.y, -in0.y, in0.y,
764							-in0.x, -in0.x, in0.x);
765
766				b = func(a);
767
768				mat3 b0 = b[0];
769				mat3 b1 = b[1];
770				mat3 b2 = b[2];
771
772				float ret0 = b0[0][0];
773				float ret1 = b1[1][1];
774				float ret2 = b2[2][2];
775
776				out0 = ivec3(ret0, ret1, ret2);
777				${OUTPUT}
778			}
779		""
780	end
781
782	case bool_mat3
783		version 310 es
784		values
785		{
786			input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ];
787			output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ];
788		}
789
790		both ""
791			#version 310 es
792			precision highp int;
793			precision highp float;
794			${DECLARATIONS}
795
796			mat3[3] func(mat3[3] x)
797			{
798				mat3[3] r;
799				r[0] = x[1];
800				r[1] = x[2];
801				r[2] = x[0];
802				return r;
803			}
804
805			void main()
806			{
807				${SETUP}
808				mat3[3] a, b;
809				a[0] = mat3(in0.x, in0.y, in0.z,
810							in0.x, in0.y, in0.z,
811							in0.x, in0.y, in0.z);
812				a[1] = mat3(in0.z, in0.x, in0.y,
813							in0.z, in0.x, in0.y,
814							in0.z, in0.x, in0.y);
815				a[2] = mat3(in0.z, in0.z, in0.z,
816							in0.y, in0.y, in0.y,
817							in0.x, in0.x, in0.x);
818
819				b = func(a);
820
821				mat3 b0 = b[0];
822				mat3 b1 = b[1];
823				mat3 b2 = b[2];
824
825				float ret0 = b0[0][0];
826				float ret1 = b1[1][1];
827				float ret2 = b2[2][2];
828
829				out0 = bvec3(ret0, ret1, ret2);
830				${OUTPUT}
831			}
832		""
833	end
834
835end # return
836
837group unnamed_parameter "Array type as unnamed parameter of a function prototype"
838
839	case float
840		version 310 es
841		values
842		{
843			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
844			output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
845		}
846
847		both ""
848			#version 310 es
849			precision highp float;
850			${DECLARATIONS}
851
852			float[3] func(float[3]);
853
854			void main()
855			{
856				${SETUP}
857				float[3] a = float[3] (in0.x, in0.y, in0.z);
858				float[3] b = func(a);
859				out0 = vec3(b[0], b[1], b[2]);
860				${OUTPUT}
861			}
862
863			float[3] func(float[3] a)
864			{
865				return float[3] (a[2], a[0], a[1]);
866			}
867
868		""
869	end
870
871	case int
872		version 310 es
873		values
874		{
875			input ivec3 in0 =	[ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
876			output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
877		}
878
879		both ""
880			#version 310 es
881			precision highp int;
882			precision highp float;
883			${DECLARATIONS}
884
885			int[3] func(int[3]);
886
887			void main()
888			{
889				${SETUP}
890				int[3] a = int[3] (in0.x, in0.y, in0.z);
891				int[3] b = func(a);
892				out0 = ivec3(b[0], b[1], b[2]);
893				${OUTPUT}
894			}
895
896			int[3] func(int[3] a)
897			{
898				return int[3] (a[2], a[0], a[1]);
899			}
900
901		""
902	end
903
904	case bool
905		version 310 es
906		values
907		{
908			input bvec3 in0 =	[ bvec3(false, true, true) ];
909			output bvec3 out0 = [ bvec3(true, false, true) ];
910		}
911
912		both ""
913			#version 310 es
914			precision highp int;
915			precision highp float;
916			${DECLARATIONS}
917
918			bool[3] func(bool[3]);
919
920			void main()
921			{
922				${SETUP}
923				bool[3] a = bool[3] (in0.x, in0.y, in0.z);
924				bool[3] b = func(a);
925				out0 = bvec3(b[0], b[1], b[2]);
926				${OUTPUT}
927			}
928
929			bool[3] func(bool[3] a)
930			{
931				return bool[3] (a[2], a[0], a[1]);
932			}
933
934		""
935	end
936
937	case struct
938		version 310 es
939		values
940		{
941			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) ];
942			output vec3 out0 = [ vec3(-1.0, 2.0, 0.5) ];
943		}
944
945		both ""
946			#version 310 es
947			precision highp float;
948			${DECLARATIONS}
949
950			struct test
951			{
952				float f;
953				vec3 v;
954			};
955
956			test[3] func(test[3]);
957
958			void main()
959			{
960				${SETUP}
961
962				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
963				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
964				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
965
966				test[3] t = test[3] (a, b, c);
967				test[3] x = func(t);
968				out0 = vec3(x[0].v.z, x[1].v.y, x[2].v.x);
969				${OUTPUT}
970			}
971
972			test[3] func(test[3] a)
973			{
974				return test[3] (a[1], a[2], a[0]);
975			}
976
977		""
978	end
979
980	case float_vec3
981		version 310 es
982		values
983		{
984			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
985			output vec3 out0 = [ vec3(1.0, 0.5, -2.0) | vec3(11.2, -0.5, 1.0) ];
986		}
987
988		both ""
989			#version 310 es
990			precision highp float;
991			${DECLARATIONS}
992
993			vec3[3] func(vec3[3]);
994
995			void main()
996			{
997				${SETUP}
998				vec3[3] x = vec3[3](vec3(in0.x, in0.y, -in0.z)	,
999									vec3(in0.y, -in0.z, in0.x)	,
1000									vec3(-in0.z, in0.x, in0.y)	);
1001				x = func(x);
1002				out0 = vec3(x[0].x, x[1].y, x[2].z);
1003				${OUTPUT}
1004			}
1005
1006			vec3[3] func(vec3[3] a)
1007			{
1008				return vec3[3] (a[1], a[2], a[0]);
1009			}
1010		""
1011	end
1012
1013	case int_vec3
1014		version 310 es
1015		values
1016		{
1017			input ivec3 in0 =	[ ivec3(5, 1, 2) | ivec3(-5, 11, -1) ];
1018			output ivec3 out0 = [ ivec3(1, 5, -2) | ivec3(11, -5, 1) ];
1019		}
1020
1021		both ""
1022			#version 310 es
1023			precision highp int;
1024			precision highp float;
1025			${DECLARATIONS}
1026
1027			ivec3[3] func(ivec3[3]);
1028
1029			void main()
1030			{
1031				${SETUP}
1032				ivec3[3] x = ivec3[3](	ivec3(in0.x, in0.y, -in0.z)	,
1033										ivec3(in0.y, -in0.z, in0.x)	,
1034										ivec3(-in0.z, in0.x, in0.y)	);
1035				x = func(x);
1036				out0 = ivec3(x[0].x, x[1].y, x[2].z);
1037				${OUTPUT}
1038			}
1039
1040			ivec3[3] func(ivec3[3] a)
1041			{
1042				return ivec3[3] (a[1], a[2], a[0]);
1043			}
1044		""
1045	end
1046
1047	case bool_vec3
1048		version 310 es
1049		values
1050		{
1051			input bvec3 in0 =	[ bvec3(true, false, false) ];
1052			output bvec3 out0 = [ bvec3(false, true, false) ];
1053		}
1054
1055		both ""
1056			#version 310 es
1057			precision highp int;
1058			precision highp float;
1059			${DECLARATIONS}
1060
1061			bvec3[3] func(bvec3[3]);
1062
1063			void main()
1064			{
1065				${SETUP}
1066				bvec3[3] x = bvec3[3](	bvec3(in0.x, in0.y, in0.z)	,
1067										bvec3(in0.y, in0.z, in0.x)	,
1068										bvec3(in0.z, in0.x, in0.y)	);
1069				x = func(x);
1070				out0 = bvec3(x[0].x, x[1].y, x[2].z);
1071				${OUTPUT}
1072			}
1073
1074			bvec3[3] func(bvec3[3] a)
1075			{
1076				return bvec3[3] (a[1], a[2], a[0]);
1077			}
1078
1079		""
1080	end
1081
1082	case float_mat3
1083		version 310 es
1084		values
1085		{
1086			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
1087			output vec3 out0 = [ vec3(2.0, -1.0, 2.0) | vec3(-2.3, 0.0, -2.3) ];
1088		}
1089
1090		both ""
1091			#version 310 es
1092			precision highp float;
1093			${DECLARATIONS}
1094
1095			mat3[3] func(mat3[3]);
1096
1097			void main()
1098			{
1099				${SETUP}
1100				mat3[3] a, b;
1101				a[0] = mat3(in0.x, in0.y, in0.z,
1102							in0.x, in0.y, in0.z,
1103							in0.x, in0.y, in0.z);
1104				a[1] = mat3(in0.z, in0.x, -in0.y,
1105							in0.z, in0.x, -in0.y,
1106							in0.z, in0.x, -in0.y);
1107				a[2] = mat3(-in0.z, -in0.z, in0.z,
1108							-in0.y, -in0.y, in0.y,
1109							-in0.x, -in0.x, in0.x);
1110
1111				b = func(a);
1112
1113				mat3 b0 = b[0];
1114				mat3 b1 = b[1];
1115				mat3 b2 = b[2];
1116
1117				float ret0 = b0[0][0];
1118				float ret1 = b1[1][1];
1119				float ret2 = b2[2][2];
1120
1121				out0 = vec3(ret0, ret1, ret2);
1122				${OUTPUT}
1123			}
1124
1125			mat3[3] func(mat3[3] x)
1126			{
1127				mat3[3] r;
1128				r[0] = x[1];
1129				r[1] = x[2];
1130				r[2] = x[0];
1131				return r;
1132			}
1133		""
1134	end
1135
1136	case int_mat3
1137		version 310 es
1138		values
1139		{
1140			input ivec3 in0 = [ ivec3(5, 1, 2) | ivec3(-1, 0, -2) ];
1141			output ivec3 out0 = [ ivec3(2, -1, 2) | ivec3(-2, 0, -2) ];
1142		}
1143
1144		both ""
1145			#version 310 es
1146			precision highp int;
1147			precision highp float;
1148			${DECLARATIONS}
1149
1150			mat3[3] func(mat3[3]);
1151
1152			void main()
1153			{
1154				${SETUP}
1155				mat3[3] a, b;
1156				a[0] = mat3(in0.x, in0.y, in0.z,
1157							in0.x, in0.y, in0.z,
1158							in0.x, in0.y, in0.z);
1159				a[1] = mat3(in0.z, in0.x, -in0.y,
1160							in0.z, in0.x, -in0.y,
1161							in0.z, in0.x, -in0.y);
1162				a[2] = mat3(-in0.z, -in0.z, in0.z,
1163							-in0.y, -in0.y, in0.y,
1164							-in0.x, -in0.x, in0.x);
1165
1166				b = func(a);
1167
1168				mat3 b0 = b[0];
1169				mat3 b1 = b[1];
1170				mat3 b2 = b[2];
1171
1172				float ret0 = b0[0][0];
1173				float ret1 = b1[1][1];
1174				float ret2 = b2[2][2];
1175
1176				out0 = ivec3(ret0, ret1, ret2);
1177				${OUTPUT}
1178			}
1179
1180			mat3[3] func(mat3[3] x)
1181			{
1182				mat3[3] r;
1183				r[0] = x[1];
1184				r[1] = x[2];
1185				r[2] = x[0];
1186				return r;
1187			}
1188		""
1189	end
1190
1191	case bool_mat3
1192		version 310 es
1193		values
1194		{
1195			input bvec3 in0 = [ bvec3(true, false, true) | bvec3(true, true, false) ];
1196			output bvec3 out0 = [ bvec3(true, false, true) | bvec3(false, true, false) ];
1197		}
1198
1199		both ""
1200			#version 310 es
1201			precision highp int;
1202			precision highp float;
1203			${DECLARATIONS}
1204
1205			mat3[3] func(mat3[3]);
1206			void main()
1207			{
1208				${SETUP}
1209				mat3[3] a, b;
1210				a[0] = mat3(in0.x, in0.y, in0.z,
1211							in0.x, in0.y, in0.z,
1212							in0.x, in0.y, in0.z);
1213				a[1] = mat3(in0.z, in0.x, in0.y,
1214							in0.z, in0.x, in0.y,
1215							in0.z, in0.x, in0.y);
1216				a[2] = mat3(in0.z, in0.z, in0.z,
1217							in0.y, in0.y, in0.y,
1218							in0.x, in0.x, in0.x);
1219
1220				b = func(a);
1221
1222				mat3 b0 = b[0];
1223				mat3 b1 = b[1];
1224				mat3 b2 = b[2];
1225
1226				float ret0 = b0[0][0];
1227				float ret1 = b1[1][1];
1228				float ret2 = b2[2][2];
1229
1230				out0 = bvec3(ret0, ret1, ret2);
1231				${OUTPUT}
1232			}
1233
1234			mat3[3] func(mat3[3] x)
1235			{
1236				mat3[3] r;
1237				r[0] = x[1];
1238				r[1] = x[2];
1239				r[2] = x[0];
1240				return r;
1241			}
1242		""
1243	end
1244
1245end # unnamed_parameter
1246
1247group declaration "Declaring arrays"
1248
1249	case implicit_size_float
1250		version 310 es
1251		values
1252		{
1253			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(7.4, -1.0, 2.0) | vec3(3.0, 1.6, -2.0) ];
1254			output vec3 out0 = [ vec3(2.0, 0.5, 1.0) | vec3(2.0, 7.4, -1.0) | vec3(-2.0, 3.0, 1.6) ];
1255		}
1256
1257		both ""
1258			#version 310 es
1259			precision highp float;
1260			${DECLARATIONS}
1261
1262			void main()
1263			{
1264				${SETUP}
1265				float[] x = float[] (in0.z, in0.x, in0.y);
1266				float[] y = x;
1267
1268				out0 = vec3(y[0], y[1], y[2]);
1269				${OUTPUT}
1270			}
1271		""
1272	end
1273
1274	case implicit_size_int
1275		version 310 es
1276		values
1277		{
1278			input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(7, -1, 2) | ivec3(3, 1, -2) ];
1279			output ivec3 out0 = [ ivec3(2, 0, 1) | ivec3(2, 7, -1) | ivec3(-2, 3, 1) ];
1280		}
1281
1282		both ""
1283			#version 310 es
1284			precision highp int;
1285			precision highp float;
1286			${DECLARATIONS}
1287
1288			void main()
1289			{
1290				${SETUP}
1291				int[] x = int[] (in0.z, in0.x, in0.y);
1292				int[] y = x;
1293
1294				out0 = ivec3(y[0], y[1], y[2]);
1295				${OUTPUT}
1296			}
1297		""
1298	end
1299
1300	case implicit_size_bool
1301		version 310 es
1302		values
1303		{
1304			input bvec3 in0 = [ bvec3(false, true, true) ];
1305			output bvec3 out0 = [ bvec3(true, false, true) ];
1306		}
1307
1308		both ""
1309			#version 310 es
1310			precision highp int;
1311			precision highp float;
1312			${DECLARATIONS}
1313
1314			void main()
1315			{
1316				${SETUP}
1317				bool[] x = bool[] (in0.z, in0.x, in0.y);
1318				bool[] y = x;
1319
1320				out0 = bvec3(y[0], y[1], y[2]);
1321				${OUTPUT}
1322			}
1323		""
1324	end
1325
1326	case implicit_size_struct
1327		version 310 es
1328		values
1329		{
1330			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1331			output vec3 out0 = [ vec3(-1.0, -0.5, 2.0) ];
1332		}
1333
1334		both ""
1335			#version 310 es
1336			precision highp float;
1337			${DECLARATIONS}
1338
1339			struct test
1340			{
1341				float f;
1342				vec3 v;
1343			};
1344
1345			void main()
1346			{
1347				${SETUP}
1348
1349				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
1350				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
1351				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
1352
1353				test[] x = test[] (c, b, a);
1354				test[] y = x;
1355
1356				out0 = vec3(y[0].v.x, y[1].v.y, y[2].v.z);
1357				${OUTPUT}
1358			}
1359		""
1360	end
1361
1362	case implicit_size_float_vec3
1363		version 310 es
1364		values
1365		{
1366			input vec3 in0 =	[ vec3(0.5, 1.0, 2.0) | vec3(-0.5, 11.2, -1.0) ];
1367			output vec3 out0 = [ vec3(0.5, -2.0, 1.0) | vec3(-0.5, 1.0, 11.2) ];
1368		}
1369
1370		both ""
1371			#version 310 es
1372			precision highp float;
1373			${DECLARATIONS}
1374
1375			void main()
1376			{
1377				${SETUP}
1378				vec3[] x = vec3[] (	vec3(in0.x, in0.y, -in0.z)	,
1379									vec3(in0.y, -in0.z, in0.x)	,
1380									vec3(-in0.z, in0.x, in0.y)	);
1381				vec3[] y = x;
1382				out0 = vec3(y[0].x, y[1].y, y[2].z);
1383				${OUTPUT}
1384			}
1385		""
1386	end
1387
1388	case implicit_size_int_ivec3
1389		version 310 es
1390		values
1391		{
1392			input ivec3 in0 =	[ ivec3(0, 1, 2) | ivec3(5, 11, -1) ];
1393			output ivec3 out0 = [ ivec3(0, -2, 1) | ivec3(5, 1, 11) ];
1394		}
1395
1396		both ""
1397			#version 310 es
1398			precision highp int;
1399			precision highp float;
1400			${DECLARATIONS}
1401
1402			void main()
1403			{
1404				${SETUP}
1405				ivec3[] x = ivec3[] (	ivec3(in0.x, in0.y, -in0.z)	,
1406										ivec3(in0.y, -in0.z, in0.x)	,
1407										ivec3(-in0.z, in0.x, in0.y)	);
1408				ivec3[] y = x;
1409				out0 = ivec3(y[0].x, y[1].y, y[2].z);
1410				${OUTPUT}
1411			}
1412		""
1413	end
1414
1415	case implicit_size_bool_bvec3
1416		version 310 es
1417		values
1418		{
1419			input bvec3 in0 =	[ bvec3(true, false, true) ];
1420			output bvec3 out0 = [ bvec3(true, true, false) ];
1421		}
1422
1423		both ""
1424			#version 310 es
1425			precision highp int;
1426			precision highp float;
1427			${DECLARATIONS}
1428
1429			void main()
1430			{
1431				${SETUP}
1432				bvec3[] x = bvec3[] (	bvec3(in0.x, in0.y, in0.z)	,
1433										bvec3(in0.y, in0.z, in0.x)	,
1434										bvec3(in0.z, in0.x, in0.y)	);
1435				bvec3[] y = x;
1436				out0 = bvec3(y[0].x, y[1].y, y[2].z);
1437				${OUTPUT}
1438			}
1439		""
1440	end
1441
1442	case implicit_size_float_mat3
1443		version 310 es
1444		values
1445		{
1446			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) | vec3(-1.5, 0.0, -2.3) ];
1447			output vec3 out0 = [ vec3(0.5, -1.0, 1.0) | vec3(-1.5, 0.0, 0.0) ];
1448		}
1449
1450		both ""
1451			#version 310 es
1452			precision highp float;
1453			${DECLARATIONS}
1454
1455			void main()
1456			{
1457				${SETUP}
1458				mat3[] a = mat3[] (	mat3(	in0.x, in0.y, in0.z,
1459											in0.x, in0.y, in0.z,
1460											in0.x, in0.y, in0.z)	,
1461									mat3(	in0.z, in0.x, -in0.y,
1462											in0.z, in0.x, -in0.y,
1463											in0.z, in0.x, -in0.y)	,
1464									mat3(	-in0.z, -in0.z, in0.z,
1465											-in0.y, -in0.y, in0.y,
1466											-in0.x, -in0.x, in0.x)	);
1467
1468				mat3 a0 = a[0];
1469				mat3 a1 = a[1];
1470				mat3 a2 = a[2];
1471
1472				float ret0 = a0[2][0];
1473				float ret1 = a1[0][2];
1474				float ret2 = a2[1][2];
1475
1476				out0 = vec3(ret0, ret1, ret2);
1477				${OUTPUT}
1478			}
1479		""
1480	end
1481
1482	case implicit_size_int_mat3
1483		version 310 es
1484		values
1485		{
1486			input ivec3 in0 = [ ivec3(0, 1, 2) | ivec3(-1, 0, -2) ];
1487			output ivec3 out0 = [ ivec3(0, -1, 1) | ivec3(-1, 0, 0) ];
1488		}
1489
1490		both ""
1491			#version 310 es
1492			precision highp int;
1493			precision highp float;
1494			${DECLARATIONS}
1495
1496			void main()
1497			{
1498				${SETUP}
1499				mat3[] a = mat3[] (	mat3(	in0.x, in0.y, in0.z,
1500											in0.x, in0.y, in0.z,
1501											in0.x, in0.y, in0.z)	,
1502									mat3(	in0.z, in0.x, -in0.y,
1503											in0.z, in0.x, -in0.y,
1504											in0.z, in0.x, -in0.y)	,
1505									mat3(	-in0.z, -in0.z, in0.z,
1506											-in0.y, -in0.y, in0.y,
1507											-in0.x, -in0.x, in0.x)	);
1508
1509				mat3 a0 = a[0];
1510				mat3 a1 = a[1];
1511				mat3 a2 = a[2];
1512
1513				float ret0 = a0[2][0];
1514				float ret1 = a1[0][2];
1515				float ret2 = a2[1][2];
1516
1517				out0 = ivec3(ret0, ret1, ret2);
1518				${OUTPUT}
1519			}
1520		""
1521	end
1522
1523	case implicit_size_bool_mat3
1524		version 310 es
1525		values
1526		{
1527			input bvec3 in0 = [ bvec3(true, false, true) ];
1528			output bvec3 out0 = [ bvec3(true, false, false) ];
1529		}
1530
1531		both ""
1532			#version 310 es
1533			precision highp int;
1534			precision highp float;
1535			${DECLARATIONS}
1536
1537			void main()
1538			{
1539				${SETUP}
1540				mat3[] a = mat3[] (	mat3(	in0.x, in0.y, in0.z,
1541											in0.x, in0.y, in0.z,
1542											in0.x, in0.y, in0.z)	,
1543									mat3(	in0.z, in0.x, in0.y,
1544											in0.z, in0.x, in0.y,
1545											in0.z, in0.x, in0.y)	,
1546									mat3(	in0.z, in0.z, in0.z,
1547											in0.y, in0.y, in0.y,
1548											in0.x, in0.x, in0.x)	);
1549
1550				mat3 a0 = a[0];
1551				mat3 a1 = a[1];
1552				mat3 a2 = a[2];
1553
1554				float ret0 = a0[2][0];
1555				float ret1 = a1[0][2];
1556				float ret2 = a2[1][2];
1557
1558				out0 = bvec3(ret0, ret1, ret2);
1559				${OUTPUT}
1560			}
1561		""
1562	end
1563
1564
1565	case constant_expression_array_size
1566		version 310 es
1567
1568		both ""
1569			#version 310 es
1570			precision highp float;
1571			${DECLARATIONS}
1572
1573			const int a = 4;
1574
1575			void main ()
1576			{
1577				const int b = 5;
1578				float[a] array1;
1579				float[b] array2;
1580				float[array1.length()] array3;
1581				float[a+b] array4;
1582				${OUTPUT}
1583			}
1584		""
1585	end
1586
1587	case constant_expression_array_access
1588		version 310 es
1589		values
1590		{
1591			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1592			output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ];
1593		}
1594
1595		both ""
1596			#version 310 es
1597			precision highp float;
1598			${DECLARATIONS}
1599
1600			const int a = 3;
1601
1602			void main ()
1603			{
1604				${SETUP}
1605				const int b = 2;
1606				float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [a];
1607				float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [b+2];
1608				float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [5];
1609				out0 = vec3(x, y, z);
1610				${OUTPUT}
1611			}
1612		""
1613	end
1614
1615	case dynamic_expression_array_access
1616		version 310 es
1617		values
1618		{
1619			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1620			input ivec2 in1 = ivec2(3, 2);
1621			output vec3 out0 = [ vec3(-2.0, -1.0, -0.5) ];
1622		}
1623
1624		both ""
1625			#version 310 es
1626			precision highp int;
1627			precision highp float;
1628			${DECLARATIONS}
1629
1630			void main ()
1631			{
1632				${SETUP}
1633				float x = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x];
1634				float y = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.y+2];
1635				float z = float[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x) [in1.x+in1.y];
1636				out0 = vec3(x, y, z);
1637				${OUTPUT}
1638			}
1639		""
1640	end
1641
1642	case multiple_declarations_single_statement_explicit
1643		version 310 es
1644		values
1645		{
1646			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1647			output vec3 out0 = [ vec3(2.0, -1.0, 0.5) ];
1648		}
1649
1650		both ""
1651			#version 310 es
1652			precision highp float;
1653			${DECLARATIONS}
1654
1655			void main ()
1656			{
1657				${SETUP}
1658				float[] x = float[6] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
1659						y = float[2] (in0.x, -in0.y);
1660				out0 = vec3(x[2], y[1], x[0]);
1661				${OUTPUT}
1662			}
1663		""
1664	end
1665
1666	case multiple_declarations_single_statement_implicit
1667		version 310 es
1668		values
1669		{
1670			input ivec3 in0 = [ ivec3(5, 1, 2) ];
1671			output ivec3 out0 = [ ivec3(2, -1, 5) ];
1672		}
1673
1674		both ""
1675			#version 310 es
1676			precision highp int;
1677			precision highp float;
1678			${DECLARATIONS}
1679
1680			void main ()
1681			{
1682				${SETUP}
1683				int[] x = int[] (in0.x, in0.y, in0.z, -in0.z, -in0.y, -in0.x),
1684					  y = int[] (in0.x, -in0.y);
1685				out0 = ivec3(x[2], y[1], x[0]);
1686				${OUTPUT}
1687			}
1688		""
1689	end
1690
1691end # declaration
1692
1693group length "Array length method"
1694
1695	case float
1696		version 310 es
1697		values
1698		{
1699			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1700			output ivec3 out0 = [ ivec3(3, 5, 13) ];
1701		}
1702
1703		both ""
1704			#version 310 es
1705			precision highp float;
1706			${DECLARATIONS}
1707
1708			void main()
1709			{
1710				${SETUP}
1711				float[] x = float[3] (in0.z, in0.x, in0.y);
1712				float[] y = float[] (in0.z, in0.x, in0.y, in0.x, in0.y);
1713				float[13] z;
1714
1715				out0 = ivec3(x.length(), y.length(), z.length());
1716				${OUTPUT}
1717			}
1718		""
1719	end
1720
1721	case int
1722		version 310 es
1723		values
1724		{
1725			input ivec3 in0 = [ ivec3(0, 1, 2) ];
1726			output ivec3 out0 = [ ivec3(3, 5, 13) ];
1727		}
1728
1729		both ""
1730			#version 310 es
1731			precision highp int;
1732			precision highp float;
1733			${DECLARATIONS}
1734
1735			void main()
1736			{
1737				${SETUP}
1738				int[] x = int[3] (in0.z, in0.x, in0.y);
1739				int[] y = int[] (in0.z, in0.x, in0.y, in0.x, in0.y);
1740				int[13] z;
1741
1742				out0 = ivec3(x.length(), y.length(), z.length());
1743				${OUTPUT}
1744			}
1745		""
1746	end
1747
1748	case bool
1749		version 310 es
1750		values
1751		{
1752			input bvec3 in0 = [ bvec3(true, false, true) ];
1753			output ivec3 out0 = [ ivec3(3, 5, 13) ];
1754		}
1755
1756		both ""
1757			#version 310 es
1758			precision highp int;
1759			precision highp float;
1760			${DECLARATIONS}
1761
1762			void main()
1763			{
1764				${SETUP}
1765				bool[] x = bool[3] (in0.z, in0.x, in0.y);
1766				bool[] y = bool[] (in0.z, in0.x, in0.y, in0.x, in0.y);
1767				bool[13] z;
1768
1769				out0 = ivec3(x.length(), y.length(), z.length());
1770				${OUTPUT}
1771			}
1772		""
1773	end
1774
1775	case struct
1776		version 310 es
1777		values
1778		{
1779			input vec3 in0 = [ vec3(0.5, 1.0, 2.0) ];
1780			output ivec3 out0 = [ ivec3(3, 5, 13) ];
1781		}
1782
1783		both ""
1784			#version 310 es
1785			precision highp float;
1786			${DECLARATIONS}
1787
1788			struct test
1789			{
1790				float f;
1791				vec3 v;
1792			};
1793
1794			void main()
1795			{
1796				${SETUP}
1797
1798				test a = test(in0.z, vec3(in0.x, in0.y, in0.z));
1799				test b = test(in0.y, vec3(-in0.z, -in0.x, -in0.y));
1800				test c = test(in0.x, vec3(-in0.y, in0.z, -in0.x));
1801
1802				test[] x = test[3] (a, b, c);
1803				test[] y = test[] (c, a, b, b, a);
1804				test[13] z;
1805
1806				out0 = ivec3(x.length(), y.length(), z.length());
1807				${OUTPUT}
1808			}
1809		""
1810	end
1811
1812end # length
1813