• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# WARNING: This file is auto-generated. Do NOT modify it manually, but rather
2# modify the generating script file. Otherwise changes will be lost!
3
4group arithmetic "Arithmetic operations"
5
6	group input_before_literal "Input before literal"
7
8		group add "Addition"
9
10			case int_to_float
11				version 320 es
12				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
13				values
14				{
15					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
16					output float out0 = [ 4.0 | 3.0 | 3.0 | 5.0 | 7.0 ];
17				}
18
19				both ""
20					#version 320 es
21					precision highp float;
22					${DECLARATIONS}
23
24					void main()
25					{
26						${SETUP}
27						out0 = in0 + 2.0;
28						${OUTPUT}
29					}
30				""
31			end
32			case int_to_uint
33				version 320 es
34				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
35				values
36				{
37					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
38					output uint out0 = [ 4 | 3 | 3 | 5 | 7 ];
39				}
40
41				both ""
42					#version 320 es
43					precision highp float;
44					${DECLARATIONS}
45
46					void main()
47					{
48						${SETUP}
49						out0 = in0 + 2;
50						${OUTPUT}
51					}
52				""
53			end
54			case int_to_vec2
55				version 320 es
56				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
57				values
58				{
59					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
60					output vec2 out0 = [ vec2(3.0, 4.0) | vec2(2.0, 3.0) | vec2(2.0, 3.0) | vec2(4.0, 5.0) | vec2(6.0, 7.0) ];
61				}
62
63				both ""
64					#version 320 es
65					precision highp float;
66					${DECLARATIONS}
67
68					void main()
69					{
70						${SETUP}
71						out0 = in0 + vec2(1.0, 2.0);
72						${OUTPUT}
73					}
74				""
75			end
76			case int_to_vec3
77				version 320 es
78				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
79				values
80				{
81					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
82					output vec3 out0 = [ vec3(3.0, 4.0, 5.0) | vec3(2.0, 3.0, 4.0) | vec3(2.0, 3.0, 4.0) | vec3(4.0, 5.0, 6.0) | vec3(6.0, 7.0, 8.0) ];
83				}
84
85				both ""
86					#version 320 es
87					precision highp float;
88					${DECLARATIONS}
89
90					void main()
91					{
92						${SETUP}
93						out0 = in0 + vec3(1.0, 2.0, 3.0);
94						${OUTPUT}
95					}
96				""
97			end
98			case int_to_vec4
99				version 320 es
100				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
101				values
102				{
103					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
104					output vec4 out0 = [ vec4(3.0, 4.0, 5.0, 6.0) | vec4(2.0, 3.0, 4.0, 5.0) | vec4(2.0, 3.0, 4.0, 5.0) | vec4(4.0, 5.0, 6.0, 7.0) | vec4(6.0, 7.0, 8.0, 9.0) ];
105				}
106
107				both ""
108					#version 320 es
109					precision highp float;
110					${DECLARATIONS}
111
112					void main()
113					{
114						${SETUP}
115						out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
116						${OUTPUT}
117					}
118				""
119			end
120			case int_to_uvec2
121				version 320 es
122				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
123				values
124				{
125					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
126					output uvec2 out0 = [ uvec2(3, 4) | uvec2(2, 3) | uvec2(2, 3) | uvec2(4, 5) | uvec2(6, 7) ];
127				}
128
129				both ""
130					#version 320 es
131					precision highp float;
132					${DECLARATIONS}
133
134					void main()
135					{
136						${SETUP}
137						out0 = in0 + uvec2(1, 2);
138						${OUTPUT}
139					}
140				""
141			end
142			case int_to_uvec3
143				version 320 es
144				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
145				values
146				{
147					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
148					output uvec3 out0 = [ uvec3(3, 4, 5) | uvec3(2, 3, 4) | uvec3(2, 3, 4) | uvec3(4, 5, 6) | uvec3(6, 7, 8) ];
149				}
150
151				both ""
152					#version 320 es
153					precision highp float;
154					${DECLARATIONS}
155
156					void main()
157					{
158						${SETUP}
159						out0 = in0 + uvec3(1, 2, 3);
160						${OUTPUT}
161					}
162				""
163			end
164			case int_to_uvec4
165				version 320 es
166				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
167				values
168				{
169					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
170					output uvec4 out0 = [ uvec4(3, 4, 5, 6) | uvec4(2, 3, 4, 5) | uvec4(2, 3, 4, 5) | uvec4(4, 5, 6, 7) | uvec4(6, 7, 8, 9) ];
171				}
172
173				both ""
174					#version 320 es
175					precision highp float;
176					${DECLARATIONS}
177
178					void main()
179					{
180						${SETUP}
181						out0 = in0 + uvec4(1, 2, 3, 4);
182						${OUTPUT}
183					}
184				""
185			end
186			case uint_to_float
187				version 320 es
188				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
189				values
190				{
191					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
192					output float out0 = [ 3.0 | 5.0 | 6.0 | 9.0 | 13.0 ];
193				}
194
195				both ""
196					#version 320 es
197					precision highp float;
198					${DECLARATIONS}
199
200					void main()
201					{
202						${SETUP}
203						out0 = in0 + 2.0;
204						${OUTPUT}
205					}
206				""
207			end
208			case uint_to_vec2
209				version 320 es
210				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
211				values
212				{
213					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
214					output vec2 out0 = [ vec2(2.0, 3.0) | vec2(4.0, 5.0) | vec2(5.0, 6.0) | vec2(8.0, 9.0) | vec2(12.0, 13.0) ];
215				}
216
217				both ""
218					#version 320 es
219					precision highp float;
220					${DECLARATIONS}
221
222					void main()
223					{
224						${SETUP}
225						out0 = in0 + vec2(1.0, 2.0);
226						${OUTPUT}
227					}
228				""
229			end
230			case uint_to_vec3
231				version 320 es
232				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
233				values
234				{
235					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
236					output vec3 out0 = [ vec3(2.0, 3.0, 4.0) | vec3(4.0, 5.0, 6.0) | vec3(5.0, 6.0, 7.0) | vec3(8.0, 9.0, 10.0) | vec3(12.0, 13.0, 14.0) ];
237				}
238
239				both ""
240					#version 320 es
241					precision highp float;
242					${DECLARATIONS}
243
244					void main()
245					{
246						${SETUP}
247						out0 = in0 + vec3(1.0, 2.0, 3.0);
248						${OUTPUT}
249					}
250				""
251			end
252			case uint_to_vec4
253				version 320 es
254				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
255				values
256				{
257					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
258					output vec4 out0 = [ vec4(2.0, 3.0, 4.0, 5.0) | vec4(4.0, 5.0, 6.0, 7.0) | vec4(5.0, 6.0, 7.0, 8.0) | vec4(8.0, 9.0, 10.0, 11.0) | vec4(12.0, 13.0, 14.0, 15.0) ];
259				}
260
261				both ""
262					#version 320 es
263					precision highp float;
264					${DECLARATIONS}
265
266					void main()
267					{
268						${SETUP}
269						out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
270						${OUTPUT}
271					}
272				""
273			end
274			case ivec2_to_uvec2
275				version 320 es
276				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
277				values
278				{
279					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
280					output uvec2 out0 = [ uvec2(2, 4) | uvec2(3, 3) | uvec2(4, 9) ];
281				}
282
283				both ""
284					#version 320 es
285					precision highp float;
286					${DECLARATIONS}
287
288					void main()
289					{
290						${SETUP}
291						out0 = in0 + uvec2(1, 2);
292						${OUTPUT}
293					}
294				""
295			end
296			case ivec2_to_vec2
297				version 320 es
298				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
299				values
300				{
301					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
302					output vec2 out0 = [ vec2(2.0, 4.0) | vec2(3.0, 3.0) | vec2(4.0, 9.0) ];
303				}
304
305				both ""
306					#version 320 es
307					precision highp float;
308					${DECLARATIONS}
309
310					void main()
311					{
312						${SETUP}
313						out0 = in0 + vec2(1.0, 2.0);
314						${OUTPUT}
315					}
316				""
317			end
318			case uvec2_to_vec2
319				version 320 es
320				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
321				values
322				{
323					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
324					output vec2 out0 = [ vec2(3.0, 5.0) | vec2(5.0, 8.0) | vec2(2.0, 15.0) ];
325				}
326
327				both ""
328					#version 320 es
329					precision highp float;
330					${DECLARATIONS}
331
332					void main()
333					{
334						${SETUP}
335						out0 = in0 + vec2(1.0, 2.0);
336						${OUTPUT}
337					}
338				""
339			end
340			case ivec3_to_uvec3
341				version 320 es
342				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
343				values
344				{
345					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
346					output uvec3 out0 = [ uvec3(2, 4, 6) | uvec3(3, 3, 5) | uvec3(4, 9, 5) ];
347				}
348
349				both ""
350					#version 320 es
351					precision highp float;
352					${DECLARATIONS}
353
354					void main()
355					{
356						${SETUP}
357						out0 = in0 + uvec3(1, 2, 3);
358						${OUTPUT}
359					}
360				""
361			end
362			case ivec3_to_vec3
363				version 320 es
364				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
365				values
366				{
367					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
368					output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(3.0, 3.0, 5.0) | vec3(4.0, 9.0, 5.0) ];
369				}
370
371				both ""
372					#version 320 es
373					precision highp float;
374					${DECLARATIONS}
375
376					void main()
377					{
378						${SETUP}
379						out0 = in0 + vec3(1.0, 2.0, 3.0);
380						${OUTPUT}
381					}
382				""
383			end
384			case uvec3_to_vec3
385				version 320 es
386				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
387				values
388				{
389					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
390					output vec3 out0 = [ vec3(3.0, 5.0, 8.0) | vec3(5.0, 8.0, 5.0) | vec3(2.0, 15.0, 10.0) ];
391				}
392
393				both ""
394					#version 320 es
395					precision highp float;
396					${DECLARATIONS}
397
398					void main()
399					{
400						${SETUP}
401						out0 = in0 + vec3(1.0, 2.0, 3.0);
402						${OUTPUT}
403					}
404				""
405			end
406			case ivec4_to_uvec4
407				version 320 es
408				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
409				values
410				{
411					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
412					output uvec4 out0 = [ uvec4(2, 4, 6, 8) | uvec4(3, 3, 5, 10) | uvec4(4, 9, 5, 9) ];
413				}
414
415				both ""
416					#version 320 es
417					precision highp float;
418					${DECLARATIONS}
419
420					void main()
421					{
422						${SETUP}
423						out0 = in0 + uvec4(1, 2, 3, 4);
424						${OUTPUT}
425					}
426				""
427			end
428			case ivec4_to_vec4
429				version 320 es
430				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
431				values
432				{
433					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
434					output vec4 out0 = [ vec4(2.0, 4.0, 6.0, 8.0) | vec4(3.0, 3.0, 5.0, 10.0) | vec4(4.0, 9.0, 5.0, 9.0) ];
435				}
436
437				both ""
438					#version 320 es
439					precision highp float;
440					${DECLARATIONS}
441
442					void main()
443					{
444						${SETUP}
445						out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
446						${OUTPUT}
447					}
448				""
449			end
450			case uvec4_to_vec4
451				version 320 es
452				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
453				values
454				{
455					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
456					output vec4 out0 = [ vec4(3.0, 5.0, 8.0, 12.0) | vec4(5.0, 8.0, 5.0, 13.0) | vec4(2.0, 15.0, 10.0, 8.0) ];
457				}
458
459				both ""
460					#version 320 es
461					precision highp float;
462					${DECLARATIONS}
463
464					void main()
465					{
466						${SETUP}
467						out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
468						${OUTPUT}
469					}
470				""
471			end
472
473		end # add
474		group sub "Subtraction"
475
476			case int_to_float
477				version 320 es
478				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
479				values
480				{
481					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
482					output float out0 = [ 0.0 | -1.0 | -1.0 | 1.0 | 3.0 ];
483				}
484
485				both ""
486					#version 320 es
487					precision highp float;
488					${DECLARATIONS}
489
490					void main()
491					{
492						${SETUP}
493						out0 = in0 - 2.0;
494						${OUTPUT}
495					}
496				""
497			end
498			case int_to_vec2
499				version 320 es
500				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
501				values
502				{
503					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
504					output vec2 out0 = [ vec2(1.0, 0.0) | vec2(0.0, -1.0) | vec2(0.0, -1.0) | vec2(2.0, 1.0) | vec2(4.0, 3.0) ];
505				}
506
507				both ""
508					#version 320 es
509					precision highp float;
510					${DECLARATIONS}
511
512					void main()
513					{
514						${SETUP}
515						out0 = in0 - vec2(1.0, 2.0);
516						${OUTPUT}
517					}
518				""
519			end
520			case int_to_vec3
521				version 320 es
522				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
523				values
524				{
525					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
526					output vec3 out0 = [ vec3(1.0, 0.0, -1.0) | vec3(0.0, -1.0, -2.0) | vec3(0.0, -1.0, -2.0) | vec3(2.0, 1.0, 0.0) | vec3(4.0, 3.0, 2.0) ];
527				}
528
529				both ""
530					#version 320 es
531					precision highp float;
532					${DECLARATIONS}
533
534					void main()
535					{
536						${SETUP}
537						out0 = in0 - vec3(1.0, 2.0, 3.0);
538						${OUTPUT}
539					}
540				""
541			end
542			case int_to_vec4
543				version 320 es
544				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
545				values
546				{
547					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
548					output vec4 out0 = [ vec4(1.0, 0.0, -1.0, -2.0) | vec4(0.0, -1.0, -2.0, -3.0) | vec4(0.0, -1.0, -2.0, -3.0) | vec4(2.0, 1.0, 0.0, -1.0) | vec4(4.0, 3.0, 2.0, 1.0) ];
549				}
550
551				both ""
552					#version 320 es
553					precision highp float;
554					${DECLARATIONS}
555
556					void main()
557					{
558						${SETUP}
559						out0 = in0 - vec4(1.0, 2.0, 3.0, 4.0);
560						${OUTPUT}
561					}
562				""
563			end
564			case uint_to_float
565				version 320 es
566				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
567				values
568				{
569					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
570					output float out0 = [ -1.0 | 1.0 | 2.0 | 5.0 | 9.0 ];
571				}
572
573				both ""
574					#version 320 es
575					precision highp float;
576					${DECLARATIONS}
577
578					void main()
579					{
580						${SETUP}
581						out0 = in0 - 2.0;
582						${OUTPUT}
583					}
584				""
585			end
586			case uint_to_vec2
587				version 320 es
588				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
589				values
590				{
591					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
592					output vec2 out0 = [ vec2(0.0, -1.0) | vec2(2.0, 1.0) | vec2(3.0, 2.0) | vec2(6.0, 5.0) | vec2(10.0, 9.0) ];
593				}
594
595				both ""
596					#version 320 es
597					precision highp float;
598					${DECLARATIONS}
599
600					void main()
601					{
602						${SETUP}
603						out0 = in0 - vec2(1.0, 2.0);
604						${OUTPUT}
605					}
606				""
607			end
608			case uint_to_vec3
609				version 320 es
610				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
611				values
612				{
613					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
614					output vec3 out0 = [ vec3(0.0, -1.0, -2.0) | vec3(2.0, 1.0, 0.0) | vec3(3.0, 2.0, 1.0) | vec3(6.0, 5.0, 4.0) | vec3(10.0, 9.0, 8.0) ];
615				}
616
617				both ""
618					#version 320 es
619					precision highp float;
620					${DECLARATIONS}
621
622					void main()
623					{
624						${SETUP}
625						out0 = in0 - vec3(1.0, 2.0, 3.0);
626						${OUTPUT}
627					}
628				""
629			end
630			case uint_to_vec4
631				version 320 es
632				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
633				values
634				{
635					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
636					output vec4 out0 = [ vec4(0.0, -1.0, -2.0, -3.0) | vec4(2.0, 1.0, 0.0, -1.0) | vec4(3.0, 2.0, 1.0, 0.0) | vec4(6.0, 5.0, 4.0, 3.0) | vec4(10.0, 9.0, 8.0, 7.0) ];
637				}
638
639				both ""
640					#version 320 es
641					precision highp float;
642					${DECLARATIONS}
643
644					void main()
645					{
646						${SETUP}
647						out0 = in0 - vec4(1.0, 2.0, 3.0, 4.0);
648						${OUTPUT}
649					}
650				""
651			end
652			case ivec2_to_vec2
653				version 320 es
654				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
655				values
656				{
657					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
658					output vec2 out0 = [ vec2(0.0, 0.0) | vec2(1.0, -1.0) | vec2(2.0, 5.0) ];
659				}
660
661				both ""
662					#version 320 es
663					precision highp float;
664					${DECLARATIONS}
665
666					void main()
667					{
668						${SETUP}
669						out0 = in0 - vec2(1.0, 2.0);
670						${OUTPUT}
671					}
672				""
673			end
674			case uvec2_to_vec2
675				version 320 es
676				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
677				values
678				{
679					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
680					output vec2 out0 = [ vec2(1.0, 1.0) | vec2(3.0, 4.0) | vec2(0.0, 11.0) ];
681				}
682
683				both ""
684					#version 320 es
685					precision highp float;
686					${DECLARATIONS}
687
688					void main()
689					{
690						${SETUP}
691						out0 = in0 - vec2(1.0, 2.0);
692						${OUTPUT}
693					}
694				""
695			end
696			case ivec3_to_vec3
697				version 320 es
698				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
699				values
700				{
701					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
702					output vec3 out0 = [ vec3(0.0, 0.0, 0.0) | vec3(1.0, -1.0, -1.0) | vec3(2.0, 5.0, -1.0) ];
703				}
704
705				both ""
706					#version 320 es
707					precision highp float;
708					${DECLARATIONS}
709
710					void main()
711					{
712						${SETUP}
713						out0 = in0 - vec3(1.0, 2.0, 3.0);
714						${OUTPUT}
715					}
716				""
717			end
718			case uvec3_to_vec3
719				version 320 es
720				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
721				values
722				{
723					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
724					output vec3 out0 = [ vec3(1.0, 1.0, 2.0) | vec3(3.0, 4.0, -1.0) | vec3(0.0, 11.0, 4.0) ];
725				}
726
727				both ""
728					#version 320 es
729					precision highp float;
730					${DECLARATIONS}
731
732					void main()
733					{
734						${SETUP}
735						out0 = in0 - vec3(1.0, 2.0, 3.0);
736						${OUTPUT}
737					}
738				""
739			end
740			case ivec4_to_vec4
741				version 320 es
742				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
743				values
744				{
745					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
746					output vec4 out0 = [ vec4(0.0, 0.0, 0.0, 0.0) | vec4(1.0, -1.0, -1.0, 2.0) | vec4(2.0, 5.0, -1.0, 1.0) ];
747				}
748
749				both ""
750					#version 320 es
751					precision highp float;
752					${DECLARATIONS}
753
754					void main()
755					{
756						${SETUP}
757						out0 = in0 - vec4(1.0, 2.0, 3.0, 4.0);
758						${OUTPUT}
759					}
760				""
761			end
762			case uvec4_to_vec4
763				version 320 es
764				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
765				values
766				{
767					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
768					output vec4 out0 = [ vec4(1.0, 1.0, 2.0, 4.0) | vec4(3.0, 4.0, -1.0, 5.0) | vec4(0.0, 11.0, 4.0, 0.0) ];
769				}
770
771				both ""
772					#version 320 es
773					precision highp float;
774					${DECLARATIONS}
775
776					void main()
777					{
778						${SETUP}
779						out0 = in0 - vec4(1.0, 2.0, 3.0, 4.0);
780						${OUTPUT}
781					}
782				""
783			end
784
785		end # sub
786		group mul "Multiplication"
787
788			case int_to_float
789				version 320 es
790				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
791				values
792				{
793					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
794					output float out0 = [ 4.0 | 2.0 | 2.0 | 6.0 | 10.0 ];
795				}
796
797				both ""
798					#version 320 es
799					precision highp float;
800					${DECLARATIONS}
801
802					void main()
803					{
804						${SETUP}
805						out0 = in0 * 2.0;
806						${OUTPUT}
807					}
808				""
809			end
810			case int_to_uint
811				version 320 es
812				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
813				values
814				{
815					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
816					output uint out0 = [ 4 | 2 | 2 | 6 | 10 ];
817				}
818
819				both ""
820					#version 320 es
821					precision highp float;
822					${DECLARATIONS}
823
824					void main()
825					{
826						${SETUP}
827						out0 = in0 * 2;
828						${OUTPUT}
829					}
830				""
831			end
832			case int_to_vec2
833				version 320 es
834				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
835				values
836				{
837					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
838					output vec2 out0 = [ vec2(2.0, 4.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(3.0, 6.0) | vec2(5.0, 10.0) ];
839				}
840
841				both ""
842					#version 320 es
843					precision highp float;
844					${DECLARATIONS}
845
846					void main()
847					{
848						${SETUP}
849						out0 = in0 * vec2(1.0, 2.0);
850						${OUTPUT}
851					}
852				""
853			end
854			case int_to_vec3
855				version 320 es
856				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
857				values
858				{
859					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
860					output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(3.0, 6.0, 9.0) | vec3(5.0, 10.0, 15.0) ];
861				}
862
863				both ""
864					#version 320 es
865					precision highp float;
866					${DECLARATIONS}
867
868					void main()
869					{
870						${SETUP}
871						out0 = in0 * vec3(1.0, 2.0, 3.0);
872						${OUTPUT}
873					}
874				""
875			end
876			case int_to_vec4
877				version 320 es
878				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
879				values
880				{
881					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
882					output vec4 out0 = [ vec4(2.0, 4.0, 6.0, 8.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(3.0, 6.0, 9.0, 12.0) | vec4(5.0, 10.0, 15.0, 20.0) ];
883				}
884
885				both ""
886					#version 320 es
887					precision highp float;
888					${DECLARATIONS}
889
890					void main()
891					{
892						${SETUP}
893						out0 = in0 * vec4(1.0, 2.0, 3.0, 4.0);
894						${OUTPUT}
895					}
896				""
897			end
898			case int_to_uvec2
899				version 320 es
900				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
901				values
902				{
903					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
904					output uvec2 out0 = [ uvec2(2, 4) | uvec2(1, 2) | uvec2(1, 2) | uvec2(3, 6) | uvec2(5, 10) ];
905				}
906
907				both ""
908					#version 320 es
909					precision highp float;
910					${DECLARATIONS}
911
912					void main()
913					{
914						${SETUP}
915						out0 = in0 * uvec2(1, 2);
916						${OUTPUT}
917					}
918				""
919			end
920			case int_to_uvec3
921				version 320 es
922				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
923				values
924				{
925					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
926					output uvec3 out0 = [ uvec3(2, 4, 6) | uvec3(1, 2, 3) | uvec3(1, 2, 3) | uvec3(3, 6, 9) | uvec3(5, 10, 15) ];
927				}
928
929				both ""
930					#version 320 es
931					precision highp float;
932					${DECLARATIONS}
933
934					void main()
935					{
936						${SETUP}
937						out0 = in0 * uvec3(1, 2, 3);
938						${OUTPUT}
939					}
940				""
941			end
942			case int_to_uvec4
943				version 320 es
944				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
945				values
946				{
947					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
948					output uvec4 out0 = [ uvec4(2, 4, 6, 8) | uvec4(1, 2, 3, 4) | uvec4(1, 2, 3, 4) | uvec4(3, 6, 9, 12) | uvec4(5, 10, 15, 20) ];
949				}
950
951				both ""
952					#version 320 es
953					precision highp float;
954					${DECLARATIONS}
955
956					void main()
957					{
958						${SETUP}
959						out0 = in0 * uvec4(1, 2, 3, 4);
960						${OUTPUT}
961					}
962				""
963			end
964			case uint_to_float
965				version 320 es
966				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
967				values
968				{
969					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
970					output float out0 = [ 2.0 | 6.0 | 8.0 | 14.0 | 22.0 ];
971				}
972
973				both ""
974					#version 320 es
975					precision highp float;
976					${DECLARATIONS}
977
978					void main()
979					{
980						${SETUP}
981						out0 = in0 * 2.0;
982						${OUTPUT}
983					}
984				""
985			end
986			case uint_to_vec2
987				version 320 es
988				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
989				values
990				{
991					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
992					output vec2 out0 = [ vec2(1.0, 2.0) | vec2(3.0, 6.0) | vec2(4.0, 8.0) | vec2(7.0, 14.0) | vec2(11.0, 22.0) ];
993				}
994
995				both ""
996					#version 320 es
997					precision highp float;
998					${DECLARATIONS}
999
1000					void main()
1001					{
1002						${SETUP}
1003						out0 = in0 * vec2(1.0, 2.0);
1004						${OUTPUT}
1005					}
1006				""
1007			end
1008			case uint_to_vec3
1009				version 320 es
1010				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1011				values
1012				{
1013					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
1014					output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(3.0, 6.0, 9.0) | vec3(4.0, 8.0, 12.0) | vec3(7.0, 14.0, 21.0) | vec3(11.0, 22.0, 33.0) ];
1015				}
1016
1017				both ""
1018					#version 320 es
1019					precision highp float;
1020					${DECLARATIONS}
1021
1022					void main()
1023					{
1024						${SETUP}
1025						out0 = in0 * vec3(1.0, 2.0, 3.0);
1026						${OUTPUT}
1027					}
1028				""
1029			end
1030			case uint_to_vec4
1031				version 320 es
1032				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1033				values
1034				{
1035					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
1036					output vec4 out0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(3.0, 6.0, 9.0, 12.0) | vec4(4.0, 8.0, 12.0, 16.0) | vec4(7.0, 14.0, 21.0, 28.0) | vec4(11.0, 22.0, 33.0, 44.0) ];
1037				}
1038
1039				both ""
1040					#version 320 es
1041					precision highp float;
1042					${DECLARATIONS}
1043
1044					void main()
1045					{
1046						${SETUP}
1047						out0 = in0 * vec4(1.0, 2.0, 3.0, 4.0);
1048						${OUTPUT}
1049					}
1050				""
1051			end
1052			case ivec2_to_uvec2
1053				version 320 es
1054				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1055				values
1056				{
1057					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
1058					output uvec2 out0 = [ uvec2(1, 4) | uvec2(2, 2) | uvec2(3, 14) ];
1059				}
1060
1061				both ""
1062					#version 320 es
1063					precision highp float;
1064					${DECLARATIONS}
1065
1066					void main()
1067					{
1068						${SETUP}
1069						out0 = in0 * uvec2(1, 2);
1070						${OUTPUT}
1071					}
1072				""
1073			end
1074			case ivec2_to_vec2
1075				version 320 es
1076				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1077				values
1078				{
1079					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
1080					output vec2 out0 = [ vec2(1.0, 4.0) | vec2(2.0, 2.0) | vec2(3.0, 14.0) ];
1081				}
1082
1083				both ""
1084					#version 320 es
1085					precision highp float;
1086					${DECLARATIONS}
1087
1088					void main()
1089					{
1090						${SETUP}
1091						out0 = in0 * vec2(1.0, 2.0);
1092						${OUTPUT}
1093					}
1094				""
1095			end
1096			case uvec2_to_vec2
1097				version 320 es
1098				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1099				values
1100				{
1101					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
1102					output vec2 out0 = [ vec2(2.0, 6.0) | vec2(4.0, 12.0) | vec2(1.0, 26.0) ];
1103				}
1104
1105				both ""
1106					#version 320 es
1107					precision highp float;
1108					${DECLARATIONS}
1109
1110					void main()
1111					{
1112						${SETUP}
1113						out0 = in0 * vec2(1.0, 2.0);
1114						${OUTPUT}
1115					}
1116				""
1117			end
1118			case ivec3_to_uvec3
1119				version 320 es
1120				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1121				values
1122				{
1123					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
1124					output uvec3 out0 = [ uvec3(1, 4, 9) | uvec3(2, 2, 6) | uvec3(3, 14, 6) ];
1125				}
1126
1127				both ""
1128					#version 320 es
1129					precision highp float;
1130					${DECLARATIONS}
1131
1132					void main()
1133					{
1134						${SETUP}
1135						out0 = in0 * uvec3(1, 2, 3);
1136						${OUTPUT}
1137					}
1138				""
1139			end
1140			case ivec3_to_vec3
1141				version 320 es
1142				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1143				values
1144				{
1145					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
1146					output vec3 out0 = [ vec3(1.0, 4.0, 9.0) | vec3(2.0, 2.0, 6.0) | vec3(3.0, 14.0, 6.0) ];
1147				}
1148
1149				both ""
1150					#version 320 es
1151					precision highp float;
1152					${DECLARATIONS}
1153
1154					void main()
1155					{
1156						${SETUP}
1157						out0 = in0 * vec3(1.0, 2.0, 3.0);
1158						${OUTPUT}
1159					}
1160				""
1161			end
1162			case uvec3_to_vec3
1163				version 320 es
1164				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1165				values
1166				{
1167					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
1168					output vec3 out0 = [ vec3(2.0, 6.0, 15.0) | vec3(4.0, 12.0, 6.0) | vec3(1.0, 26.0, 21.0) ];
1169				}
1170
1171				both ""
1172					#version 320 es
1173					precision highp float;
1174					${DECLARATIONS}
1175
1176					void main()
1177					{
1178						${SETUP}
1179						out0 = in0 * vec3(1.0, 2.0, 3.0);
1180						${OUTPUT}
1181					}
1182				""
1183			end
1184			case ivec4_to_uvec4
1185				version 320 es
1186				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1187				values
1188				{
1189					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
1190					output uvec4 out0 = [ uvec4(1, 4, 9, 16) | uvec4(2, 2, 6, 24) | uvec4(3, 14, 6, 20) ];
1191				}
1192
1193				both ""
1194					#version 320 es
1195					precision highp float;
1196					${DECLARATIONS}
1197
1198					void main()
1199					{
1200						${SETUP}
1201						out0 = in0 * uvec4(1, 2, 3, 4);
1202						${OUTPUT}
1203					}
1204				""
1205			end
1206			case ivec4_to_vec4
1207				version 320 es
1208				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1209				values
1210				{
1211					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
1212					output vec4 out0 = [ vec4(1.0, 4.0, 9.0, 16.0) | vec4(2.0, 2.0, 6.0, 24.0) | vec4(3.0, 14.0, 6.0, 20.0) ];
1213				}
1214
1215				both ""
1216					#version 320 es
1217					precision highp float;
1218					${DECLARATIONS}
1219
1220					void main()
1221					{
1222						${SETUP}
1223						out0 = in0 * vec4(1.0, 2.0, 3.0, 4.0);
1224						${OUTPUT}
1225					}
1226				""
1227			end
1228			case uvec4_to_vec4
1229				version 320 es
1230				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1231				values
1232				{
1233					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
1234					output vec4 out0 = [ vec4(2.0, 6.0, 15.0, 32.0) | vec4(4.0, 12.0, 6.0, 36.0) | vec4(1.0, 26.0, 21.0, 16.0) ];
1235				}
1236
1237				both ""
1238					#version 320 es
1239					precision highp float;
1240					${DECLARATIONS}
1241
1242					void main()
1243					{
1244						${SETUP}
1245						out0 = in0 * vec4(1.0, 2.0, 3.0, 4.0);
1246						${OUTPUT}
1247					}
1248				""
1249			end
1250
1251		end # mul
1252		group div "Division"
1253
1254			case int_to_float
1255				version 320 es
1256				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1257				values
1258				{
1259					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1260					output float out0 = [ 1.0 | 0.5 | 0.5 | 1.5 | 2.5 ];
1261				}
1262
1263				both ""
1264					#version 320 es
1265					precision highp float;
1266					${DECLARATIONS}
1267
1268					void main()
1269					{
1270						${SETUP}
1271						out0 = in0 / 2.0;
1272						${OUTPUT}
1273					}
1274				""
1275			end
1276			case int_to_uint
1277				version 320 es
1278				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1279				values
1280				{
1281					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1282					output uint out0 = [ 1 | 0 | 0 | 1 | 2 ];
1283				}
1284
1285				both ""
1286					#version 320 es
1287					precision highp float;
1288					${DECLARATIONS}
1289
1290					void main()
1291					{
1292						${SETUP}
1293						out0 = in0 / 2;
1294						${OUTPUT}
1295					}
1296				""
1297			end
1298			case int_to_vec2
1299				version 320 es
1300				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1301				values
1302				{
1303					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1304					output vec2 out0 = [ vec2(2.0, 1.0) | vec2(1.0, 0.5) | vec2(1.0, 0.5) | vec2(3.0, 1.5) | vec2(5.0, 2.5) ];
1305				}
1306
1307				both ""
1308					#version 320 es
1309					precision highp float;
1310					${DECLARATIONS}
1311
1312					void main()
1313					{
1314						${SETUP}
1315						out0 = in0 / vec2(1.0, 2.0);
1316						${OUTPUT}
1317					}
1318				""
1319			end
1320			case int_to_vec3
1321				version 320 es
1322				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1323				values
1324				{
1325					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1326					output vec3 out0 = [ vec3(2.0, 1.0, 0.666666666667) | vec3(1.0, 0.5, 0.333333333333) | vec3(1.0, 0.5, 0.333333333333) | vec3(3.0, 1.5, 1.0) | vec3(5.0, 2.5, 1.66666666667) ];
1327				}
1328
1329				both ""
1330					#version 320 es
1331					precision highp float;
1332					${DECLARATIONS}
1333
1334					void main()
1335					{
1336						${SETUP}
1337						out0 = in0 / vec3(1.0, 2.0, 3.0);
1338						${OUTPUT}
1339					}
1340				""
1341			end
1342			case int_to_vec4
1343				version 320 es
1344				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1345				values
1346				{
1347					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1348					output vec4 out0 = [ vec4(2.0, 1.0, 0.666666666667, 0.5) | vec4(1.0, 0.5, 0.333333333333, 0.25) | vec4(1.0, 0.5, 0.333333333333, 0.25) | vec4(3.0, 1.5, 1.0, 0.75) | vec4(5.0, 2.5, 1.66666666667, 1.25) ];
1349				}
1350
1351				both ""
1352					#version 320 es
1353					precision highp float;
1354					${DECLARATIONS}
1355
1356					void main()
1357					{
1358						${SETUP}
1359						out0 = in0 / vec4(1.0, 2.0, 3.0, 4.0);
1360						${OUTPUT}
1361					}
1362				""
1363			end
1364			case int_to_uvec2
1365				version 320 es
1366				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1367				values
1368				{
1369					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1370					output uvec2 out0 = [ uvec2(2, 1) | uvec2(1, 0) | uvec2(1, 0) | uvec2(3, 1) | uvec2(5, 2) ];
1371				}
1372
1373				both ""
1374					#version 320 es
1375					precision highp float;
1376					${DECLARATIONS}
1377
1378					void main()
1379					{
1380						${SETUP}
1381						out0 = in0 / uvec2(1, 2);
1382						${OUTPUT}
1383					}
1384				""
1385			end
1386			case int_to_uvec3
1387				version 320 es
1388				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1389				values
1390				{
1391					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1392					output uvec3 out0 = [ uvec3(2, 1, 0) | uvec3(1, 0, 0) | uvec3(1, 0, 0) | uvec3(3, 1, 1) | uvec3(5, 2, 1) ];
1393				}
1394
1395				both ""
1396					#version 320 es
1397					precision highp float;
1398					${DECLARATIONS}
1399
1400					void main()
1401					{
1402						${SETUP}
1403						out0 = in0 / uvec3(1, 2, 3);
1404						${OUTPUT}
1405					}
1406				""
1407			end
1408			case int_to_uvec4
1409				version 320 es
1410				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1411				values
1412				{
1413					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1414					output uvec4 out0 = [ uvec4(2, 1, 0, 0) | uvec4(1, 0, 0, 0) | uvec4(1, 0, 0, 0) | uvec4(3, 1, 1, 0) | uvec4(5, 2, 1, 1) ];
1415				}
1416
1417				both ""
1418					#version 320 es
1419					precision highp float;
1420					${DECLARATIONS}
1421
1422					void main()
1423					{
1424						${SETUP}
1425						out0 = in0 / uvec4(1, 2, 3, 4);
1426						${OUTPUT}
1427					}
1428				""
1429			end
1430			case uint_to_float
1431				version 320 es
1432				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1433				values
1434				{
1435					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
1436					output float out0 = [ 0.5 | 1.5 | 2.0 | 3.5 | 5.5 ];
1437				}
1438
1439				both ""
1440					#version 320 es
1441					precision highp float;
1442					${DECLARATIONS}
1443
1444					void main()
1445					{
1446						${SETUP}
1447						out0 = in0 / 2.0;
1448						${OUTPUT}
1449					}
1450				""
1451			end
1452			case uint_to_vec2
1453				version 320 es
1454				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1455				values
1456				{
1457					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
1458					output vec2 out0 = [ vec2(1.0, 0.5) | vec2(3.0, 1.5) | vec2(4.0, 2.0) | vec2(7.0, 3.5) | vec2(11.0, 5.5) ];
1459				}
1460
1461				both ""
1462					#version 320 es
1463					precision highp float;
1464					${DECLARATIONS}
1465
1466					void main()
1467					{
1468						${SETUP}
1469						out0 = in0 / vec2(1.0, 2.0);
1470						${OUTPUT}
1471					}
1472				""
1473			end
1474			case uint_to_vec3
1475				version 320 es
1476				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1477				values
1478				{
1479					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
1480					output vec3 out0 = [ vec3(1.0, 0.5, 0.333333333333) | vec3(3.0, 1.5, 1.0) | vec3(4.0, 2.0, 1.33333333333) | vec3(7.0, 3.5, 2.33333333333) | vec3(11.0, 5.5, 3.66666666667) ];
1481				}
1482
1483				both ""
1484					#version 320 es
1485					precision highp float;
1486					${DECLARATIONS}
1487
1488					void main()
1489					{
1490						${SETUP}
1491						out0 = in0 / vec3(1.0, 2.0, 3.0);
1492						${OUTPUT}
1493					}
1494				""
1495			end
1496			case uint_to_vec4
1497				version 320 es
1498				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1499				values
1500				{
1501					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
1502					output vec4 out0 = [ vec4(1.0, 0.5, 0.333333333333, 0.25) | vec4(3.0, 1.5, 1.0, 0.75) | vec4(4.0, 2.0, 1.33333333333, 1.0) | vec4(7.0, 3.5, 2.33333333333, 1.75) | vec4(11.0, 5.5, 3.66666666667, 2.75) ];
1503				}
1504
1505				both ""
1506					#version 320 es
1507					precision highp float;
1508					${DECLARATIONS}
1509
1510					void main()
1511					{
1512						${SETUP}
1513						out0 = in0 / vec4(1.0, 2.0, 3.0, 4.0);
1514						${OUTPUT}
1515					}
1516				""
1517			end
1518			case ivec2_to_uvec2
1519				version 320 es
1520				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1521				values
1522				{
1523					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
1524					output uvec2 out0 = [ uvec2(1, 1) | uvec2(2, 0) | uvec2(3, 3) ];
1525				}
1526
1527				both ""
1528					#version 320 es
1529					precision highp float;
1530					${DECLARATIONS}
1531
1532					void main()
1533					{
1534						${SETUP}
1535						out0 = in0 / uvec2(1, 2);
1536						${OUTPUT}
1537					}
1538				""
1539			end
1540			case ivec2_to_vec2
1541				version 320 es
1542				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1543				values
1544				{
1545					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
1546					output vec2 out0 = [ vec2(1.0, 1.0) | vec2(2.0, 0.5) | vec2(3.0, 3.5) ];
1547				}
1548
1549				both ""
1550					#version 320 es
1551					precision highp float;
1552					${DECLARATIONS}
1553
1554					void main()
1555					{
1556						${SETUP}
1557						out0 = in0 / vec2(1.0, 2.0);
1558						${OUTPUT}
1559					}
1560				""
1561			end
1562			case uvec2_to_vec2
1563				version 320 es
1564				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1565				values
1566				{
1567					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
1568					output vec2 out0 = [ vec2(2.0, 1.5) | vec2(4.0, 3.0) | vec2(1.0, 6.5) ];
1569				}
1570
1571				both ""
1572					#version 320 es
1573					precision highp float;
1574					${DECLARATIONS}
1575
1576					void main()
1577					{
1578						${SETUP}
1579						out0 = in0 / vec2(1.0, 2.0);
1580						${OUTPUT}
1581					}
1582				""
1583			end
1584			case ivec3_to_uvec3
1585				version 320 es
1586				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1587				values
1588				{
1589					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
1590					output uvec3 out0 = [ uvec3(1, 1, 1) | uvec3(2, 0, 0) | uvec3(3, 3, 0) ];
1591				}
1592
1593				both ""
1594					#version 320 es
1595					precision highp float;
1596					${DECLARATIONS}
1597
1598					void main()
1599					{
1600						${SETUP}
1601						out0 = in0 / uvec3(1, 2, 3);
1602						${OUTPUT}
1603					}
1604				""
1605			end
1606			case ivec3_to_vec3
1607				version 320 es
1608				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1609				values
1610				{
1611					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
1612					output vec3 out0 = [ vec3(1.0, 1.0, 1.0) | vec3(2.0, 0.5, 0.666666666667) | vec3(3.0, 3.5, 0.666666666667) ];
1613				}
1614
1615				both ""
1616					#version 320 es
1617					precision highp float;
1618					${DECLARATIONS}
1619
1620					void main()
1621					{
1622						${SETUP}
1623						out0 = in0 / vec3(1.0, 2.0, 3.0);
1624						${OUTPUT}
1625					}
1626				""
1627			end
1628			case uvec3_to_vec3
1629				version 320 es
1630				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1631				values
1632				{
1633					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
1634					output vec3 out0 = [ vec3(2.0, 1.5, 1.66666666667) | vec3(4.0, 3.0, 0.666666666667) | vec3(1.0, 6.5, 2.33333333333) ];
1635				}
1636
1637				both ""
1638					#version 320 es
1639					precision highp float;
1640					${DECLARATIONS}
1641
1642					void main()
1643					{
1644						${SETUP}
1645						out0 = in0 / vec3(1.0, 2.0, 3.0);
1646						${OUTPUT}
1647					}
1648				""
1649			end
1650			case ivec4_to_uvec4
1651				version 320 es
1652				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1653				values
1654				{
1655					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
1656					output uvec4 out0 = [ uvec4(1, 1, 1, 1) | uvec4(2, 0, 0, 1) | uvec4(3, 3, 0, 1) ];
1657				}
1658
1659				both ""
1660					#version 320 es
1661					precision highp float;
1662					${DECLARATIONS}
1663
1664					void main()
1665					{
1666						${SETUP}
1667						out0 = in0 / uvec4(1, 2, 3, 4);
1668						${OUTPUT}
1669					}
1670				""
1671			end
1672			case ivec4_to_vec4
1673				version 320 es
1674				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1675				values
1676				{
1677					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
1678					output vec4 out0 = [ vec4(1.0, 1.0, 1.0, 1.0) | vec4(2.0, 0.5, 0.666666666667, 1.5) | vec4(3.0, 3.5, 0.666666666667, 1.25) ];
1679				}
1680
1681				both ""
1682					#version 320 es
1683					precision highp float;
1684					${DECLARATIONS}
1685
1686					void main()
1687					{
1688						${SETUP}
1689						out0 = in0 / vec4(1.0, 2.0, 3.0, 4.0);
1690						${OUTPUT}
1691					}
1692				""
1693			end
1694			case uvec4_to_vec4
1695				version 320 es
1696				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1697				values
1698				{
1699					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
1700					output vec4 out0 = [ vec4(2.0, 1.5, 1.66666666667, 2.0) | vec4(4.0, 3.0, 0.666666666667, 2.25) | vec4(1.0, 6.5, 2.33333333333, 1.0) ];
1701				}
1702
1703				both ""
1704					#version 320 es
1705					precision highp float;
1706					${DECLARATIONS}
1707
1708					void main()
1709					{
1710						${SETUP}
1711						out0 = in0 / vec4(1.0, 2.0, 3.0, 4.0);
1712						${OUTPUT}
1713					}
1714				""
1715			end
1716
1717		end # div
1718
1719	end # input_before_literal
1720	group literal_before_input "Literal before input"
1721
1722		group add "Addition"
1723
1724			case int_to_float
1725				version 320 es
1726				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1727				values
1728				{
1729					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1730					output float out0 = [ 4.0 | 3.0 | 3.0 | 5.0 | 7.0 ];
1731				}
1732
1733				both ""
1734					#version 320 es
1735					precision highp float;
1736					${DECLARATIONS}
1737
1738					void main()
1739					{
1740						${SETUP}
1741						out0 = 2.0 + in0;
1742						${OUTPUT}
1743					}
1744				""
1745			end
1746			case int_to_uint
1747				version 320 es
1748				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1749				values
1750				{
1751					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1752					output uint out0 = [ 4 | 3 | 3 | 5 | 7 ];
1753				}
1754
1755				both ""
1756					#version 320 es
1757					precision highp float;
1758					${DECLARATIONS}
1759
1760					void main()
1761					{
1762						${SETUP}
1763						out0 = 2 + in0;
1764						${OUTPUT}
1765					}
1766				""
1767			end
1768			case int_to_vec2
1769				version 320 es
1770				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1771				values
1772				{
1773					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1774					output vec2 out0 = [ vec2(3.0, 4.0) | vec2(2.0, 3.0) | vec2(2.0, 3.0) | vec2(4.0, 5.0) | vec2(6.0, 7.0) ];
1775				}
1776
1777				both ""
1778					#version 320 es
1779					precision highp float;
1780					${DECLARATIONS}
1781
1782					void main()
1783					{
1784						${SETUP}
1785						out0 = vec2(1.0, 2.0) + in0;
1786						${OUTPUT}
1787					}
1788				""
1789			end
1790			case int_to_vec3
1791				version 320 es
1792				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1793				values
1794				{
1795					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1796					output vec3 out0 = [ vec3(3.0, 4.0, 5.0) | vec3(2.0, 3.0, 4.0) | vec3(2.0, 3.0, 4.0) | vec3(4.0, 5.0, 6.0) | vec3(6.0, 7.0, 8.0) ];
1797				}
1798
1799				both ""
1800					#version 320 es
1801					precision highp float;
1802					${DECLARATIONS}
1803
1804					void main()
1805					{
1806						${SETUP}
1807						out0 = vec3(1.0, 2.0, 3.0) + in0;
1808						${OUTPUT}
1809					}
1810				""
1811			end
1812			case int_to_vec4
1813				version 320 es
1814				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1815				values
1816				{
1817					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1818					output vec4 out0 = [ vec4(3.0, 4.0, 5.0, 6.0) | vec4(2.0, 3.0, 4.0, 5.0) | vec4(2.0, 3.0, 4.0, 5.0) | vec4(4.0, 5.0, 6.0, 7.0) | vec4(6.0, 7.0, 8.0, 9.0) ];
1819				}
1820
1821				both ""
1822					#version 320 es
1823					precision highp float;
1824					${DECLARATIONS}
1825
1826					void main()
1827					{
1828						${SETUP}
1829						out0 = vec4(1.0, 2.0, 3.0, 4.0) + in0;
1830						${OUTPUT}
1831					}
1832				""
1833			end
1834			case int_to_uvec2
1835				version 320 es
1836				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1837				values
1838				{
1839					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1840					output uvec2 out0 = [ uvec2(3, 4) | uvec2(2, 3) | uvec2(2, 3) | uvec2(4, 5) | uvec2(6, 7) ];
1841				}
1842
1843				both ""
1844					#version 320 es
1845					precision highp float;
1846					${DECLARATIONS}
1847
1848					void main()
1849					{
1850						${SETUP}
1851						out0 = uvec2(1, 2) + in0;
1852						${OUTPUT}
1853					}
1854				""
1855			end
1856			case int_to_uvec3
1857				version 320 es
1858				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1859				values
1860				{
1861					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1862					output uvec3 out0 = [ uvec3(3, 4, 5) | uvec3(2, 3, 4) | uvec3(2, 3, 4) | uvec3(4, 5, 6) | uvec3(6, 7, 8) ];
1863				}
1864
1865				both ""
1866					#version 320 es
1867					precision highp float;
1868					${DECLARATIONS}
1869
1870					void main()
1871					{
1872						${SETUP}
1873						out0 = uvec3(1, 2, 3) + in0;
1874						${OUTPUT}
1875					}
1876				""
1877			end
1878			case int_to_uvec4
1879				version 320 es
1880				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1881				values
1882				{
1883					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
1884					output uvec4 out0 = [ uvec4(3, 4, 5, 6) | uvec4(2, 3, 4, 5) | uvec4(2, 3, 4, 5) | uvec4(4, 5, 6, 7) | uvec4(6, 7, 8, 9) ];
1885				}
1886
1887				both ""
1888					#version 320 es
1889					precision highp float;
1890					${DECLARATIONS}
1891
1892					void main()
1893					{
1894						${SETUP}
1895						out0 = uvec4(1, 2, 3, 4) + in0;
1896						${OUTPUT}
1897					}
1898				""
1899			end
1900			case uint_to_float
1901				version 320 es
1902				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1903				values
1904				{
1905					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
1906					output float out0 = [ 3.0 | 5.0 | 6.0 | 9.0 | 13.0 ];
1907				}
1908
1909				both ""
1910					#version 320 es
1911					precision highp float;
1912					${DECLARATIONS}
1913
1914					void main()
1915					{
1916						${SETUP}
1917						out0 = 2.0 + in0;
1918						${OUTPUT}
1919					}
1920				""
1921			end
1922			case uint_to_vec2
1923				version 320 es
1924				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1925				values
1926				{
1927					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
1928					output vec2 out0 = [ vec2(2.0, 3.0) | vec2(4.0, 5.0) | vec2(5.0, 6.0) | vec2(8.0, 9.0) | vec2(12.0, 13.0) ];
1929				}
1930
1931				both ""
1932					#version 320 es
1933					precision highp float;
1934					${DECLARATIONS}
1935
1936					void main()
1937					{
1938						${SETUP}
1939						out0 = vec2(1.0, 2.0) + in0;
1940						${OUTPUT}
1941					}
1942				""
1943			end
1944			case uint_to_vec3
1945				version 320 es
1946				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1947				values
1948				{
1949					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
1950					output vec3 out0 = [ vec3(2.0, 3.0, 4.0) | vec3(4.0, 5.0, 6.0) | vec3(5.0, 6.0, 7.0) | vec3(8.0, 9.0, 10.0) | vec3(12.0, 13.0, 14.0) ];
1951				}
1952
1953				both ""
1954					#version 320 es
1955					precision highp float;
1956					${DECLARATIONS}
1957
1958					void main()
1959					{
1960						${SETUP}
1961						out0 = vec3(1.0, 2.0, 3.0) + in0;
1962						${OUTPUT}
1963					}
1964				""
1965			end
1966			case uint_to_vec4
1967				version 320 es
1968				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1969				values
1970				{
1971					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
1972					output vec4 out0 = [ vec4(2.0, 3.0, 4.0, 5.0) | vec4(4.0, 5.0, 6.0, 7.0) | vec4(5.0, 6.0, 7.0, 8.0) | vec4(8.0, 9.0, 10.0, 11.0) | vec4(12.0, 13.0, 14.0, 15.0) ];
1973				}
1974
1975				both ""
1976					#version 320 es
1977					precision highp float;
1978					${DECLARATIONS}
1979
1980					void main()
1981					{
1982						${SETUP}
1983						out0 = vec4(1.0, 2.0, 3.0, 4.0) + in0;
1984						${OUTPUT}
1985					}
1986				""
1987			end
1988			case ivec2_to_uvec2
1989				version 320 es
1990				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
1991				values
1992				{
1993					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
1994					output uvec2 out0 = [ uvec2(2, 4) | uvec2(3, 3) | uvec2(4, 9) ];
1995				}
1996
1997				both ""
1998					#version 320 es
1999					precision highp float;
2000					${DECLARATIONS}
2001
2002					void main()
2003					{
2004						${SETUP}
2005						out0 = uvec2(1, 2) + in0;
2006						${OUTPUT}
2007					}
2008				""
2009			end
2010			case ivec2_to_vec2
2011				version 320 es
2012				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2013				values
2014				{
2015					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
2016					output vec2 out0 = [ vec2(2.0, 4.0) | vec2(3.0, 3.0) | vec2(4.0, 9.0) ];
2017				}
2018
2019				both ""
2020					#version 320 es
2021					precision highp float;
2022					${DECLARATIONS}
2023
2024					void main()
2025					{
2026						${SETUP}
2027						out0 = vec2(1.0, 2.0) + in0;
2028						${OUTPUT}
2029					}
2030				""
2031			end
2032			case uvec2_to_vec2
2033				version 320 es
2034				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2035				values
2036				{
2037					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
2038					output vec2 out0 = [ vec2(3.0, 5.0) | vec2(5.0, 8.0) | vec2(2.0, 15.0) ];
2039				}
2040
2041				both ""
2042					#version 320 es
2043					precision highp float;
2044					${DECLARATIONS}
2045
2046					void main()
2047					{
2048						${SETUP}
2049						out0 = vec2(1.0, 2.0) + in0;
2050						${OUTPUT}
2051					}
2052				""
2053			end
2054			case ivec3_to_uvec3
2055				version 320 es
2056				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2057				values
2058				{
2059					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
2060					output uvec3 out0 = [ uvec3(2, 4, 6) | uvec3(3, 3, 5) | uvec3(4, 9, 5) ];
2061				}
2062
2063				both ""
2064					#version 320 es
2065					precision highp float;
2066					${DECLARATIONS}
2067
2068					void main()
2069					{
2070						${SETUP}
2071						out0 = uvec3(1, 2, 3) + in0;
2072						${OUTPUT}
2073					}
2074				""
2075			end
2076			case ivec3_to_vec3
2077				version 320 es
2078				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2079				values
2080				{
2081					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
2082					output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(3.0, 3.0, 5.0) | vec3(4.0, 9.0, 5.0) ];
2083				}
2084
2085				both ""
2086					#version 320 es
2087					precision highp float;
2088					${DECLARATIONS}
2089
2090					void main()
2091					{
2092						${SETUP}
2093						out0 = vec3(1.0, 2.0, 3.0) + in0;
2094						${OUTPUT}
2095					}
2096				""
2097			end
2098			case uvec3_to_vec3
2099				version 320 es
2100				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2101				values
2102				{
2103					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
2104					output vec3 out0 = [ vec3(3.0, 5.0, 8.0) | vec3(5.0, 8.0, 5.0) | vec3(2.0, 15.0, 10.0) ];
2105				}
2106
2107				both ""
2108					#version 320 es
2109					precision highp float;
2110					${DECLARATIONS}
2111
2112					void main()
2113					{
2114						${SETUP}
2115						out0 = vec3(1.0, 2.0, 3.0) + in0;
2116						${OUTPUT}
2117					}
2118				""
2119			end
2120			case ivec4_to_uvec4
2121				version 320 es
2122				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2123				values
2124				{
2125					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
2126					output uvec4 out0 = [ uvec4(2, 4, 6, 8) | uvec4(3, 3, 5, 10) | uvec4(4, 9, 5, 9) ];
2127				}
2128
2129				both ""
2130					#version 320 es
2131					precision highp float;
2132					${DECLARATIONS}
2133
2134					void main()
2135					{
2136						${SETUP}
2137						out0 = uvec4(1, 2, 3, 4) + in0;
2138						${OUTPUT}
2139					}
2140				""
2141			end
2142			case ivec4_to_vec4
2143				version 320 es
2144				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2145				values
2146				{
2147					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
2148					output vec4 out0 = [ vec4(2.0, 4.0, 6.0, 8.0) | vec4(3.0, 3.0, 5.0, 10.0) | vec4(4.0, 9.0, 5.0, 9.0) ];
2149				}
2150
2151				both ""
2152					#version 320 es
2153					precision highp float;
2154					${DECLARATIONS}
2155
2156					void main()
2157					{
2158						${SETUP}
2159						out0 = vec4(1.0, 2.0, 3.0, 4.0) + in0;
2160						${OUTPUT}
2161					}
2162				""
2163			end
2164			case uvec4_to_vec4
2165				version 320 es
2166				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2167				values
2168				{
2169					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
2170					output vec4 out0 = [ vec4(3.0, 5.0, 8.0, 12.0) | vec4(5.0, 8.0, 5.0, 13.0) | vec4(2.0, 15.0, 10.0, 8.0) ];
2171				}
2172
2173				both ""
2174					#version 320 es
2175					precision highp float;
2176					${DECLARATIONS}
2177
2178					void main()
2179					{
2180						${SETUP}
2181						out0 = vec4(1.0, 2.0, 3.0, 4.0) + in0;
2182						${OUTPUT}
2183					}
2184				""
2185			end
2186
2187		end # add
2188		group sub "Subtraction"
2189
2190			case int_to_float
2191				version 320 es
2192				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2193				values
2194				{
2195					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2196					output float out0 = [ 0.0 | 1.0 | 1.0 | -1.0 | -3.0 ];
2197				}
2198
2199				both ""
2200					#version 320 es
2201					precision highp float;
2202					${DECLARATIONS}
2203
2204					void main()
2205					{
2206						${SETUP}
2207						out0 = 2.0 - in0;
2208						${OUTPUT}
2209					}
2210				""
2211			end
2212			case int_to_vec2
2213				version 320 es
2214				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2215				values
2216				{
2217					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2218					output vec2 out0 = [ vec2(-1.0, 0.0) | vec2(0.0, 1.0) | vec2(0.0, 1.0) | vec2(-2.0, -1.0) | vec2(-4.0, -3.0) ];
2219				}
2220
2221				both ""
2222					#version 320 es
2223					precision highp float;
2224					${DECLARATIONS}
2225
2226					void main()
2227					{
2228						${SETUP}
2229						out0 = vec2(1.0, 2.0) - in0;
2230						${OUTPUT}
2231					}
2232				""
2233			end
2234			case int_to_vec3
2235				version 320 es
2236				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2237				values
2238				{
2239					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2240					output vec3 out0 = [ vec3(-1.0, 0.0, 1.0) | vec3(0.0, 1.0, 2.0) | vec3(0.0, 1.0, 2.0) | vec3(-2.0, -1.0, 0.0) | vec3(-4.0, -3.0, -2.0) ];
2241				}
2242
2243				both ""
2244					#version 320 es
2245					precision highp float;
2246					${DECLARATIONS}
2247
2248					void main()
2249					{
2250						${SETUP}
2251						out0 = vec3(1.0, 2.0, 3.0) - in0;
2252						${OUTPUT}
2253					}
2254				""
2255			end
2256			case int_to_vec4
2257				version 320 es
2258				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2259				values
2260				{
2261					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2262					output vec4 out0 = [ vec4(-1.0, 0.0, 1.0, 2.0) | vec4(0.0, 1.0, 2.0, 3.0) | vec4(0.0, 1.0, 2.0, 3.0) | vec4(-2.0, -1.0, 0.0, 1.0) | vec4(-4.0, -3.0, -2.0, -1.0) ];
2263				}
2264
2265				both ""
2266					#version 320 es
2267					precision highp float;
2268					${DECLARATIONS}
2269
2270					void main()
2271					{
2272						${SETUP}
2273						out0 = vec4(1.0, 2.0, 3.0, 4.0) - in0;
2274						${OUTPUT}
2275					}
2276				""
2277			end
2278			case uint_to_float
2279				version 320 es
2280				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2281				values
2282				{
2283					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
2284					output float out0 = [ 1.0 | -1.0 | -2.0 | -5.0 | -9.0 ];
2285				}
2286
2287				both ""
2288					#version 320 es
2289					precision highp float;
2290					${DECLARATIONS}
2291
2292					void main()
2293					{
2294						${SETUP}
2295						out0 = 2.0 - in0;
2296						${OUTPUT}
2297					}
2298				""
2299			end
2300			case uint_to_vec2
2301				version 320 es
2302				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2303				values
2304				{
2305					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
2306					output vec2 out0 = [ vec2(0.0, 1.0) | vec2(-2.0, -1.0) | vec2(-3.0, -2.0) | vec2(-6.0, -5.0) | vec2(-10.0, -9.0) ];
2307				}
2308
2309				both ""
2310					#version 320 es
2311					precision highp float;
2312					${DECLARATIONS}
2313
2314					void main()
2315					{
2316						${SETUP}
2317						out0 = vec2(1.0, 2.0) - in0;
2318						${OUTPUT}
2319					}
2320				""
2321			end
2322			case uint_to_vec3
2323				version 320 es
2324				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2325				values
2326				{
2327					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
2328					output vec3 out0 = [ vec3(0.0, 1.0, 2.0) | vec3(-2.0, -1.0, 0.0) | vec3(-3.0, -2.0, -1.0) | vec3(-6.0, -5.0, -4.0) | vec3(-10.0, -9.0, -8.0) ];
2329				}
2330
2331				both ""
2332					#version 320 es
2333					precision highp float;
2334					${DECLARATIONS}
2335
2336					void main()
2337					{
2338						${SETUP}
2339						out0 = vec3(1.0, 2.0, 3.0) - in0;
2340						${OUTPUT}
2341					}
2342				""
2343			end
2344			case uint_to_vec4
2345				version 320 es
2346				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2347				values
2348				{
2349					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
2350					output vec4 out0 = [ vec4(0.0, 1.0, 2.0, 3.0) | vec4(-2.0, -1.0, 0.0, 1.0) | vec4(-3.0, -2.0, -1.0, 0.0) | vec4(-6.0, -5.0, -4.0, -3.0) | vec4(-10.0, -9.0, -8.0, -7.0) ];
2351				}
2352
2353				both ""
2354					#version 320 es
2355					precision highp float;
2356					${DECLARATIONS}
2357
2358					void main()
2359					{
2360						${SETUP}
2361						out0 = vec4(1.0, 2.0, 3.0, 4.0) - in0;
2362						${OUTPUT}
2363					}
2364				""
2365			end
2366			case ivec2_to_vec2
2367				version 320 es
2368				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2369				values
2370				{
2371					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
2372					output vec2 out0 = [ vec2(0.0, 0.0) | vec2(-1.0, 1.0) | vec2(-2.0, -5.0) ];
2373				}
2374
2375				both ""
2376					#version 320 es
2377					precision highp float;
2378					${DECLARATIONS}
2379
2380					void main()
2381					{
2382						${SETUP}
2383						out0 = vec2(1.0, 2.0) - in0;
2384						${OUTPUT}
2385					}
2386				""
2387			end
2388			case uvec2_to_vec2
2389				version 320 es
2390				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2391				values
2392				{
2393					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
2394					output vec2 out0 = [ vec2(-1.0, -1.0) | vec2(-3.0, -4.0) | vec2(0.0, -11.0) ];
2395				}
2396
2397				both ""
2398					#version 320 es
2399					precision highp float;
2400					${DECLARATIONS}
2401
2402					void main()
2403					{
2404						${SETUP}
2405						out0 = vec2(1.0, 2.0) - in0;
2406						${OUTPUT}
2407					}
2408				""
2409			end
2410			case ivec3_to_vec3
2411				version 320 es
2412				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2413				values
2414				{
2415					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
2416					output vec3 out0 = [ vec3(0.0, 0.0, 0.0) | vec3(-1.0, 1.0, 1.0) | vec3(-2.0, -5.0, 1.0) ];
2417				}
2418
2419				both ""
2420					#version 320 es
2421					precision highp float;
2422					${DECLARATIONS}
2423
2424					void main()
2425					{
2426						${SETUP}
2427						out0 = vec3(1.0, 2.0, 3.0) - in0;
2428						${OUTPUT}
2429					}
2430				""
2431			end
2432			case uvec3_to_vec3
2433				version 320 es
2434				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2435				values
2436				{
2437					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
2438					output vec3 out0 = [ vec3(-1.0, -1.0, -2.0) | vec3(-3.0, -4.0, 1.0) | vec3(0.0, -11.0, -4.0) ];
2439				}
2440
2441				both ""
2442					#version 320 es
2443					precision highp float;
2444					${DECLARATIONS}
2445
2446					void main()
2447					{
2448						${SETUP}
2449						out0 = vec3(1.0, 2.0, 3.0) - in0;
2450						${OUTPUT}
2451					}
2452				""
2453			end
2454			case ivec4_to_vec4
2455				version 320 es
2456				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2457				values
2458				{
2459					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
2460					output vec4 out0 = [ vec4(0.0, 0.0, 0.0, 0.0) | vec4(-1.0, 1.0, 1.0, -2.0) | vec4(-2.0, -5.0, 1.0, -1.0) ];
2461				}
2462
2463				both ""
2464					#version 320 es
2465					precision highp float;
2466					${DECLARATIONS}
2467
2468					void main()
2469					{
2470						${SETUP}
2471						out0 = vec4(1.0, 2.0, 3.0, 4.0) - in0;
2472						${OUTPUT}
2473					}
2474				""
2475			end
2476			case uvec4_to_vec4
2477				version 320 es
2478				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2479				values
2480				{
2481					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
2482					output vec4 out0 = [ vec4(-1.0, -1.0, -2.0, -4.0) | vec4(-3.0, -4.0, 1.0, -5.0) | vec4(0.0, -11.0, -4.0, 0.0) ];
2483				}
2484
2485				both ""
2486					#version 320 es
2487					precision highp float;
2488					${DECLARATIONS}
2489
2490					void main()
2491					{
2492						${SETUP}
2493						out0 = vec4(1.0, 2.0, 3.0, 4.0) - in0;
2494						${OUTPUT}
2495					}
2496				""
2497			end
2498
2499		end # sub
2500		group mul "Multiplication"
2501
2502			case int_to_float
2503				version 320 es
2504				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2505				values
2506				{
2507					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2508					output float out0 = [ 4.0 | 2.0 | 2.0 | 6.0 | 10.0 ];
2509				}
2510
2511				both ""
2512					#version 320 es
2513					precision highp float;
2514					${DECLARATIONS}
2515
2516					void main()
2517					{
2518						${SETUP}
2519						out0 = 2.0 * in0;
2520						${OUTPUT}
2521					}
2522				""
2523			end
2524			case int_to_uint
2525				version 320 es
2526				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2527				values
2528				{
2529					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2530					output uint out0 = [ 4 | 2 | 2 | 6 | 10 ];
2531				}
2532
2533				both ""
2534					#version 320 es
2535					precision highp float;
2536					${DECLARATIONS}
2537
2538					void main()
2539					{
2540						${SETUP}
2541						out0 = 2 * in0;
2542						${OUTPUT}
2543					}
2544				""
2545			end
2546			case int_to_vec2
2547				version 320 es
2548				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2549				values
2550				{
2551					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2552					output vec2 out0 = [ vec2(2.0, 4.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(3.0, 6.0) | vec2(5.0, 10.0) ];
2553				}
2554
2555				both ""
2556					#version 320 es
2557					precision highp float;
2558					${DECLARATIONS}
2559
2560					void main()
2561					{
2562						${SETUP}
2563						out0 = vec2(1.0, 2.0) * in0;
2564						${OUTPUT}
2565					}
2566				""
2567			end
2568			case int_to_vec3
2569				version 320 es
2570				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2571				values
2572				{
2573					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2574					output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(3.0, 6.0, 9.0) | vec3(5.0, 10.0, 15.0) ];
2575				}
2576
2577				both ""
2578					#version 320 es
2579					precision highp float;
2580					${DECLARATIONS}
2581
2582					void main()
2583					{
2584						${SETUP}
2585						out0 = vec3(1.0, 2.0, 3.0) * in0;
2586						${OUTPUT}
2587					}
2588				""
2589			end
2590			case int_to_vec4
2591				version 320 es
2592				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2593				values
2594				{
2595					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2596					output vec4 out0 = [ vec4(2.0, 4.0, 6.0, 8.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(3.0, 6.0, 9.0, 12.0) | vec4(5.0, 10.0, 15.0, 20.0) ];
2597				}
2598
2599				both ""
2600					#version 320 es
2601					precision highp float;
2602					${DECLARATIONS}
2603
2604					void main()
2605					{
2606						${SETUP}
2607						out0 = vec4(1.0, 2.0, 3.0, 4.0) * in0;
2608						${OUTPUT}
2609					}
2610				""
2611			end
2612			case int_to_uvec2
2613				version 320 es
2614				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2615				values
2616				{
2617					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2618					output uvec2 out0 = [ uvec2(2, 4) | uvec2(1, 2) | uvec2(1, 2) | uvec2(3, 6) | uvec2(5, 10) ];
2619				}
2620
2621				both ""
2622					#version 320 es
2623					precision highp float;
2624					${DECLARATIONS}
2625
2626					void main()
2627					{
2628						${SETUP}
2629						out0 = uvec2(1, 2) * in0;
2630						${OUTPUT}
2631					}
2632				""
2633			end
2634			case int_to_uvec3
2635				version 320 es
2636				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2637				values
2638				{
2639					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2640					output uvec3 out0 = [ uvec3(2, 4, 6) | uvec3(1, 2, 3) | uvec3(1, 2, 3) | uvec3(3, 6, 9) | uvec3(5, 10, 15) ];
2641				}
2642
2643				both ""
2644					#version 320 es
2645					precision highp float;
2646					${DECLARATIONS}
2647
2648					void main()
2649					{
2650						${SETUP}
2651						out0 = uvec3(1, 2, 3) * in0;
2652						${OUTPUT}
2653					}
2654				""
2655			end
2656			case int_to_uvec4
2657				version 320 es
2658				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2659				values
2660				{
2661					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2662					output uvec4 out0 = [ uvec4(2, 4, 6, 8) | uvec4(1, 2, 3, 4) | uvec4(1, 2, 3, 4) | uvec4(3, 6, 9, 12) | uvec4(5, 10, 15, 20) ];
2663				}
2664
2665				both ""
2666					#version 320 es
2667					precision highp float;
2668					${DECLARATIONS}
2669
2670					void main()
2671					{
2672						${SETUP}
2673						out0 = uvec4(1, 2, 3, 4) * in0;
2674						${OUTPUT}
2675					}
2676				""
2677			end
2678			case uint_to_float
2679				version 320 es
2680				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2681				values
2682				{
2683					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
2684					output float out0 = [ 2.0 | 6.0 | 8.0 | 14.0 | 22.0 ];
2685				}
2686
2687				both ""
2688					#version 320 es
2689					precision highp float;
2690					${DECLARATIONS}
2691
2692					void main()
2693					{
2694						${SETUP}
2695						out0 = 2.0 * in0;
2696						${OUTPUT}
2697					}
2698				""
2699			end
2700			case uint_to_vec2
2701				version 320 es
2702				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2703				values
2704				{
2705					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
2706					output vec2 out0 = [ vec2(1.0, 2.0) | vec2(3.0, 6.0) | vec2(4.0, 8.0) | vec2(7.0, 14.0) | vec2(11.0, 22.0) ];
2707				}
2708
2709				both ""
2710					#version 320 es
2711					precision highp float;
2712					${DECLARATIONS}
2713
2714					void main()
2715					{
2716						${SETUP}
2717						out0 = vec2(1.0, 2.0) * in0;
2718						${OUTPUT}
2719					}
2720				""
2721			end
2722			case uint_to_vec3
2723				version 320 es
2724				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2725				values
2726				{
2727					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
2728					output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(3.0, 6.0, 9.0) | vec3(4.0, 8.0, 12.0) | vec3(7.0, 14.0, 21.0) | vec3(11.0, 22.0, 33.0) ];
2729				}
2730
2731				both ""
2732					#version 320 es
2733					precision highp float;
2734					${DECLARATIONS}
2735
2736					void main()
2737					{
2738						${SETUP}
2739						out0 = vec3(1.0, 2.0, 3.0) * in0;
2740						${OUTPUT}
2741					}
2742				""
2743			end
2744			case uint_to_vec4
2745				version 320 es
2746				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2747				values
2748				{
2749					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
2750					output vec4 out0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(3.0, 6.0, 9.0, 12.0) | vec4(4.0, 8.0, 12.0, 16.0) | vec4(7.0, 14.0, 21.0, 28.0) | vec4(11.0, 22.0, 33.0, 44.0) ];
2751				}
2752
2753				both ""
2754					#version 320 es
2755					precision highp float;
2756					${DECLARATIONS}
2757
2758					void main()
2759					{
2760						${SETUP}
2761						out0 = vec4(1.0, 2.0, 3.0, 4.0) * in0;
2762						${OUTPUT}
2763					}
2764				""
2765			end
2766			case ivec2_to_uvec2
2767				version 320 es
2768				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2769				values
2770				{
2771					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
2772					output uvec2 out0 = [ uvec2(1, 4) | uvec2(2, 2) | uvec2(3, 14) ];
2773				}
2774
2775				both ""
2776					#version 320 es
2777					precision highp float;
2778					${DECLARATIONS}
2779
2780					void main()
2781					{
2782						${SETUP}
2783						out0 = uvec2(1, 2) * in0;
2784						${OUTPUT}
2785					}
2786				""
2787			end
2788			case ivec2_to_vec2
2789				version 320 es
2790				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2791				values
2792				{
2793					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
2794					output vec2 out0 = [ vec2(1.0, 4.0) | vec2(2.0, 2.0) | vec2(3.0, 14.0) ];
2795				}
2796
2797				both ""
2798					#version 320 es
2799					precision highp float;
2800					${DECLARATIONS}
2801
2802					void main()
2803					{
2804						${SETUP}
2805						out0 = vec2(1.0, 2.0) * in0;
2806						${OUTPUT}
2807					}
2808				""
2809			end
2810			case uvec2_to_vec2
2811				version 320 es
2812				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2813				values
2814				{
2815					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
2816					output vec2 out0 = [ vec2(2.0, 6.0) | vec2(4.0, 12.0) | vec2(1.0, 26.0) ];
2817				}
2818
2819				both ""
2820					#version 320 es
2821					precision highp float;
2822					${DECLARATIONS}
2823
2824					void main()
2825					{
2826						${SETUP}
2827						out0 = vec2(1.0, 2.0) * in0;
2828						${OUTPUT}
2829					}
2830				""
2831			end
2832			case ivec3_to_uvec3
2833				version 320 es
2834				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2835				values
2836				{
2837					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
2838					output uvec3 out0 = [ uvec3(1, 4, 9) | uvec3(2, 2, 6) | uvec3(3, 14, 6) ];
2839				}
2840
2841				both ""
2842					#version 320 es
2843					precision highp float;
2844					${DECLARATIONS}
2845
2846					void main()
2847					{
2848						${SETUP}
2849						out0 = uvec3(1, 2, 3) * in0;
2850						${OUTPUT}
2851					}
2852				""
2853			end
2854			case ivec3_to_vec3
2855				version 320 es
2856				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2857				values
2858				{
2859					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
2860					output vec3 out0 = [ vec3(1.0, 4.0, 9.0) | vec3(2.0, 2.0, 6.0) | vec3(3.0, 14.0, 6.0) ];
2861				}
2862
2863				both ""
2864					#version 320 es
2865					precision highp float;
2866					${DECLARATIONS}
2867
2868					void main()
2869					{
2870						${SETUP}
2871						out0 = vec3(1.0, 2.0, 3.0) * in0;
2872						${OUTPUT}
2873					}
2874				""
2875			end
2876			case uvec3_to_vec3
2877				version 320 es
2878				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2879				values
2880				{
2881					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
2882					output vec3 out0 = [ vec3(2.0, 6.0, 15.0) | vec3(4.0, 12.0, 6.0) | vec3(1.0, 26.0, 21.0) ];
2883				}
2884
2885				both ""
2886					#version 320 es
2887					precision highp float;
2888					${DECLARATIONS}
2889
2890					void main()
2891					{
2892						${SETUP}
2893						out0 = vec3(1.0, 2.0, 3.0) * in0;
2894						${OUTPUT}
2895					}
2896				""
2897			end
2898			case ivec4_to_uvec4
2899				version 320 es
2900				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2901				values
2902				{
2903					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
2904					output uvec4 out0 = [ uvec4(1, 4, 9, 16) | uvec4(2, 2, 6, 24) | uvec4(3, 14, 6, 20) ];
2905				}
2906
2907				both ""
2908					#version 320 es
2909					precision highp float;
2910					${DECLARATIONS}
2911
2912					void main()
2913					{
2914						${SETUP}
2915						out0 = uvec4(1, 2, 3, 4) * in0;
2916						${OUTPUT}
2917					}
2918				""
2919			end
2920			case ivec4_to_vec4
2921				version 320 es
2922				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2923				values
2924				{
2925					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
2926					output vec4 out0 = [ vec4(1.0, 4.0, 9.0, 16.0) | vec4(2.0, 2.0, 6.0, 24.0) | vec4(3.0, 14.0, 6.0, 20.0) ];
2927				}
2928
2929				both ""
2930					#version 320 es
2931					precision highp float;
2932					${DECLARATIONS}
2933
2934					void main()
2935					{
2936						${SETUP}
2937						out0 = vec4(1.0, 2.0, 3.0, 4.0) * in0;
2938						${OUTPUT}
2939					}
2940				""
2941			end
2942			case uvec4_to_vec4
2943				version 320 es
2944				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2945				values
2946				{
2947					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
2948					output vec4 out0 = [ vec4(2.0, 6.0, 15.0, 32.0) | vec4(4.0, 12.0, 6.0, 36.0) | vec4(1.0, 26.0, 21.0, 16.0) ];
2949				}
2950
2951				both ""
2952					#version 320 es
2953					precision highp float;
2954					${DECLARATIONS}
2955
2956					void main()
2957					{
2958						${SETUP}
2959						out0 = vec4(1.0, 2.0, 3.0, 4.0) * in0;
2960						${OUTPUT}
2961					}
2962				""
2963			end
2964
2965		end # mul
2966		group div "Division"
2967
2968			case int_to_float
2969				version 320 es
2970				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2971				values
2972				{
2973					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2974					output float out0 = [ 1.0 | 2.0 | 2.0 | 0.666666666667 | 0.4 ];
2975				}
2976
2977				both ""
2978					#version 320 es
2979					precision highp float;
2980					${DECLARATIONS}
2981
2982					void main()
2983					{
2984						${SETUP}
2985						out0 = 2.0 / in0;
2986						${OUTPUT}
2987					}
2988				""
2989			end
2990			case int_to_uint
2991				version 320 es
2992				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
2993				values
2994				{
2995					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
2996					output uint out0 = [ 1 | 2 | 2 | 0 | 0 ];
2997				}
2998
2999				both ""
3000					#version 320 es
3001					precision highp float;
3002					${DECLARATIONS}
3003
3004					void main()
3005					{
3006						${SETUP}
3007						out0 = 2 / in0;
3008						${OUTPUT}
3009					}
3010				""
3011			end
3012			case int_to_vec2
3013				version 320 es
3014				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3015				values
3016				{
3017					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
3018					output vec2 out0 = [ vec2(0.5, 1.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(0.333333333333, 0.666666666667) | vec2(0.2, 0.4) ];
3019				}
3020
3021				both ""
3022					#version 320 es
3023					precision highp float;
3024					${DECLARATIONS}
3025
3026					void main()
3027					{
3028						${SETUP}
3029						out0 = vec2(1.0, 2.0) / in0;
3030						${OUTPUT}
3031					}
3032				""
3033			end
3034			case int_to_vec3
3035				version 320 es
3036				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3037				values
3038				{
3039					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
3040					output vec3 out0 = [ vec3(0.5, 1.0, 1.5) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(0.333333333333, 0.666666666667, 1.0) | vec3(0.2, 0.4, 0.6) ];
3041				}
3042
3043				both ""
3044					#version 320 es
3045					precision highp float;
3046					${DECLARATIONS}
3047
3048					void main()
3049					{
3050						${SETUP}
3051						out0 = vec3(1.0, 2.0, 3.0) / in0;
3052						${OUTPUT}
3053					}
3054				""
3055			end
3056			case int_to_vec4
3057				version 320 es
3058				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3059				values
3060				{
3061					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
3062					output vec4 out0 = [ vec4(0.5, 1.0, 1.5, 2.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(0.333333333333, 0.666666666667, 1.0, 1.33333333333) | vec4(0.2, 0.4, 0.6, 0.8) ];
3063				}
3064
3065				both ""
3066					#version 320 es
3067					precision highp float;
3068					${DECLARATIONS}
3069
3070					void main()
3071					{
3072						${SETUP}
3073						out0 = vec4(1.0, 2.0, 3.0, 4.0) / in0;
3074						${OUTPUT}
3075					}
3076				""
3077			end
3078			case int_to_uvec2
3079				version 320 es
3080				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3081				values
3082				{
3083					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
3084					output uvec2 out0 = [ uvec2(0, 1) | uvec2(1, 2) | uvec2(1, 2) | uvec2(0, 0) | uvec2(0, 0) ];
3085				}
3086
3087				both ""
3088					#version 320 es
3089					precision highp float;
3090					${DECLARATIONS}
3091
3092					void main()
3093					{
3094						${SETUP}
3095						out0 = uvec2(1, 2) / in0;
3096						${OUTPUT}
3097					}
3098				""
3099			end
3100			case int_to_uvec3
3101				version 320 es
3102				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3103				values
3104				{
3105					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
3106					output uvec3 out0 = [ uvec3(0, 1, 1) | uvec3(1, 2, 3) | uvec3(1, 2, 3) | uvec3(0, 0, 1) | uvec3(0, 0, 0) ];
3107				}
3108
3109				both ""
3110					#version 320 es
3111					precision highp float;
3112					${DECLARATIONS}
3113
3114					void main()
3115					{
3116						${SETUP}
3117						out0 = uvec3(1, 2, 3) / in0;
3118						${OUTPUT}
3119					}
3120				""
3121			end
3122			case int_to_uvec4
3123				version 320 es
3124				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3125				values
3126				{
3127					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
3128					output uvec4 out0 = [ uvec4(0, 1, 1, 2) | uvec4(1, 2, 3, 4) | uvec4(1, 2, 3, 4) | uvec4(0, 0, 1, 1) | uvec4(0, 0, 0, 0) ];
3129				}
3130
3131				both ""
3132					#version 320 es
3133					precision highp float;
3134					${DECLARATIONS}
3135
3136					void main()
3137					{
3138						${SETUP}
3139						out0 = uvec4(1, 2, 3, 4) / in0;
3140						${OUTPUT}
3141					}
3142				""
3143			end
3144			case uint_to_float
3145				version 320 es
3146				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3147				values
3148				{
3149					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
3150					output float out0 = [ 2.0 | 0.666666666667 | 0.5 | 0.285714285714 | 0.181818181818 ];
3151				}
3152
3153				both ""
3154					#version 320 es
3155					precision highp float;
3156					${DECLARATIONS}
3157
3158					void main()
3159					{
3160						${SETUP}
3161						out0 = 2.0 / in0;
3162						${OUTPUT}
3163					}
3164				""
3165			end
3166			case uint_to_vec2
3167				version 320 es
3168				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3169				values
3170				{
3171					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
3172					output vec2 out0 = [ vec2(1.0, 2.0) | vec2(0.333333333333, 0.666666666667) | vec2(0.25, 0.5) | vec2(0.142857142857, 0.285714285714) | vec2(0.0909090909091, 0.181818181818) ];
3173				}
3174
3175				both ""
3176					#version 320 es
3177					precision highp float;
3178					${DECLARATIONS}
3179
3180					void main()
3181					{
3182						${SETUP}
3183						out0 = vec2(1.0, 2.0) / in0;
3184						${OUTPUT}
3185					}
3186				""
3187			end
3188			case uint_to_vec3
3189				version 320 es
3190				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3191				values
3192				{
3193					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
3194					output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(0.333333333333, 0.666666666667, 1.0) | vec3(0.25, 0.5, 0.75) | vec3(0.142857142857, 0.285714285714, 0.428571428571) | vec3(0.0909090909091, 0.181818181818, 0.272727272727) ];
3195				}
3196
3197				both ""
3198					#version 320 es
3199					precision highp float;
3200					${DECLARATIONS}
3201
3202					void main()
3203					{
3204						${SETUP}
3205						out0 = vec3(1.0, 2.0, 3.0) / in0;
3206						${OUTPUT}
3207					}
3208				""
3209			end
3210			case uint_to_vec4
3211				version 320 es
3212				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3213				values
3214				{
3215					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
3216					output vec4 out0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(0.333333333333, 0.666666666667, 1.0, 1.33333333333) | vec4(0.25, 0.5, 0.75, 1.0) | vec4(0.142857142857, 0.285714285714, 0.428571428571, 0.571428571429) | vec4(0.0909090909091, 0.181818181818, 0.272727272727, 0.363636363636) ];
3217				}
3218
3219				both ""
3220					#version 320 es
3221					precision highp float;
3222					${DECLARATIONS}
3223
3224					void main()
3225					{
3226						${SETUP}
3227						out0 = vec4(1.0, 2.0, 3.0, 4.0) / in0;
3228						${OUTPUT}
3229					}
3230				""
3231			end
3232			case ivec2_to_uvec2
3233				version 320 es
3234				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3235				values
3236				{
3237					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
3238					output uvec2 out0 = [ uvec2(1, 1) | uvec2(0, 2) | uvec2(0, 0) ];
3239				}
3240
3241				both ""
3242					#version 320 es
3243					precision highp float;
3244					${DECLARATIONS}
3245
3246					void main()
3247					{
3248						${SETUP}
3249						out0 = uvec2(1, 2) / in0;
3250						${OUTPUT}
3251					}
3252				""
3253			end
3254			case ivec2_to_vec2
3255				version 320 es
3256				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3257				values
3258				{
3259					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
3260					output vec2 out0 = [ vec2(1.0, 1.0) | vec2(0.5, 2.0) | vec2(0.333333333333, 0.285714285714) ];
3261				}
3262
3263				both ""
3264					#version 320 es
3265					precision highp float;
3266					${DECLARATIONS}
3267
3268					void main()
3269					{
3270						${SETUP}
3271						out0 = vec2(1.0, 2.0) / in0;
3272						${OUTPUT}
3273					}
3274				""
3275			end
3276			case uvec2_to_vec2
3277				version 320 es
3278				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3279				values
3280				{
3281					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
3282					output vec2 out0 = [ vec2(0.5, 0.666666666667) | vec2(0.25, 0.333333333333) | vec2(1.0, 0.153846153846) ];
3283				}
3284
3285				both ""
3286					#version 320 es
3287					precision highp float;
3288					${DECLARATIONS}
3289
3290					void main()
3291					{
3292						${SETUP}
3293						out0 = vec2(1.0, 2.0) / in0;
3294						${OUTPUT}
3295					}
3296				""
3297			end
3298			case ivec3_to_uvec3
3299				version 320 es
3300				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3301				values
3302				{
3303					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
3304					output uvec3 out0 = [ uvec3(1, 1, 1) | uvec3(0, 2, 1) | uvec3(0, 0, 1) ];
3305				}
3306
3307				both ""
3308					#version 320 es
3309					precision highp float;
3310					${DECLARATIONS}
3311
3312					void main()
3313					{
3314						${SETUP}
3315						out0 = uvec3(1, 2, 3) / in0;
3316						${OUTPUT}
3317					}
3318				""
3319			end
3320			case ivec3_to_vec3
3321				version 320 es
3322				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3323				values
3324				{
3325					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
3326					output vec3 out0 = [ vec3(1.0, 1.0, 1.0) | vec3(0.5, 2.0, 1.5) | vec3(0.333333333333, 0.285714285714, 1.5) ];
3327				}
3328
3329				both ""
3330					#version 320 es
3331					precision highp float;
3332					${DECLARATIONS}
3333
3334					void main()
3335					{
3336						${SETUP}
3337						out0 = vec3(1.0, 2.0, 3.0) / in0;
3338						${OUTPUT}
3339					}
3340				""
3341			end
3342			case uvec3_to_vec3
3343				version 320 es
3344				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3345				values
3346				{
3347					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
3348					output vec3 out0 = [ vec3(0.5, 0.666666666667, 0.6) | vec3(0.25, 0.333333333333, 1.5) | vec3(1.0, 0.153846153846, 0.428571428571) ];
3349				}
3350
3351				both ""
3352					#version 320 es
3353					precision highp float;
3354					${DECLARATIONS}
3355
3356					void main()
3357					{
3358						${SETUP}
3359						out0 = vec3(1.0, 2.0, 3.0) / in0;
3360						${OUTPUT}
3361					}
3362				""
3363			end
3364			case ivec4_to_uvec4
3365				version 320 es
3366				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3367				values
3368				{
3369					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
3370					output uvec4 out0 = [ uvec4(1, 1, 1, 1) | uvec4(0, 2, 1, 0) | uvec4(0, 0, 1, 0) ];
3371				}
3372
3373				both ""
3374					#version 320 es
3375					precision highp float;
3376					${DECLARATIONS}
3377
3378					void main()
3379					{
3380						${SETUP}
3381						out0 = uvec4(1, 2, 3, 4) / in0;
3382						${OUTPUT}
3383					}
3384				""
3385			end
3386			case ivec4_to_vec4
3387				version 320 es
3388				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3389				values
3390				{
3391					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
3392					output vec4 out0 = [ vec4(1.0, 1.0, 1.0, 1.0) | vec4(0.5, 2.0, 1.5, 0.666666666667) | vec4(0.333333333333, 0.285714285714, 1.5, 0.8) ];
3393				}
3394
3395				both ""
3396					#version 320 es
3397					precision highp float;
3398					${DECLARATIONS}
3399
3400					void main()
3401					{
3402						${SETUP}
3403						out0 = vec4(1.0, 2.0, 3.0, 4.0) / in0;
3404						${OUTPUT}
3405					}
3406				""
3407			end
3408			case uvec4_to_vec4
3409				version 320 es
3410				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3411				values
3412				{
3413					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
3414					output vec4 out0 = [ vec4(0.5, 0.666666666667, 0.6, 0.5) | vec4(0.25, 0.333333333333, 1.5, 0.444444444444) | vec4(1.0, 0.153846153846, 0.428571428571, 1.0) ];
3415				}
3416
3417				both ""
3418					#version 320 es
3419					precision highp float;
3420					${DECLARATIONS}
3421
3422					void main()
3423					{
3424						${SETUP}
3425						out0 = vec4(1.0, 2.0, 3.0, 4.0) / in0;
3426						${OUTPUT}
3427					}
3428				""
3429			end
3430
3431		end # div
3432
3433	end # literal_before_input
3434
3435end # arithmetic
3436group comparisons "Comparisons"
3437
3438	group input_before_literal "Input before literal"
3439
3440		group equal "Equal"
3441
3442			case int_to_float
3443				version 320 es
3444				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3445				values
3446				{
3447					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
3448					output bool out0 = [ true | false | false | false | false ];
3449				}
3450
3451				both ""
3452					#version 320 es
3453					precision highp float;
3454					${DECLARATIONS}
3455
3456					void main()
3457					{
3458						${SETUP}
3459						out0 = in0 == 2.0;
3460						${OUTPUT}
3461					}
3462				""
3463			end
3464			case int_to_uint
3465				version 320 es
3466				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3467				values
3468				{
3469					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
3470					output bool out0 = [ true | false | false | false | false ];
3471				}
3472
3473				both ""
3474					#version 320 es
3475					precision highp float;
3476					${DECLARATIONS}
3477
3478					void main()
3479					{
3480						${SETUP}
3481						out0 = in0 == 2;
3482						${OUTPUT}
3483					}
3484				""
3485			end
3486			case uint_to_float
3487				version 320 es
3488				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3489				values
3490				{
3491					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
3492					output bool out0 = [ false | false | false | false | false ];
3493				}
3494
3495				both ""
3496					#version 320 es
3497					precision highp float;
3498					${DECLARATIONS}
3499
3500					void main()
3501					{
3502						${SETUP}
3503						out0 = in0 == 2.0;
3504						${OUTPUT}
3505					}
3506				""
3507			end
3508			case ivec2_to_uvec2
3509				version 320 es
3510				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3511				values
3512				{
3513					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
3514					output bool out0 = [ true | false | false ];
3515				}
3516
3517				both ""
3518					#version 320 es
3519					precision highp float;
3520					${DECLARATIONS}
3521
3522					void main()
3523					{
3524						${SETUP}
3525						out0 = in0 == uvec2(1, 2);
3526						${OUTPUT}
3527					}
3528				""
3529			end
3530			case ivec2_to_vec2
3531				version 320 es
3532				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3533				values
3534				{
3535					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
3536					output bool out0 = [ true | false | false ];
3537				}
3538
3539				both ""
3540					#version 320 es
3541					precision highp float;
3542					${DECLARATIONS}
3543
3544					void main()
3545					{
3546						${SETUP}
3547						out0 = in0 == vec2(1.0, 2.0);
3548						${OUTPUT}
3549					}
3550				""
3551			end
3552			case uvec2_to_vec2
3553				version 320 es
3554				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3555				values
3556				{
3557					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
3558					output bool out0 = [ false | false | false ];
3559				}
3560
3561				both ""
3562					#version 320 es
3563					precision highp float;
3564					${DECLARATIONS}
3565
3566					void main()
3567					{
3568						${SETUP}
3569						out0 = in0 == vec2(1.0, 2.0);
3570						${OUTPUT}
3571					}
3572				""
3573			end
3574			case ivec3_to_uvec3
3575				version 320 es
3576				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3577				values
3578				{
3579					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
3580					output bool out0 = [ true | false | false ];
3581				}
3582
3583				both ""
3584					#version 320 es
3585					precision highp float;
3586					${DECLARATIONS}
3587
3588					void main()
3589					{
3590						${SETUP}
3591						out0 = in0 == uvec3(1, 2, 3);
3592						${OUTPUT}
3593					}
3594				""
3595			end
3596			case ivec3_to_vec3
3597				version 320 es
3598				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3599				values
3600				{
3601					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
3602					output bool out0 = [ true | false | false ];
3603				}
3604
3605				both ""
3606					#version 320 es
3607					precision highp float;
3608					${DECLARATIONS}
3609
3610					void main()
3611					{
3612						${SETUP}
3613						out0 = in0 == vec3(1.0, 2.0, 3.0);
3614						${OUTPUT}
3615					}
3616				""
3617			end
3618			case uvec3_to_vec3
3619				version 320 es
3620				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3621				values
3622				{
3623					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
3624					output bool out0 = [ false | false | false ];
3625				}
3626
3627				both ""
3628					#version 320 es
3629					precision highp float;
3630					${DECLARATIONS}
3631
3632					void main()
3633					{
3634						${SETUP}
3635						out0 = in0 == vec3(1.0, 2.0, 3.0);
3636						${OUTPUT}
3637					}
3638				""
3639			end
3640			case ivec4_to_uvec4
3641				version 320 es
3642				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3643				values
3644				{
3645					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
3646					output bool out0 = [ true | false | false ];
3647				}
3648
3649				both ""
3650					#version 320 es
3651					precision highp float;
3652					${DECLARATIONS}
3653
3654					void main()
3655					{
3656						${SETUP}
3657						out0 = in0 == uvec4(1, 2, 3, 4);
3658						${OUTPUT}
3659					}
3660				""
3661			end
3662			case ivec4_to_vec4
3663				version 320 es
3664				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3665				values
3666				{
3667					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
3668					output bool out0 = [ true | false | false ];
3669				}
3670
3671				both ""
3672					#version 320 es
3673					precision highp float;
3674					${DECLARATIONS}
3675
3676					void main()
3677					{
3678						${SETUP}
3679						out0 = in0 == vec4(1.0, 2.0, 3.0, 4.0);
3680						${OUTPUT}
3681					}
3682				""
3683			end
3684			case uvec4_to_vec4
3685				version 320 es
3686				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3687				values
3688				{
3689					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
3690					output bool out0 = [ false | false | false ];
3691				}
3692
3693				both ""
3694					#version 320 es
3695					precision highp float;
3696					${DECLARATIONS}
3697
3698					void main()
3699					{
3700						${SETUP}
3701						out0 = in0 == vec4(1.0, 2.0, 3.0, 4.0);
3702						${OUTPUT}
3703					}
3704				""
3705			end
3706
3707		end # equal
3708		group not_equal "Not equal"
3709
3710			case int_to_float
3711				version 320 es
3712				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3713				values
3714				{
3715					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
3716					output bool out0 = [ false | true | true | true | true ];
3717				}
3718
3719				both ""
3720					#version 320 es
3721					precision highp float;
3722					${DECLARATIONS}
3723
3724					void main()
3725					{
3726						${SETUP}
3727						out0 = in0 != 2.0;
3728						${OUTPUT}
3729					}
3730				""
3731			end
3732			case int_to_uint
3733				version 320 es
3734				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3735				values
3736				{
3737					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
3738					output bool out0 = [ false | true | true | true | true ];
3739				}
3740
3741				both ""
3742					#version 320 es
3743					precision highp float;
3744					${DECLARATIONS}
3745
3746					void main()
3747					{
3748						${SETUP}
3749						out0 = in0 != 2;
3750						${OUTPUT}
3751					}
3752				""
3753			end
3754			case uint_to_float
3755				version 320 es
3756				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3757				values
3758				{
3759					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
3760					output bool out0 = [ true | true | true | true | true ];
3761				}
3762
3763				both ""
3764					#version 320 es
3765					precision highp float;
3766					${DECLARATIONS}
3767
3768					void main()
3769					{
3770						${SETUP}
3771						out0 = in0 != 2.0;
3772						${OUTPUT}
3773					}
3774				""
3775			end
3776			case ivec2_to_uvec2
3777				version 320 es
3778				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3779				values
3780				{
3781					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
3782					output bool out0 = [ false | true | true ];
3783				}
3784
3785				both ""
3786					#version 320 es
3787					precision highp float;
3788					${DECLARATIONS}
3789
3790					void main()
3791					{
3792						${SETUP}
3793						out0 = in0 != uvec2(1, 2);
3794						${OUTPUT}
3795					}
3796				""
3797			end
3798			case ivec2_to_vec2
3799				version 320 es
3800				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3801				values
3802				{
3803					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
3804					output bool out0 = [ false | true | true ];
3805				}
3806
3807				both ""
3808					#version 320 es
3809					precision highp float;
3810					${DECLARATIONS}
3811
3812					void main()
3813					{
3814						${SETUP}
3815						out0 = in0 != vec2(1.0, 2.0);
3816						${OUTPUT}
3817					}
3818				""
3819			end
3820			case uvec2_to_vec2
3821				version 320 es
3822				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3823				values
3824				{
3825					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
3826					output bool out0 = [ true | true | true ];
3827				}
3828
3829				both ""
3830					#version 320 es
3831					precision highp float;
3832					${DECLARATIONS}
3833
3834					void main()
3835					{
3836						${SETUP}
3837						out0 = in0 != vec2(1.0, 2.0);
3838						${OUTPUT}
3839					}
3840				""
3841			end
3842			case ivec3_to_uvec3
3843				version 320 es
3844				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3845				values
3846				{
3847					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
3848					output bool out0 = [ false | true | true ];
3849				}
3850
3851				both ""
3852					#version 320 es
3853					precision highp float;
3854					${DECLARATIONS}
3855
3856					void main()
3857					{
3858						${SETUP}
3859						out0 = in0 != uvec3(1, 2, 3);
3860						${OUTPUT}
3861					}
3862				""
3863			end
3864			case ivec3_to_vec3
3865				version 320 es
3866				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3867				values
3868				{
3869					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
3870					output bool out0 = [ false | true | true ];
3871				}
3872
3873				both ""
3874					#version 320 es
3875					precision highp float;
3876					${DECLARATIONS}
3877
3878					void main()
3879					{
3880						${SETUP}
3881						out0 = in0 != vec3(1.0, 2.0, 3.0);
3882						${OUTPUT}
3883					}
3884				""
3885			end
3886			case uvec3_to_vec3
3887				version 320 es
3888				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3889				values
3890				{
3891					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
3892					output bool out0 = [ true | true | true ];
3893				}
3894
3895				both ""
3896					#version 320 es
3897					precision highp float;
3898					${DECLARATIONS}
3899
3900					void main()
3901					{
3902						${SETUP}
3903						out0 = in0 != vec3(1.0, 2.0, 3.0);
3904						${OUTPUT}
3905					}
3906				""
3907			end
3908			case ivec4_to_uvec4
3909				version 320 es
3910				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3911				values
3912				{
3913					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
3914					output bool out0 = [ false | true | true ];
3915				}
3916
3917				both ""
3918					#version 320 es
3919					precision highp float;
3920					${DECLARATIONS}
3921
3922					void main()
3923					{
3924						${SETUP}
3925						out0 = in0 != uvec4(1, 2, 3, 4);
3926						${OUTPUT}
3927					}
3928				""
3929			end
3930			case ivec4_to_vec4
3931				version 320 es
3932				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3933				values
3934				{
3935					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
3936					output bool out0 = [ false | true | true ];
3937				}
3938
3939				both ""
3940					#version 320 es
3941					precision highp float;
3942					${DECLARATIONS}
3943
3944					void main()
3945					{
3946						${SETUP}
3947						out0 = in0 != vec4(1.0, 2.0, 3.0, 4.0);
3948						${OUTPUT}
3949					}
3950				""
3951			end
3952			case uvec4_to_vec4
3953				version 320 es
3954				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3955				values
3956				{
3957					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
3958					output bool out0 = [ true | true | true ];
3959				}
3960
3961				both ""
3962					#version 320 es
3963					precision highp float;
3964					${DECLARATIONS}
3965
3966					void main()
3967					{
3968						${SETUP}
3969						out0 = in0 != vec4(1.0, 2.0, 3.0, 4.0);
3970						${OUTPUT}
3971					}
3972				""
3973			end
3974
3975		end # not_equal
3976		group less "Less than"
3977
3978			case int_to_float
3979				version 320 es
3980				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
3981				values
3982				{
3983					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
3984					output bool out0 = [ false | true | true | false | false ];
3985				}
3986
3987				both ""
3988					#version 320 es
3989					precision highp float;
3990					${DECLARATIONS}
3991
3992					void main()
3993					{
3994						${SETUP}
3995						out0 = in0 < 2.0;
3996						${OUTPUT}
3997					}
3998				""
3999			end
4000			case int_to_uint
4001				version 320 es
4002				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4003				values
4004				{
4005					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4006					output bool out0 = [ false | true | true | false | false ];
4007				}
4008
4009				both ""
4010					#version 320 es
4011					precision highp float;
4012					${DECLARATIONS}
4013
4014					void main()
4015					{
4016						${SETUP}
4017						out0 = in0 < 2;
4018						${OUTPUT}
4019					}
4020				""
4021			end
4022			case uint_to_float
4023				version 320 es
4024				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4025				values
4026				{
4027					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
4028					output bool out0 = [ true | false | false | false | false ];
4029				}
4030
4031				both ""
4032					#version 320 es
4033					precision highp float;
4034					${DECLARATIONS}
4035
4036					void main()
4037					{
4038						${SETUP}
4039						out0 = in0 < 2.0;
4040						${OUTPUT}
4041					}
4042				""
4043			end
4044
4045		end # less
4046		group greater "Greater than"
4047
4048			case int_to_float
4049				version 320 es
4050				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4051				values
4052				{
4053					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4054					output bool out0 = [ false | false | false | true | true ];
4055				}
4056
4057				both ""
4058					#version 320 es
4059					precision highp float;
4060					${DECLARATIONS}
4061
4062					void main()
4063					{
4064						${SETUP}
4065						out0 = in0 > 2.0;
4066						${OUTPUT}
4067					}
4068				""
4069			end
4070			case int_to_uint
4071				version 320 es
4072				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4073				values
4074				{
4075					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4076					output bool out0 = [ false | false | false | true | true ];
4077				}
4078
4079				both ""
4080					#version 320 es
4081					precision highp float;
4082					${DECLARATIONS}
4083
4084					void main()
4085					{
4086						${SETUP}
4087						out0 = in0 > 2;
4088						${OUTPUT}
4089					}
4090				""
4091			end
4092			case uint_to_float
4093				version 320 es
4094				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4095				values
4096				{
4097					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
4098					output bool out0 = [ false | true | true | true | true ];
4099				}
4100
4101				both ""
4102					#version 320 es
4103					precision highp float;
4104					${DECLARATIONS}
4105
4106					void main()
4107					{
4108						${SETUP}
4109						out0 = in0 > 2.0;
4110						${OUTPUT}
4111					}
4112				""
4113			end
4114
4115		end # greater
4116		group less_or_equal "Less than or equal"
4117
4118			case int_to_float
4119				version 320 es
4120				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4121				values
4122				{
4123					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4124					output bool out0 = [ true | true | true | false | false ];
4125				}
4126
4127				both ""
4128					#version 320 es
4129					precision highp float;
4130					${DECLARATIONS}
4131
4132					void main()
4133					{
4134						${SETUP}
4135						out0 = in0 <= 2.0;
4136						${OUTPUT}
4137					}
4138				""
4139			end
4140			case int_to_uint
4141				version 320 es
4142				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4143				values
4144				{
4145					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4146					output bool out0 = [ true | true | true | false | false ];
4147				}
4148
4149				both ""
4150					#version 320 es
4151					precision highp float;
4152					${DECLARATIONS}
4153
4154					void main()
4155					{
4156						${SETUP}
4157						out0 = in0 <= 2;
4158						${OUTPUT}
4159					}
4160				""
4161			end
4162			case uint_to_float
4163				version 320 es
4164				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4165				values
4166				{
4167					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
4168					output bool out0 = [ true | false | false | false | false ];
4169				}
4170
4171				both ""
4172					#version 320 es
4173					precision highp float;
4174					${DECLARATIONS}
4175
4176					void main()
4177					{
4178						${SETUP}
4179						out0 = in0 <= 2.0;
4180						${OUTPUT}
4181					}
4182				""
4183			end
4184
4185		end # less_or_equal
4186		group greater_or_equal "Greater than or equal"
4187
4188			case int_to_float
4189				version 320 es
4190				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4191				values
4192				{
4193					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4194					output bool out0 = [ true | false | false | true | true ];
4195				}
4196
4197				both ""
4198					#version 320 es
4199					precision highp float;
4200					${DECLARATIONS}
4201
4202					void main()
4203					{
4204						${SETUP}
4205						out0 = in0 >= 2.0;
4206						${OUTPUT}
4207					}
4208				""
4209			end
4210			case int_to_uint
4211				version 320 es
4212				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4213				values
4214				{
4215					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4216					output bool out0 = [ true | false | false | true | true ];
4217				}
4218
4219				both ""
4220					#version 320 es
4221					precision highp float;
4222					${DECLARATIONS}
4223
4224					void main()
4225					{
4226						${SETUP}
4227						out0 = in0 >= 2;
4228						${OUTPUT}
4229					}
4230				""
4231			end
4232			case uint_to_float
4233				version 320 es
4234				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4235				values
4236				{
4237					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
4238					output bool out0 = [ false | true | true | true | true ];
4239				}
4240
4241				both ""
4242					#version 320 es
4243					precision highp float;
4244					${DECLARATIONS}
4245
4246					void main()
4247					{
4248						${SETUP}
4249						out0 = in0 >= 2.0;
4250						${OUTPUT}
4251					}
4252				""
4253			end
4254
4255		end # greater_or_equal
4256
4257	end # input_before_literal
4258	group literal_before_input "Literal before input"
4259
4260		group equal "Equal"
4261
4262			case int_to_float
4263				version 320 es
4264				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4265				values
4266				{
4267					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4268					output bool out0 = [ true | false | false | false | false ];
4269				}
4270
4271				both ""
4272					#version 320 es
4273					precision highp float;
4274					${DECLARATIONS}
4275
4276					void main()
4277					{
4278						${SETUP}
4279						out0 = 2.0 == in0;
4280						${OUTPUT}
4281					}
4282				""
4283			end
4284			case int_to_uint
4285				version 320 es
4286				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4287				values
4288				{
4289					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4290					output bool out0 = [ true | false | false | false | false ];
4291				}
4292
4293				both ""
4294					#version 320 es
4295					precision highp float;
4296					${DECLARATIONS}
4297
4298					void main()
4299					{
4300						${SETUP}
4301						out0 = 2 == in0;
4302						${OUTPUT}
4303					}
4304				""
4305			end
4306			case uint_to_float
4307				version 320 es
4308				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4309				values
4310				{
4311					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
4312					output bool out0 = [ false | false | false | false | false ];
4313				}
4314
4315				both ""
4316					#version 320 es
4317					precision highp float;
4318					${DECLARATIONS}
4319
4320					void main()
4321					{
4322						${SETUP}
4323						out0 = 2.0 == in0;
4324						${OUTPUT}
4325					}
4326				""
4327			end
4328			case ivec2_to_uvec2
4329				version 320 es
4330				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4331				values
4332				{
4333					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
4334					output bool out0 = [ true | false | false ];
4335				}
4336
4337				both ""
4338					#version 320 es
4339					precision highp float;
4340					${DECLARATIONS}
4341
4342					void main()
4343					{
4344						${SETUP}
4345						out0 = uvec2(1, 2) == in0;
4346						${OUTPUT}
4347					}
4348				""
4349			end
4350			case ivec2_to_vec2
4351				version 320 es
4352				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4353				values
4354				{
4355					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
4356					output bool out0 = [ true | false | false ];
4357				}
4358
4359				both ""
4360					#version 320 es
4361					precision highp float;
4362					${DECLARATIONS}
4363
4364					void main()
4365					{
4366						${SETUP}
4367						out0 = vec2(1.0, 2.0) == in0;
4368						${OUTPUT}
4369					}
4370				""
4371			end
4372			case uvec2_to_vec2
4373				version 320 es
4374				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4375				values
4376				{
4377					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
4378					output bool out0 = [ false | false | false ];
4379				}
4380
4381				both ""
4382					#version 320 es
4383					precision highp float;
4384					${DECLARATIONS}
4385
4386					void main()
4387					{
4388						${SETUP}
4389						out0 = vec2(1.0, 2.0) == in0;
4390						${OUTPUT}
4391					}
4392				""
4393			end
4394			case ivec3_to_uvec3
4395				version 320 es
4396				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4397				values
4398				{
4399					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
4400					output bool out0 = [ true | false | false ];
4401				}
4402
4403				both ""
4404					#version 320 es
4405					precision highp float;
4406					${DECLARATIONS}
4407
4408					void main()
4409					{
4410						${SETUP}
4411						out0 = uvec3(1, 2, 3) == in0;
4412						${OUTPUT}
4413					}
4414				""
4415			end
4416			case ivec3_to_vec3
4417				version 320 es
4418				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4419				values
4420				{
4421					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
4422					output bool out0 = [ true | false | false ];
4423				}
4424
4425				both ""
4426					#version 320 es
4427					precision highp float;
4428					${DECLARATIONS}
4429
4430					void main()
4431					{
4432						${SETUP}
4433						out0 = vec3(1.0, 2.0, 3.0) == in0;
4434						${OUTPUT}
4435					}
4436				""
4437			end
4438			case uvec3_to_vec3
4439				version 320 es
4440				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4441				values
4442				{
4443					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
4444					output bool out0 = [ false | false | false ];
4445				}
4446
4447				both ""
4448					#version 320 es
4449					precision highp float;
4450					${DECLARATIONS}
4451
4452					void main()
4453					{
4454						${SETUP}
4455						out0 = vec3(1.0, 2.0, 3.0) == in0;
4456						${OUTPUT}
4457					}
4458				""
4459			end
4460			case ivec4_to_uvec4
4461				version 320 es
4462				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4463				values
4464				{
4465					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
4466					output bool out0 = [ true | false | false ];
4467				}
4468
4469				both ""
4470					#version 320 es
4471					precision highp float;
4472					${DECLARATIONS}
4473
4474					void main()
4475					{
4476						${SETUP}
4477						out0 = uvec4(1, 2, 3, 4) == in0;
4478						${OUTPUT}
4479					}
4480				""
4481			end
4482			case ivec4_to_vec4
4483				version 320 es
4484				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4485				values
4486				{
4487					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
4488					output bool out0 = [ true | false | false ];
4489				}
4490
4491				both ""
4492					#version 320 es
4493					precision highp float;
4494					${DECLARATIONS}
4495
4496					void main()
4497					{
4498						${SETUP}
4499						out0 = vec4(1.0, 2.0, 3.0, 4.0) == in0;
4500						${OUTPUT}
4501					}
4502				""
4503			end
4504			case uvec4_to_vec4
4505				version 320 es
4506				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4507				values
4508				{
4509					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
4510					output bool out0 = [ false | false | false ];
4511				}
4512
4513				both ""
4514					#version 320 es
4515					precision highp float;
4516					${DECLARATIONS}
4517
4518					void main()
4519					{
4520						${SETUP}
4521						out0 = vec4(1.0, 2.0, 3.0, 4.0) == in0;
4522						${OUTPUT}
4523					}
4524				""
4525			end
4526
4527		end # equal
4528		group not_equal "Not equal"
4529
4530			case int_to_float
4531				version 320 es
4532				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4533				values
4534				{
4535					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4536					output bool out0 = [ false | true | true | true | true ];
4537				}
4538
4539				both ""
4540					#version 320 es
4541					precision highp float;
4542					${DECLARATIONS}
4543
4544					void main()
4545					{
4546						${SETUP}
4547						out0 = 2.0 != in0;
4548						${OUTPUT}
4549					}
4550				""
4551			end
4552			case int_to_uint
4553				version 320 es
4554				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4555				values
4556				{
4557					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4558					output bool out0 = [ false | true | true | true | true ];
4559				}
4560
4561				both ""
4562					#version 320 es
4563					precision highp float;
4564					${DECLARATIONS}
4565
4566					void main()
4567					{
4568						${SETUP}
4569						out0 = 2 != in0;
4570						${OUTPUT}
4571					}
4572				""
4573			end
4574			case uint_to_float
4575				version 320 es
4576				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4577				values
4578				{
4579					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
4580					output bool out0 = [ true | true | true | true | true ];
4581				}
4582
4583				both ""
4584					#version 320 es
4585					precision highp float;
4586					${DECLARATIONS}
4587
4588					void main()
4589					{
4590						${SETUP}
4591						out0 = 2.0 != in0;
4592						${OUTPUT}
4593					}
4594				""
4595			end
4596			case ivec2_to_uvec2
4597				version 320 es
4598				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4599				values
4600				{
4601					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
4602					output bool out0 = [ false | true | true ];
4603				}
4604
4605				both ""
4606					#version 320 es
4607					precision highp float;
4608					${DECLARATIONS}
4609
4610					void main()
4611					{
4612						${SETUP}
4613						out0 = uvec2(1, 2) != in0;
4614						${OUTPUT}
4615					}
4616				""
4617			end
4618			case ivec2_to_vec2
4619				version 320 es
4620				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4621				values
4622				{
4623					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
4624					output bool out0 = [ false | true | true ];
4625				}
4626
4627				both ""
4628					#version 320 es
4629					precision highp float;
4630					${DECLARATIONS}
4631
4632					void main()
4633					{
4634						${SETUP}
4635						out0 = vec2(1.0, 2.0) != in0;
4636						${OUTPUT}
4637					}
4638				""
4639			end
4640			case uvec2_to_vec2
4641				version 320 es
4642				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4643				values
4644				{
4645					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
4646					output bool out0 = [ true | true | true ];
4647				}
4648
4649				both ""
4650					#version 320 es
4651					precision highp float;
4652					${DECLARATIONS}
4653
4654					void main()
4655					{
4656						${SETUP}
4657						out0 = vec2(1.0, 2.0) != in0;
4658						${OUTPUT}
4659					}
4660				""
4661			end
4662			case ivec3_to_uvec3
4663				version 320 es
4664				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4665				values
4666				{
4667					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
4668					output bool out0 = [ false | true | true ];
4669				}
4670
4671				both ""
4672					#version 320 es
4673					precision highp float;
4674					${DECLARATIONS}
4675
4676					void main()
4677					{
4678						${SETUP}
4679						out0 = uvec3(1, 2, 3) != in0;
4680						${OUTPUT}
4681					}
4682				""
4683			end
4684			case ivec3_to_vec3
4685				version 320 es
4686				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4687				values
4688				{
4689					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
4690					output bool out0 = [ false | true | true ];
4691				}
4692
4693				both ""
4694					#version 320 es
4695					precision highp float;
4696					${DECLARATIONS}
4697
4698					void main()
4699					{
4700						${SETUP}
4701						out0 = vec3(1.0, 2.0, 3.0) != in0;
4702						${OUTPUT}
4703					}
4704				""
4705			end
4706			case uvec3_to_vec3
4707				version 320 es
4708				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4709				values
4710				{
4711					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
4712					output bool out0 = [ true | true | true ];
4713				}
4714
4715				both ""
4716					#version 320 es
4717					precision highp float;
4718					${DECLARATIONS}
4719
4720					void main()
4721					{
4722						${SETUP}
4723						out0 = vec3(1.0, 2.0, 3.0) != in0;
4724						${OUTPUT}
4725					}
4726				""
4727			end
4728			case ivec4_to_uvec4
4729				version 320 es
4730				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4731				values
4732				{
4733					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
4734					output bool out0 = [ false | true | true ];
4735				}
4736
4737				both ""
4738					#version 320 es
4739					precision highp float;
4740					${DECLARATIONS}
4741
4742					void main()
4743					{
4744						${SETUP}
4745						out0 = uvec4(1, 2, 3, 4) != in0;
4746						${OUTPUT}
4747					}
4748				""
4749			end
4750			case ivec4_to_vec4
4751				version 320 es
4752				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4753				values
4754				{
4755					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
4756					output bool out0 = [ false | true | true ];
4757				}
4758
4759				both ""
4760					#version 320 es
4761					precision highp float;
4762					${DECLARATIONS}
4763
4764					void main()
4765					{
4766						${SETUP}
4767						out0 = vec4(1.0, 2.0, 3.0, 4.0) != in0;
4768						${OUTPUT}
4769					}
4770				""
4771			end
4772			case uvec4_to_vec4
4773				version 320 es
4774				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4775				values
4776				{
4777					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
4778					output bool out0 = [ true | true | true ];
4779				}
4780
4781				both ""
4782					#version 320 es
4783					precision highp float;
4784					${DECLARATIONS}
4785
4786					void main()
4787					{
4788						${SETUP}
4789						out0 = vec4(1.0, 2.0, 3.0, 4.0) != in0;
4790						${OUTPUT}
4791					}
4792				""
4793			end
4794
4795		end # not_equal
4796		group less "Less than"
4797
4798			case int_to_float
4799				version 320 es
4800				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4801				values
4802				{
4803					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4804					output bool out0 = [ false | false | false | true | true ];
4805				}
4806
4807				both ""
4808					#version 320 es
4809					precision highp float;
4810					${DECLARATIONS}
4811
4812					void main()
4813					{
4814						${SETUP}
4815						out0 = 2.0 < in0;
4816						${OUTPUT}
4817					}
4818				""
4819			end
4820			case int_to_uint
4821				version 320 es
4822				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4823				values
4824				{
4825					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4826					output bool out0 = [ false | false | false | true | true ];
4827				}
4828
4829				both ""
4830					#version 320 es
4831					precision highp float;
4832					${DECLARATIONS}
4833
4834					void main()
4835					{
4836						${SETUP}
4837						out0 = 2 < in0;
4838						${OUTPUT}
4839					}
4840				""
4841			end
4842			case uint_to_float
4843				version 320 es
4844				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4845				values
4846				{
4847					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
4848					output bool out0 = [ false | true | true | true | true ];
4849				}
4850
4851				both ""
4852					#version 320 es
4853					precision highp float;
4854					${DECLARATIONS}
4855
4856					void main()
4857					{
4858						${SETUP}
4859						out0 = 2.0 < in0;
4860						${OUTPUT}
4861					}
4862				""
4863			end
4864
4865		end # less
4866		group greater "Greater than"
4867
4868			case int_to_float
4869				version 320 es
4870				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4871				values
4872				{
4873					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4874					output bool out0 = [ false | true | true | false | false ];
4875				}
4876
4877				both ""
4878					#version 320 es
4879					precision highp float;
4880					${DECLARATIONS}
4881
4882					void main()
4883					{
4884						${SETUP}
4885						out0 = 2.0 > in0;
4886						${OUTPUT}
4887					}
4888				""
4889			end
4890			case int_to_uint
4891				version 320 es
4892				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4893				values
4894				{
4895					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4896					output bool out0 = [ false | true | true | false | false ];
4897				}
4898
4899				both ""
4900					#version 320 es
4901					precision highp float;
4902					${DECLARATIONS}
4903
4904					void main()
4905					{
4906						${SETUP}
4907						out0 = 2 > in0;
4908						${OUTPUT}
4909					}
4910				""
4911			end
4912			case uint_to_float
4913				version 320 es
4914				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4915				values
4916				{
4917					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
4918					output bool out0 = [ true | false | false | false | false ];
4919				}
4920
4921				both ""
4922					#version 320 es
4923					precision highp float;
4924					${DECLARATIONS}
4925
4926					void main()
4927					{
4928						${SETUP}
4929						out0 = 2.0 > in0;
4930						${OUTPUT}
4931					}
4932				""
4933			end
4934
4935		end # greater
4936		group less_or_equal "Less than or equal"
4937
4938			case int_to_float
4939				version 320 es
4940				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4941				values
4942				{
4943					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4944					output bool out0 = [ true | false | false | true | true ];
4945				}
4946
4947				both ""
4948					#version 320 es
4949					precision highp float;
4950					${DECLARATIONS}
4951
4952					void main()
4953					{
4954						${SETUP}
4955						out0 = 2.0 <= in0;
4956						${OUTPUT}
4957					}
4958				""
4959			end
4960			case int_to_uint
4961				version 320 es
4962				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4963				values
4964				{
4965					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
4966					output bool out0 = [ true | false | false | true | true ];
4967				}
4968
4969				both ""
4970					#version 320 es
4971					precision highp float;
4972					${DECLARATIONS}
4973
4974					void main()
4975					{
4976						${SETUP}
4977						out0 = 2 <= in0;
4978						${OUTPUT}
4979					}
4980				""
4981			end
4982			case uint_to_float
4983				version 320 es
4984				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
4985				values
4986				{
4987					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
4988					output bool out0 = [ false | true | true | true | true ];
4989				}
4990
4991				both ""
4992					#version 320 es
4993					precision highp float;
4994					${DECLARATIONS}
4995
4996					void main()
4997					{
4998						${SETUP}
4999						out0 = 2.0 <= in0;
5000						${OUTPUT}
5001					}
5002				""
5003			end
5004
5005		end # less_or_equal
5006		group greater_or_equal "Greater than or equal"
5007
5008			case int_to_float
5009				version 320 es
5010				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5011				values
5012				{
5013					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5014					output bool out0 = [ true | true | true | false | false ];
5015				}
5016
5017				both ""
5018					#version 320 es
5019					precision highp float;
5020					${DECLARATIONS}
5021
5022					void main()
5023					{
5024						${SETUP}
5025						out0 = 2.0 >= in0;
5026						${OUTPUT}
5027					}
5028				""
5029			end
5030			case int_to_uint
5031				version 320 es
5032				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5033				values
5034				{
5035					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5036					output bool out0 = [ true | true | true | false | false ];
5037				}
5038
5039				both ""
5040					#version 320 es
5041					precision highp float;
5042					${DECLARATIONS}
5043
5044					void main()
5045					{
5046						${SETUP}
5047						out0 = 2 >= in0;
5048						${OUTPUT}
5049					}
5050				""
5051			end
5052			case uint_to_float
5053				version 320 es
5054				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5055				values
5056				{
5057					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
5058					output bool out0 = [ true | false | false | false | false ];
5059				}
5060
5061				both ""
5062					#version 320 es
5063					precision highp float;
5064					${DECLARATIONS}
5065
5066					void main()
5067					{
5068						${SETUP}
5069						out0 = 2.0 >= in0;
5070						${OUTPUT}
5071					}
5072				""
5073			end
5074
5075		end # greater_or_equal
5076
5077	end # literal_before_input
5078
5079end # comparisons
5080group array_subscripts "Array subscripts"
5081
5082	group input_before_subscript "Input before subscript"
5083
5084		case int_to_float
5085			version 320 es
5086			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5087			values
5088			{
5089				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5090				output float out0 = [ 3.0 | 2.0 | 2.0 | 4.0 | 6.0 ];
5091			}
5092
5093			both ""
5094				#version 320 es
5095				precision highp float;
5096				${DECLARATIONS}
5097
5098				void main()
5099				{
5100					${SETUP}
5101					float[] x = float[] (2.0, 1.0, 1.0, 3.0, 5.0);
5102					out0 = in0 + x[1];
5103					${OUTPUT}
5104				}
5105			""
5106		end
5107		case int_to_uint
5108			version 320 es
5109			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5110			values
5111			{
5112				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5113				output uint out0 = [ 5 | 4 | 4 | 6 | 8 ];
5114			}
5115
5116			both ""
5117				#version 320 es
5118				precision highp float;
5119				${DECLARATIONS}
5120
5121				void main()
5122				{
5123					${SETUP}
5124					uint[] x = uint[] (1, 3, 4, 7, 11);
5125					out0 = in0 + x[1];
5126					${OUTPUT}
5127				}
5128			""
5129		end
5130		case int_to_vec2
5131			version 320 es
5132			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5133			values
5134			{
5135				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5136				output vec2 out0 = [ vec2(4.0, 3.0) | vec2(3.0, 2.0) | vec2(3.0, 2.0) | vec2(5.0, 4.0) | vec2(7.0, 6.0) ];
5137			}
5138
5139			both ""
5140				#version 320 es
5141				precision highp float;
5142				${DECLARATIONS}
5143
5144				void main()
5145				{
5146					${SETUP}
5147					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
5148					out0 = in0 + x[1];
5149					${OUTPUT}
5150				}
5151			""
5152		end
5153		case int_to_vec3
5154			version 320 es
5155			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5156			values
5157			{
5158				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5159				output vec3 out0 = [ vec3(4.0, 3.0, 4.0) | vec3(3.0, 2.0, 3.0) | vec3(3.0, 2.0, 3.0) | vec3(5.0, 4.0, 5.0) | vec3(7.0, 6.0, 7.0) ];
5160			}
5161
5162			both ""
5163				#version 320 es
5164				precision highp float;
5165				${DECLARATIONS}
5166
5167				void main()
5168				{
5169					${SETUP}
5170					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
5171					out0 = in0 + x[1];
5172					${OUTPUT}
5173				}
5174			""
5175		end
5176		case int_to_vec4
5177			version 320 es
5178			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5179			values
5180			{
5181				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5182				output vec4 out0 = [ vec4(4.0, 3.0, 4.0, 8.0) | vec4(3.0, 2.0, 3.0, 7.0) | vec4(3.0, 2.0, 3.0, 7.0) | vec4(5.0, 4.0, 5.0, 9.0) | vec4(7.0, 6.0, 7.0, 11.0) ];
5183			}
5184
5185			both ""
5186				#version 320 es
5187				precision highp float;
5188				${DECLARATIONS}
5189
5190				void main()
5191				{
5192					${SETUP}
5193					vec4[] x = vec4[] (vec4(1.0, 2.0, 3.0, 4.0), vec4(2.0, 1.0, 2.0, 6.0), vec4(3.0, 7.0, 2.0, 5.0));
5194					out0 = in0 + x[1];
5195					${OUTPUT}
5196				}
5197			""
5198		end
5199		case int_to_uvec2
5200			version 320 es
5201			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5202			values
5203			{
5204				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5205				output uvec2 out0 = [ uvec2(6, 8) | uvec2(5, 7) | uvec2(5, 7) | uvec2(7, 9) | uvec2(9, 11) ];
5206			}
5207
5208			both ""
5209				#version 320 es
5210				precision highp float;
5211				${DECLARATIONS}
5212
5213				void main()
5214				{
5215					${SETUP}
5216					uvec2[] x = uvec2[] (uvec2(2, 3), uvec2(4, 6), uvec2(1, 13));
5217					out0 = in0 + x[1];
5218					${OUTPUT}
5219				}
5220			""
5221		end
5222		case int_to_uvec3
5223			version 320 es
5224			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5225			values
5226			{
5227				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5228				output uvec3 out0 = [ uvec3(6, 8, 4) | uvec3(5, 7, 3) | uvec3(5, 7, 3) | uvec3(7, 9, 5) | uvec3(9, 11, 7) ];
5229			}
5230
5231			both ""
5232				#version 320 es
5233				precision highp float;
5234				${DECLARATIONS}
5235
5236				void main()
5237				{
5238					${SETUP}
5239					uvec3[] x = uvec3[] (uvec3(2, 3, 5), uvec3(4, 6, 2), uvec3(1, 13, 7));
5240					out0 = in0 + x[1];
5241					${OUTPUT}
5242				}
5243			""
5244		end
5245		case int_to_uvec4
5246			version 320 es
5247			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5248			values
5249			{
5250				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5251				output uvec4 out0 = [ uvec4(6, 8, 4, 11) | uvec4(5, 7, 3, 10) | uvec4(5, 7, 3, 10) | uvec4(7, 9, 5, 12) | uvec4(9, 11, 7, 14) ];
5252			}
5253
5254			both ""
5255				#version 320 es
5256				precision highp float;
5257				${DECLARATIONS}
5258
5259				void main()
5260				{
5261					${SETUP}
5262					uvec4[] x = uvec4[] (uvec4(2, 3, 5, 8), uvec4(4, 6, 2, 9), uvec4(1, 13, 7, 4));
5263					out0 = in0 + x[1];
5264					${OUTPUT}
5265				}
5266			""
5267		end
5268		case uint_to_float
5269			version 320 es
5270			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5271			values
5272			{
5273				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
5274				output float out0 = [ 2.0 | 4.0 | 5.0 | 8.0 | 12.0 ];
5275			}
5276
5277			both ""
5278				#version 320 es
5279				precision highp float;
5280				${DECLARATIONS}
5281
5282				void main()
5283				{
5284					${SETUP}
5285					float[] x = float[] (2.0, 1.0, 1.0, 3.0, 5.0);
5286					out0 = in0 + x[1];
5287					${OUTPUT}
5288				}
5289			""
5290		end
5291		case uint_to_vec2
5292			version 320 es
5293			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5294			values
5295			{
5296				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
5297				output vec2 out0 = [ vec2(3.0, 2.0) | vec2(5.0, 4.0) | vec2(6.0, 5.0) | vec2(9.0, 8.0) | vec2(13.0, 12.0) ];
5298			}
5299
5300			both ""
5301				#version 320 es
5302				precision highp float;
5303				${DECLARATIONS}
5304
5305				void main()
5306				{
5307					${SETUP}
5308					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
5309					out0 = in0 + x[1];
5310					${OUTPUT}
5311				}
5312			""
5313		end
5314		case uint_to_vec3
5315			version 320 es
5316			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5317			values
5318			{
5319				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
5320				output vec3 out0 = [ vec3(3.0, 2.0, 3.0) | vec3(5.0, 4.0, 5.0) | vec3(6.0, 5.0, 6.0) | vec3(9.0, 8.0, 9.0) | vec3(13.0, 12.0, 13.0) ];
5321			}
5322
5323			both ""
5324				#version 320 es
5325				precision highp float;
5326				${DECLARATIONS}
5327
5328				void main()
5329				{
5330					${SETUP}
5331					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
5332					out0 = in0 + x[1];
5333					${OUTPUT}
5334				}
5335			""
5336		end
5337		case uint_to_vec4
5338			version 320 es
5339			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5340			values
5341			{
5342				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
5343				output vec4 out0 = [ vec4(3.0, 2.0, 3.0, 7.0) | vec4(5.0, 4.0, 5.0, 9.0) | vec4(6.0, 5.0, 6.0, 10.0) | vec4(9.0, 8.0, 9.0, 13.0) | vec4(13.0, 12.0, 13.0, 17.0) ];
5344			}
5345
5346			both ""
5347				#version 320 es
5348				precision highp float;
5349				${DECLARATIONS}
5350
5351				void main()
5352				{
5353					${SETUP}
5354					vec4[] x = vec4[] (vec4(1.0, 2.0, 3.0, 4.0), vec4(2.0, 1.0, 2.0, 6.0), vec4(3.0, 7.0, 2.0, 5.0));
5355					out0 = in0 + x[1];
5356					${OUTPUT}
5357				}
5358			""
5359		end
5360		case ivec2_to_uvec2
5361			version 320 es
5362			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5363			values
5364			{
5365				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
5366				output uvec2 out0 = [ uvec2(5, 8) | uvec2(6, 7) | uvec2(7, 13) ];
5367			}
5368
5369			both ""
5370				#version 320 es
5371				precision highp float;
5372				${DECLARATIONS}
5373
5374				void main()
5375				{
5376					${SETUP}
5377					uvec2[] x = uvec2[] (uvec2(2, 3), uvec2(4, 6), uvec2(1, 13));
5378					out0 = in0 + x[1];
5379					${OUTPUT}
5380				}
5381			""
5382		end
5383		case ivec2_to_vec2
5384			version 320 es
5385			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5386			values
5387			{
5388				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
5389				output vec2 out0 = [ vec2(3.0, 3.0) | vec2(4.0, 2.0) | vec2(5.0, 8.0) ];
5390			}
5391
5392			both ""
5393				#version 320 es
5394				precision highp float;
5395				${DECLARATIONS}
5396
5397				void main()
5398				{
5399					${SETUP}
5400					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
5401					out0 = in0 + x[1];
5402					${OUTPUT}
5403				}
5404			""
5405		end
5406		case uvec2_to_vec2
5407			version 320 es
5408			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5409			values
5410			{
5411				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
5412				output vec2 out0 = [ vec2(4.0, 4.0) | vec2(6.0, 7.0) | vec2(3.0, 14.0) ];
5413			}
5414
5415			both ""
5416				#version 320 es
5417				precision highp float;
5418				${DECLARATIONS}
5419
5420				void main()
5421				{
5422					${SETUP}
5423					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
5424					out0 = in0 + x[1];
5425					${OUTPUT}
5426				}
5427			""
5428		end
5429		case ivec3_to_uvec3
5430			version 320 es
5431			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5432			values
5433			{
5434				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
5435				output uvec3 out0 = [ uvec3(5, 8, 5) | uvec3(6, 7, 4) | uvec3(7, 13, 4) ];
5436			}
5437
5438			both ""
5439				#version 320 es
5440				precision highp float;
5441				${DECLARATIONS}
5442
5443				void main()
5444				{
5445					${SETUP}
5446					uvec3[] x = uvec3[] (uvec3(2, 3, 5), uvec3(4, 6, 2), uvec3(1, 13, 7));
5447					out0 = in0 + x[1];
5448					${OUTPUT}
5449				}
5450			""
5451		end
5452		case ivec3_to_vec3
5453			version 320 es
5454			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5455			values
5456			{
5457				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
5458				output vec3 out0 = [ vec3(3.0, 3.0, 5.0) | vec3(4.0, 2.0, 4.0) | vec3(5.0, 8.0, 4.0) ];
5459			}
5460
5461			both ""
5462				#version 320 es
5463				precision highp float;
5464				${DECLARATIONS}
5465
5466				void main()
5467				{
5468					${SETUP}
5469					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
5470					out0 = in0 + x[1];
5471					${OUTPUT}
5472				}
5473			""
5474		end
5475		case uvec3_to_vec3
5476			version 320 es
5477			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5478			values
5479			{
5480				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
5481				output vec3 out0 = [ vec3(4.0, 4.0, 7.0) | vec3(6.0, 7.0, 4.0) | vec3(3.0, 14.0, 9.0) ];
5482			}
5483
5484			both ""
5485				#version 320 es
5486				precision highp float;
5487				${DECLARATIONS}
5488
5489				void main()
5490				{
5491					${SETUP}
5492					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
5493					out0 = in0 + x[1];
5494					${OUTPUT}
5495				}
5496			""
5497		end
5498		case ivec4_to_uvec4
5499			version 320 es
5500			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5501			values
5502			{
5503				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
5504				output uvec4 out0 = [ uvec4(5, 8, 5, 13) | uvec4(6, 7, 4, 15) | uvec4(7, 13, 4, 14) ];
5505			}
5506
5507			both ""
5508				#version 320 es
5509				precision highp float;
5510				${DECLARATIONS}
5511
5512				void main()
5513				{
5514					${SETUP}
5515					uvec4[] x = uvec4[] (uvec4(2, 3, 5, 8), uvec4(4, 6, 2, 9), uvec4(1, 13, 7, 4));
5516					out0 = in0 + x[1];
5517					${OUTPUT}
5518				}
5519			""
5520		end
5521		case ivec4_to_vec4
5522			version 320 es
5523			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5524			values
5525			{
5526				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
5527				output vec4 out0 = [ vec4(3.0, 3.0, 5.0, 10.0) | vec4(4.0, 2.0, 4.0, 12.0) | vec4(5.0, 8.0, 4.0, 11.0) ];
5528			}
5529
5530			both ""
5531				#version 320 es
5532				precision highp float;
5533				${DECLARATIONS}
5534
5535				void main()
5536				{
5537					${SETUP}
5538					vec4[] x = vec4[] (vec4(1.0, 2.0, 3.0, 4.0), vec4(2.0, 1.0, 2.0, 6.0), vec4(3.0, 7.0, 2.0, 5.0));
5539					out0 = in0 + x[1];
5540					${OUTPUT}
5541				}
5542			""
5543		end
5544		case uvec4_to_vec4
5545			version 320 es
5546			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5547			values
5548			{
5549				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
5550				output vec4 out0 = [ vec4(4.0, 4.0, 7.0, 14.0) | vec4(6.0, 7.0, 4.0, 15.0) | vec4(3.0, 14.0, 9.0, 10.0) ];
5551			}
5552
5553			both ""
5554				#version 320 es
5555				precision highp float;
5556				${DECLARATIONS}
5557
5558				void main()
5559				{
5560					${SETUP}
5561					vec4[] x = vec4[] (vec4(1.0, 2.0, 3.0, 4.0), vec4(2.0, 1.0, 2.0, 6.0), vec4(3.0, 7.0, 2.0, 5.0));
5562					out0 = in0 + x[1];
5563					${OUTPUT}
5564				}
5565			""
5566		end
5567
5568	end # input_before_subscript
5569	group subscript_before_input "Subscript before input"
5570
5571		case int_to_float
5572			version 320 es
5573			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5574			values
5575			{
5576				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5577				output float out0 = [ 3.0 | 2.0 | 2.0 | 4.0 | 6.0 ];
5578			}
5579
5580			both ""
5581				#version 320 es
5582				precision highp float;
5583				${DECLARATIONS}
5584
5585				void main()
5586				{
5587					${SETUP}
5588					float[] x = float[] (2.0, 1.0, 1.0, 3.0, 5.0);
5589					out0 = x[1] + in0;
5590					${OUTPUT}
5591				}
5592			""
5593		end
5594		case int_to_uint
5595			version 320 es
5596			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5597			values
5598			{
5599				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5600				output uint out0 = [ 5 | 4 | 4 | 6 | 8 ];
5601			}
5602
5603			both ""
5604				#version 320 es
5605				precision highp float;
5606				${DECLARATIONS}
5607
5608				void main()
5609				{
5610					${SETUP}
5611					uint[] x = uint[] (1, 3, 4, 7, 11);
5612					out0 = x[1] + in0;
5613					${OUTPUT}
5614				}
5615			""
5616		end
5617		case int_to_vec2
5618			version 320 es
5619			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5620			values
5621			{
5622				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5623				output vec2 out0 = [ vec2(4.0, 3.0) | vec2(3.0, 2.0) | vec2(3.0, 2.0) | vec2(5.0, 4.0) | vec2(7.0, 6.0) ];
5624			}
5625
5626			both ""
5627				#version 320 es
5628				precision highp float;
5629				${DECLARATIONS}
5630
5631				void main()
5632				{
5633					${SETUP}
5634					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
5635					out0 = x[1] + in0;
5636					${OUTPUT}
5637				}
5638			""
5639		end
5640		case int_to_vec3
5641			version 320 es
5642			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5643			values
5644			{
5645				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5646				output vec3 out0 = [ vec3(4.0, 3.0, 4.0) | vec3(3.0, 2.0, 3.0) | vec3(3.0, 2.0, 3.0) | vec3(5.0, 4.0, 5.0) | vec3(7.0, 6.0, 7.0) ];
5647			}
5648
5649			both ""
5650				#version 320 es
5651				precision highp float;
5652				${DECLARATIONS}
5653
5654				void main()
5655				{
5656					${SETUP}
5657					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
5658					out0 = x[1] + in0;
5659					${OUTPUT}
5660				}
5661			""
5662		end
5663		case int_to_vec4
5664			version 320 es
5665			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5666			values
5667			{
5668				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5669				output vec4 out0 = [ vec4(4.0, 3.0, 4.0, 8.0) | vec4(3.0, 2.0, 3.0, 7.0) | vec4(3.0, 2.0, 3.0, 7.0) | vec4(5.0, 4.0, 5.0, 9.0) | vec4(7.0, 6.0, 7.0, 11.0) ];
5670			}
5671
5672			both ""
5673				#version 320 es
5674				precision highp float;
5675				${DECLARATIONS}
5676
5677				void main()
5678				{
5679					${SETUP}
5680					vec4[] x = vec4[] (vec4(1.0, 2.0, 3.0, 4.0), vec4(2.0, 1.0, 2.0, 6.0), vec4(3.0, 7.0, 2.0, 5.0));
5681					out0 = x[1] + in0;
5682					${OUTPUT}
5683				}
5684			""
5685		end
5686		case int_to_uvec2
5687			version 320 es
5688			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5689			values
5690			{
5691				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5692				output uvec2 out0 = [ uvec2(6, 8) | uvec2(5, 7) | uvec2(5, 7) | uvec2(7, 9) | uvec2(9, 11) ];
5693			}
5694
5695			both ""
5696				#version 320 es
5697				precision highp float;
5698				${DECLARATIONS}
5699
5700				void main()
5701				{
5702					${SETUP}
5703					uvec2[] x = uvec2[] (uvec2(2, 3), uvec2(4, 6), uvec2(1, 13));
5704					out0 = x[1] + in0;
5705					${OUTPUT}
5706				}
5707			""
5708		end
5709		case int_to_uvec3
5710			version 320 es
5711			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5712			values
5713			{
5714				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5715				output uvec3 out0 = [ uvec3(6, 8, 4) | uvec3(5, 7, 3) | uvec3(5, 7, 3) | uvec3(7, 9, 5) | uvec3(9, 11, 7) ];
5716			}
5717
5718			both ""
5719				#version 320 es
5720				precision highp float;
5721				${DECLARATIONS}
5722
5723				void main()
5724				{
5725					${SETUP}
5726					uvec3[] x = uvec3[] (uvec3(2, 3, 5), uvec3(4, 6, 2), uvec3(1, 13, 7));
5727					out0 = x[1] + in0;
5728					${OUTPUT}
5729				}
5730			""
5731		end
5732		case int_to_uvec4
5733			version 320 es
5734			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5735			values
5736			{
5737				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
5738				output uvec4 out0 = [ uvec4(6, 8, 4, 11) | uvec4(5, 7, 3, 10) | uvec4(5, 7, 3, 10) | uvec4(7, 9, 5, 12) | uvec4(9, 11, 7, 14) ];
5739			}
5740
5741			both ""
5742				#version 320 es
5743				precision highp float;
5744				${DECLARATIONS}
5745
5746				void main()
5747				{
5748					${SETUP}
5749					uvec4[] x = uvec4[] (uvec4(2, 3, 5, 8), uvec4(4, 6, 2, 9), uvec4(1, 13, 7, 4));
5750					out0 = x[1] + in0;
5751					${OUTPUT}
5752				}
5753			""
5754		end
5755		case uint_to_float
5756			version 320 es
5757			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5758			values
5759			{
5760				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
5761				output float out0 = [ 2.0 | 4.0 | 5.0 | 8.0 | 12.0 ];
5762			}
5763
5764			both ""
5765				#version 320 es
5766				precision highp float;
5767				${DECLARATIONS}
5768
5769				void main()
5770				{
5771					${SETUP}
5772					float[] x = float[] (2.0, 1.0, 1.0, 3.0, 5.0);
5773					out0 = x[1] + in0;
5774					${OUTPUT}
5775				}
5776			""
5777		end
5778		case uint_to_vec2
5779			version 320 es
5780			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5781			values
5782			{
5783				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
5784				output vec2 out0 = [ vec2(3.0, 2.0) | vec2(5.0, 4.0) | vec2(6.0, 5.0) | vec2(9.0, 8.0) | vec2(13.0, 12.0) ];
5785			}
5786
5787			both ""
5788				#version 320 es
5789				precision highp float;
5790				${DECLARATIONS}
5791
5792				void main()
5793				{
5794					${SETUP}
5795					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
5796					out0 = x[1] + in0;
5797					${OUTPUT}
5798				}
5799			""
5800		end
5801		case uint_to_vec3
5802			version 320 es
5803			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5804			values
5805			{
5806				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
5807				output vec3 out0 = [ vec3(3.0, 2.0, 3.0) | vec3(5.0, 4.0, 5.0) | vec3(6.0, 5.0, 6.0) | vec3(9.0, 8.0, 9.0) | vec3(13.0, 12.0, 13.0) ];
5808			}
5809
5810			both ""
5811				#version 320 es
5812				precision highp float;
5813				${DECLARATIONS}
5814
5815				void main()
5816				{
5817					${SETUP}
5818					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
5819					out0 = x[1] + in0;
5820					${OUTPUT}
5821				}
5822			""
5823		end
5824		case uint_to_vec4
5825			version 320 es
5826			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5827			values
5828			{
5829				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
5830				output vec4 out0 = [ vec4(3.0, 2.0, 3.0, 7.0) | vec4(5.0, 4.0, 5.0, 9.0) | vec4(6.0, 5.0, 6.0, 10.0) | vec4(9.0, 8.0, 9.0, 13.0) | vec4(13.0, 12.0, 13.0, 17.0) ];
5831			}
5832
5833			both ""
5834				#version 320 es
5835				precision highp float;
5836				${DECLARATIONS}
5837
5838				void main()
5839				{
5840					${SETUP}
5841					vec4[] x = vec4[] (vec4(1.0, 2.0, 3.0, 4.0), vec4(2.0, 1.0, 2.0, 6.0), vec4(3.0, 7.0, 2.0, 5.0));
5842					out0 = x[1] + in0;
5843					${OUTPUT}
5844				}
5845			""
5846		end
5847		case ivec2_to_uvec2
5848			version 320 es
5849			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5850			values
5851			{
5852				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
5853				output uvec2 out0 = [ uvec2(5, 8) | uvec2(6, 7) | uvec2(7, 13) ];
5854			}
5855
5856			both ""
5857				#version 320 es
5858				precision highp float;
5859				${DECLARATIONS}
5860
5861				void main()
5862				{
5863					${SETUP}
5864					uvec2[] x = uvec2[] (uvec2(2, 3), uvec2(4, 6), uvec2(1, 13));
5865					out0 = x[1] + in0;
5866					${OUTPUT}
5867				}
5868			""
5869		end
5870		case ivec2_to_vec2
5871			version 320 es
5872			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5873			values
5874			{
5875				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
5876				output vec2 out0 = [ vec2(3.0, 3.0) | vec2(4.0, 2.0) | vec2(5.0, 8.0) ];
5877			}
5878
5879			both ""
5880				#version 320 es
5881				precision highp float;
5882				${DECLARATIONS}
5883
5884				void main()
5885				{
5886					${SETUP}
5887					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
5888					out0 = x[1] + in0;
5889					${OUTPUT}
5890				}
5891			""
5892		end
5893		case uvec2_to_vec2
5894			version 320 es
5895			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5896			values
5897			{
5898				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
5899				output vec2 out0 = [ vec2(4.0, 4.0) | vec2(6.0, 7.0) | vec2(3.0, 14.0) ];
5900			}
5901
5902			both ""
5903				#version 320 es
5904				precision highp float;
5905				${DECLARATIONS}
5906
5907				void main()
5908				{
5909					${SETUP}
5910					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
5911					out0 = x[1] + in0;
5912					${OUTPUT}
5913				}
5914			""
5915		end
5916		case ivec3_to_uvec3
5917			version 320 es
5918			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5919			values
5920			{
5921				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
5922				output uvec3 out0 = [ uvec3(5, 8, 5) | uvec3(6, 7, 4) | uvec3(7, 13, 4) ];
5923			}
5924
5925			both ""
5926				#version 320 es
5927				precision highp float;
5928				${DECLARATIONS}
5929
5930				void main()
5931				{
5932					${SETUP}
5933					uvec3[] x = uvec3[] (uvec3(2, 3, 5), uvec3(4, 6, 2), uvec3(1, 13, 7));
5934					out0 = x[1] + in0;
5935					${OUTPUT}
5936				}
5937			""
5938		end
5939		case ivec3_to_vec3
5940			version 320 es
5941			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5942			values
5943			{
5944				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
5945				output vec3 out0 = [ vec3(3.0, 3.0, 5.0) | vec3(4.0, 2.0, 4.0) | vec3(5.0, 8.0, 4.0) ];
5946			}
5947
5948			both ""
5949				#version 320 es
5950				precision highp float;
5951				${DECLARATIONS}
5952
5953				void main()
5954				{
5955					${SETUP}
5956					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
5957					out0 = x[1] + in0;
5958					${OUTPUT}
5959				}
5960			""
5961		end
5962		case uvec3_to_vec3
5963			version 320 es
5964			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5965			values
5966			{
5967				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
5968				output vec3 out0 = [ vec3(4.0, 4.0, 7.0) | vec3(6.0, 7.0, 4.0) | vec3(3.0, 14.0, 9.0) ];
5969			}
5970
5971			both ""
5972				#version 320 es
5973				precision highp float;
5974				${DECLARATIONS}
5975
5976				void main()
5977				{
5978					${SETUP}
5979					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
5980					out0 = x[1] + in0;
5981					${OUTPUT}
5982				}
5983			""
5984		end
5985		case ivec4_to_uvec4
5986			version 320 es
5987			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
5988			values
5989			{
5990				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
5991				output uvec4 out0 = [ uvec4(5, 8, 5, 13) | uvec4(6, 7, 4, 15) | uvec4(7, 13, 4, 14) ];
5992			}
5993
5994			both ""
5995				#version 320 es
5996				precision highp float;
5997				${DECLARATIONS}
5998
5999				void main()
6000				{
6001					${SETUP}
6002					uvec4[] x = uvec4[] (uvec4(2, 3, 5, 8), uvec4(4, 6, 2, 9), uvec4(1, 13, 7, 4));
6003					out0 = x[1] + in0;
6004					${OUTPUT}
6005				}
6006			""
6007		end
6008		case ivec4_to_vec4
6009			version 320 es
6010			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6011			values
6012			{
6013				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
6014				output vec4 out0 = [ vec4(3.0, 3.0, 5.0, 10.0) | vec4(4.0, 2.0, 4.0, 12.0) | vec4(5.0, 8.0, 4.0, 11.0) ];
6015			}
6016
6017			both ""
6018				#version 320 es
6019				precision highp float;
6020				${DECLARATIONS}
6021
6022				void main()
6023				{
6024					${SETUP}
6025					vec4[] x = vec4[] (vec4(1.0, 2.0, 3.0, 4.0), vec4(2.0, 1.0, 2.0, 6.0), vec4(3.0, 7.0, 2.0, 5.0));
6026					out0 = x[1] + in0;
6027					${OUTPUT}
6028				}
6029			""
6030		end
6031		case uvec4_to_vec4
6032			version 320 es
6033			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6034			values
6035			{
6036				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
6037				output vec4 out0 = [ vec4(4.0, 4.0, 7.0, 14.0) | vec4(6.0, 7.0, 4.0, 15.0) | vec4(3.0, 14.0, 9.0, 10.0) ];
6038			}
6039
6040			both ""
6041				#version 320 es
6042				precision highp float;
6043				${DECLARATIONS}
6044
6045				void main()
6046				{
6047					${SETUP}
6048					vec4[] x = vec4[] (vec4(1.0, 2.0, 3.0, 4.0), vec4(2.0, 1.0, 2.0, 6.0), vec4(3.0, 7.0, 2.0, 5.0));
6049					out0 = x[1] + in0;
6050					${OUTPUT}
6051				}
6052			""
6053		end
6054
6055	end # subscript_before_input
6056
6057end # array_subscripts
6058group functions "Function calls"
6059
6060	case int_to_float
6061		version 320 es
6062		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6063		values
6064		{
6065			input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
6066			output float out0 = [ 4.0 | 2.0 | 2.0 | 6.0 | 10.0 ];
6067		}
6068
6069		both ""
6070			#version 320 es
6071			precision highp float;
6072			${DECLARATIONS}
6073
6074			float func (float a)
6075			{
6076				return a * float(2);
6077			}
6078
6079			void main()
6080			{
6081				${SETUP}
6082				out0 = func(in0);
6083				${OUTPUT}
6084			}
6085		""
6086	end
6087	case int_to_uint
6088		version 320 es
6089		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6090		values
6091		{
6092			input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
6093			output uint out0 = [ 4 | 2 | 2 | 6 | 10 ];
6094		}
6095
6096		both ""
6097			#version 320 es
6098			precision highp float;
6099			${DECLARATIONS}
6100
6101			uint func (uint a)
6102			{
6103				return a * uint(2);
6104			}
6105
6106			void main()
6107			{
6108				${SETUP}
6109				out0 = func(in0);
6110				${OUTPUT}
6111			}
6112		""
6113	end
6114	case uint_to_float
6115		version 320 es
6116		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6117		values
6118		{
6119			input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
6120			output float out0 = [ 2.0 | 6.0 | 8.0 | 14.0 | 22.0 ];
6121		}
6122
6123		both ""
6124			#version 320 es
6125			precision highp float;
6126			${DECLARATIONS}
6127
6128			float func (float a)
6129			{
6130				return a * float(2);
6131			}
6132
6133			void main()
6134			{
6135				${SETUP}
6136				out0 = func(in0);
6137				${OUTPUT}
6138			}
6139		""
6140	end
6141	case ivec2_to_uvec2
6142		version 320 es
6143		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6144		values
6145		{
6146			input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
6147			output uvec2 out0 = [ uvec2(2, 4) | uvec2(4, 2) | uvec2(6, 14) ];
6148		}
6149
6150		both ""
6151			#version 320 es
6152			precision highp float;
6153			${DECLARATIONS}
6154
6155			uvec2 func (uvec2 a)
6156			{
6157				return a * uvec2(2);
6158			}
6159
6160			void main()
6161			{
6162				${SETUP}
6163				out0 = func(in0);
6164				${OUTPUT}
6165			}
6166		""
6167	end
6168	case ivec2_to_vec2
6169		version 320 es
6170		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6171		values
6172		{
6173			input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
6174			output vec2 out0 = [ vec2(2.0, 4.0) | vec2(4.0, 2.0) | vec2(6.0, 14.0) ];
6175		}
6176
6177		both ""
6178			#version 320 es
6179			precision highp float;
6180			${DECLARATIONS}
6181
6182			vec2 func (vec2 a)
6183			{
6184				return a * vec2(2);
6185			}
6186
6187			void main()
6188			{
6189				${SETUP}
6190				out0 = func(in0);
6191				${OUTPUT}
6192			}
6193		""
6194	end
6195	case uvec2_to_vec2
6196		version 320 es
6197		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6198		values
6199		{
6200			input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
6201			output vec2 out0 = [ vec2(4.0, 6.0) | vec2(8.0, 12.0) | vec2(2.0, 26.0) ];
6202		}
6203
6204		both ""
6205			#version 320 es
6206			precision highp float;
6207			${DECLARATIONS}
6208
6209			vec2 func (vec2 a)
6210			{
6211				return a * vec2(2);
6212			}
6213
6214			void main()
6215			{
6216				${SETUP}
6217				out0 = func(in0);
6218				${OUTPUT}
6219			}
6220		""
6221	end
6222	case ivec3_to_uvec3
6223		version 320 es
6224		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6225		values
6226		{
6227			input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
6228			output uvec3 out0 = [ uvec3(2, 4, 6) | uvec3(4, 2, 4) | uvec3(6, 14, 4) ];
6229		}
6230
6231		both ""
6232			#version 320 es
6233			precision highp float;
6234			${DECLARATIONS}
6235
6236			uvec3 func (uvec3 a)
6237			{
6238				return a * uvec3(2);
6239			}
6240
6241			void main()
6242			{
6243				${SETUP}
6244				out0 = func(in0);
6245				${OUTPUT}
6246			}
6247		""
6248	end
6249	case ivec3_to_vec3
6250		version 320 es
6251		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6252		values
6253		{
6254			input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
6255			output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(4.0, 2.0, 4.0) | vec3(6.0, 14.0, 4.0) ];
6256		}
6257
6258		both ""
6259			#version 320 es
6260			precision highp float;
6261			${DECLARATIONS}
6262
6263			vec3 func (vec3 a)
6264			{
6265				return a * vec3(2);
6266			}
6267
6268			void main()
6269			{
6270				${SETUP}
6271				out0 = func(in0);
6272				${OUTPUT}
6273			}
6274		""
6275	end
6276	case uvec3_to_vec3
6277		version 320 es
6278		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6279		values
6280		{
6281			input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
6282			output vec3 out0 = [ vec3(4.0, 6.0, 10.0) | vec3(8.0, 12.0, 4.0) | vec3(2.0, 26.0, 14.0) ];
6283		}
6284
6285		both ""
6286			#version 320 es
6287			precision highp float;
6288			${DECLARATIONS}
6289
6290			vec3 func (vec3 a)
6291			{
6292				return a * vec3(2);
6293			}
6294
6295			void main()
6296			{
6297				${SETUP}
6298				out0 = func(in0);
6299				${OUTPUT}
6300			}
6301		""
6302	end
6303	case ivec4_to_uvec4
6304		version 320 es
6305		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6306		values
6307		{
6308			input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
6309			output uvec4 out0 = [ uvec4(2, 4, 6, 8) | uvec4(4, 2, 4, 12) | uvec4(6, 14, 4, 10) ];
6310		}
6311
6312		both ""
6313			#version 320 es
6314			precision highp float;
6315			${DECLARATIONS}
6316
6317			uvec4 func (uvec4 a)
6318			{
6319				return a * uvec4(2);
6320			}
6321
6322			void main()
6323			{
6324				${SETUP}
6325				out0 = func(in0);
6326				${OUTPUT}
6327			}
6328		""
6329	end
6330	case ivec4_to_vec4
6331		version 320 es
6332		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6333		values
6334		{
6335			input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
6336			output vec4 out0 = [ vec4(2.0, 4.0, 6.0, 8.0) | vec4(4.0, 2.0, 4.0, 12.0) | vec4(6.0, 14.0, 4.0, 10.0) ];
6337		}
6338
6339		both ""
6340			#version 320 es
6341			precision highp float;
6342			${DECLARATIONS}
6343
6344			vec4 func (vec4 a)
6345			{
6346				return a * vec4(2);
6347			}
6348
6349			void main()
6350			{
6351				${SETUP}
6352				out0 = func(in0);
6353				${OUTPUT}
6354			}
6355		""
6356	end
6357	case uvec4_to_vec4
6358		version 320 es
6359		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6360		values
6361		{
6362			input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
6363			output vec4 out0 = [ vec4(4.0, 6.0, 10.0, 16.0) | vec4(8.0, 12.0, 4.0, 18.0) | vec4(2.0, 26.0, 14.0, 8.0) ];
6364		}
6365
6366		both ""
6367			#version 320 es
6368			precision highp float;
6369			${DECLARATIONS}
6370
6371			vec4 func (vec4 a)
6372			{
6373				return a * vec4(2);
6374			}
6375
6376			void main()
6377			{
6378				${SETUP}
6379				out0 = func(in0);
6380				${OUTPUT}
6381			}
6382		""
6383	end
6384
6385end # functions
6386group struct_fields "Struct field selectors"
6387
6388	group input_before_field "Input before field"
6389
6390		case int_to_float
6391			version 320 es
6392			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6393			values
6394			{
6395				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
6396				output float out0 = [ 4.0 | 3.0 | 3.0 | 5.0 | 7.0 ];
6397			}
6398
6399			both ""
6400				#version 320 es
6401				precision highp float;
6402				${DECLARATIONS}
6403
6404				void main()
6405				{
6406					${SETUP}
6407					struct {
6408						float val;
6409					} x;
6410
6411					x.val = 2.0;
6412
6413					out0 = in0 + x.val;
6414					${OUTPUT}
6415				}
6416			""
6417		end
6418		case int_to_uint
6419			version 320 es
6420			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6421			values
6422			{
6423				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
6424				output uint out0 = [ 3 | 2 | 2 | 4 | 6 ];
6425			}
6426
6427			both ""
6428				#version 320 es
6429				precision highp float;
6430				${DECLARATIONS}
6431
6432				void main()
6433				{
6434					${SETUP}
6435					struct {
6436						uint val;
6437					} x;
6438
6439					x.val = 1;
6440
6441					out0 = in0 + x.val;
6442					${OUTPUT}
6443				}
6444			""
6445		end
6446		case int_to_vec2
6447			version 320 es
6448			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6449			values
6450			{
6451				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
6452				output vec2 out0 = [ vec2(3.0, 4.0) | vec2(2.0, 3.0) | vec2(2.0, 3.0) | vec2(4.0, 5.0) | vec2(6.0, 7.0) ];
6453			}
6454
6455			both ""
6456				#version 320 es
6457				precision highp float;
6458				${DECLARATIONS}
6459
6460				void main()
6461				{
6462					${SETUP}
6463					struct {
6464						vec2 val;
6465					} x;
6466
6467					x.val = vec2(1.0, 2.0);
6468
6469					out0 = in0 + x.val;
6470					${OUTPUT}
6471				}
6472			""
6473		end
6474		case int_to_vec3
6475			version 320 es
6476			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6477			values
6478			{
6479				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
6480				output vec3 out0 = [ vec3(3.0, 4.0, 5.0) | vec3(2.0, 3.0, 4.0) | vec3(2.0, 3.0, 4.0) | vec3(4.0, 5.0, 6.0) | vec3(6.0, 7.0, 8.0) ];
6481			}
6482
6483			both ""
6484				#version 320 es
6485				precision highp float;
6486				${DECLARATIONS}
6487
6488				void main()
6489				{
6490					${SETUP}
6491					struct {
6492						vec3 val;
6493					} x;
6494
6495					x.val = vec3(1.0, 2.0, 3.0);
6496
6497					out0 = in0 + x.val;
6498					${OUTPUT}
6499				}
6500			""
6501		end
6502		case int_to_vec4
6503			version 320 es
6504			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6505			values
6506			{
6507				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
6508				output vec4 out0 = [ vec4(3.0, 4.0, 5.0, 6.0) | vec4(2.0, 3.0, 4.0, 5.0) | vec4(2.0, 3.0, 4.0, 5.0) | vec4(4.0, 5.0, 6.0, 7.0) | vec4(6.0, 7.0, 8.0, 9.0) ];
6509			}
6510
6511			both ""
6512				#version 320 es
6513				precision highp float;
6514				${DECLARATIONS}
6515
6516				void main()
6517				{
6518					${SETUP}
6519					struct {
6520						vec4 val;
6521					} x;
6522
6523					x.val = vec4(1.0, 2.0, 3.0, 4.0);
6524
6525					out0 = in0 + x.val;
6526					${OUTPUT}
6527				}
6528			""
6529		end
6530		case int_to_uvec2
6531			version 320 es
6532			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6533			values
6534			{
6535				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
6536				output uvec2 out0 = [ uvec2(4, 5) | uvec2(3, 4) | uvec2(3, 4) | uvec2(5, 6) | uvec2(7, 8) ];
6537			}
6538
6539			both ""
6540				#version 320 es
6541				precision highp float;
6542				${DECLARATIONS}
6543
6544				void main()
6545				{
6546					${SETUP}
6547					struct {
6548						uvec2 val;
6549					} x;
6550
6551					x.val = uvec2(2, 3);
6552
6553					out0 = in0 + x.val;
6554					${OUTPUT}
6555				}
6556			""
6557		end
6558		case int_to_uvec3
6559			version 320 es
6560			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6561			values
6562			{
6563				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
6564				output uvec3 out0 = [ uvec3(4, 5, 7) | uvec3(3, 4, 6) | uvec3(3, 4, 6) | uvec3(5, 6, 8) | uvec3(7, 8, 10) ];
6565			}
6566
6567			both ""
6568				#version 320 es
6569				precision highp float;
6570				${DECLARATIONS}
6571
6572				void main()
6573				{
6574					${SETUP}
6575					struct {
6576						uvec3 val;
6577					} x;
6578
6579					x.val = uvec3(2, 3, 5);
6580
6581					out0 = in0 + x.val;
6582					${OUTPUT}
6583				}
6584			""
6585		end
6586		case int_to_uvec4
6587			version 320 es
6588			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6589			values
6590			{
6591				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
6592				output uvec4 out0 = [ uvec4(4, 5, 7, 10) | uvec4(3, 4, 6, 9) | uvec4(3, 4, 6, 9) | uvec4(5, 6, 8, 11) | uvec4(7, 8, 10, 13) ];
6593			}
6594
6595			both ""
6596				#version 320 es
6597				precision highp float;
6598				${DECLARATIONS}
6599
6600				void main()
6601				{
6602					${SETUP}
6603					struct {
6604						uvec4 val;
6605					} x;
6606
6607					x.val = uvec4(2, 3, 5, 8);
6608
6609					out0 = in0 + x.val;
6610					${OUTPUT}
6611				}
6612			""
6613		end
6614		case uint_to_float
6615			version 320 es
6616			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6617			values
6618			{
6619				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
6620				output float out0 = [ 3.0 | 5.0 | 6.0 | 9.0 | 13.0 ];
6621			}
6622
6623			both ""
6624				#version 320 es
6625				precision highp float;
6626				${DECLARATIONS}
6627
6628				void main()
6629				{
6630					${SETUP}
6631					struct {
6632						float val;
6633					} x;
6634
6635					x.val = 2.0;
6636
6637					out0 = in0 + x.val;
6638					${OUTPUT}
6639				}
6640			""
6641		end
6642		case uint_to_vec2
6643			version 320 es
6644			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6645			values
6646			{
6647				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
6648				output vec2 out0 = [ vec2(2.0, 3.0) | vec2(4.0, 5.0) | vec2(5.0, 6.0) | vec2(8.0, 9.0) | vec2(12.0, 13.0) ];
6649			}
6650
6651			both ""
6652				#version 320 es
6653				precision highp float;
6654				${DECLARATIONS}
6655
6656				void main()
6657				{
6658					${SETUP}
6659					struct {
6660						vec2 val;
6661					} x;
6662
6663					x.val = vec2(1.0, 2.0);
6664
6665					out0 = in0 + x.val;
6666					${OUTPUT}
6667				}
6668			""
6669		end
6670		case uint_to_vec3
6671			version 320 es
6672			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6673			values
6674			{
6675				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
6676				output vec3 out0 = [ vec3(2.0, 3.0, 4.0) | vec3(4.0, 5.0, 6.0) | vec3(5.0, 6.0, 7.0) | vec3(8.0, 9.0, 10.0) | vec3(12.0, 13.0, 14.0) ];
6677			}
6678
6679			both ""
6680				#version 320 es
6681				precision highp float;
6682				${DECLARATIONS}
6683
6684				void main()
6685				{
6686					${SETUP}
6687					struct {
6688						vec3 val;
6689					} x;
6690
6691					x.val = vec3(1.0, 2.0, 3.0);
6692
6693					out0 = in0 + x.val;
6694					${OUTPUT}
6695				}
6696			""
6697		end
6698		case uint_to_vec4
6699			version 320 es
6700			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6701			values
6702			{
6703				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
6704				output vec4 out0 = [ vec4(2.0, 3.0, 4.0, 5.0) | vec4(4.0, 5.0, 6.0, 7.0) | vec4(5.0, 6.0, 7.0, 8.0) | vec4(8.0, 9.0, 10.0, 11.0) | vec4(12.0, 13.0, 14.0, 15.0) ];
6705			}
6706
6707			both ""
6708				#version 320 es
6709				precision highp float;
6710				${DECLARATIONS}
6711
6712				void main()
6713				{
6714					${SETUP}
6715					struct {
6716						vec4 val;
6717					} x;
6718
6719					x.val = vec4(1.0, 2.0, 3.0, 4.0);
6720
6721					out0 = in0 + x.val;
6722					${OUTPUT}
6723				}
6724			""
6725		end
6726		case ivec2_to_uvec2
6727			version 320 es
6728			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6729			values
6730			{
6731				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
6732				output uvec2 out0 = [ uvec2(3, 5) | uvec2(4, 4) | uvec2(5, 10) ];
6733			}
6734
6735			both ""
6736				#version 320 es
6737				precision highp float;
6738				${DECLARATIONS}
6739
6740				void main()
6741				{
6742					${SETUP}
6743					struct {
6744						uvec2 val;
6745					} x;
6746
6747					x.val = uvec2(2, 3);
6748
6749					out0 = in0 + x.val;
6750					${OUTPUT}
6751				}
6752			""
6753		end
6754		case ivec2_to_vec2
6755			version 320 es
6756			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6757			values
6758			{
6759				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
6760				output vec2 out0 = [ vec2(2.0, 4.0) | vec2(3.0, 3.0) | vec2(4.0, 9.0) ];
6761			}
6762
6763			both ""
6764				#version 320 es
6765				precision highp float;
6766				${DECLARATIONS}
6767
6768				void main()
6769				{
6770					${SETUP}
6771					struct {
6772						vec2 val;
6773					} x;
6774
6775					x.val = vec2(1.0, 2.0);
6776
6777					out0 = in0 + x.val;
6778					${OUTPUT}
6779				}
6780			""
6781		end
6782		case uvec2_to_vec2
6783			version 320 es
6784			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6785			values
6786			{
6787				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
6788				output vec2 out0 = [ vec2(3.0, 5.0) | vec2(5.0, 8.0) | vec2(2.0, 15.0) ];
6789			}
6790
6791			both ""
6792				#version 320 es
6793				precision highp float;
6794				${DECLARATIONS}
6795
6796				void main()
6797				{
6798					${SETUP}
6799					struct {
6800						vec2 val;
6801					} x;
6802
6803					x.val = vec2(1.0, 2.0);
6804
6805					out0 = in0 + x.val;
6806					${OUTPUT}
6807				}
6808			""
6809		end
6810		case ivec3_to_uvec3
6811			version 320 es
6812			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6813			values
6814			{
6815				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
6816				output uvec3 out0 = [ uvec3(3, 5, 8) | uvec3(4, 4, 7) | uvec3(5, 10, 7) ];
6817			}
6818
6819			both ""
6820				#version 320 es
6821				precision highp float;
6822				${DECLARATIONS}
6823
6824				void main()
6825				{
6826					${SETUP}
6827					struct {
6828						uvec3 val;
6829					} x;
6830
6831					x.val = uvec3(2, 3, 5);
6832
6833					out0 = in0 + x.val;
6834					${OUTPUT}
6835				}
6836			""
6837		end
6838		case ivec3_to_vec3
6839			version 320 es
6840			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6841			values
6842			{
6843				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
6844				output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(3.0, 3.0, 5.0) | vec3(4.0, 9.0, 5.0) ];
6845			}
6846
6847			both ""
6848				#version 320 es
6849				precision highp float;
6850				${DECLARATIONS}
6851
6852				void main()
6853				{
6854					${SETUP}
6855					struct {
6856						vec3 val;
6857					} x;
6858
6859					x.val = vec3(1.0, 2.0, 3.0);
6860
6861					out0 = in0 + x.val;
6862					${OUTPUT}
6863				}
6864			""
6865		end
6866		case uvec3_to_vec3
6867			version 320 es
6868			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6869			values
6870			{
6871				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
6872				output vec3 out0 = [ vec3(3.0, 5.0, 8.0) | vec3(5.0, 8.0, 5.0) | vec3(2.0, 15.0, 10.0) ];
6873			}
6874
6875			both ""
6876				#version 320 es
6877				precision highp float;
6878				${DECLARATIONS}
6879
6880				void main()
6881				{
6882					${SETUP}
6883					struct {
6884						vec3 val;
6885					} x;
6886
6887					x.val = vec3(1.0, 2.0, 3.0);
6888
6889					out0 = in0 + x.val;
6890					${OUTPUT}
6891				}
6892			""
6893		end
6894		case ivec4_to_uvec4
6895			version 320 es
6896			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6897			values
6898			{
6899				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
6900				output uvec4 out0 = [ uvec4(3, 5, 8, 12) | uvec4(4, 4, 7, 14) | uvec4(5, 10, 7, 13) ];
6901			}
6902
6903			both ""
6904				#version 320 es
6905				precision highp float;
6906				${DECLARATIONS}
6907
6908				void main()
6909				{
6910					${SETUP}
6911					struct {
6912						uvec4 val;
6913					} x;
6914
6915					x.val = uvec4(2, 3, 5, 8);
6916
6917					out0 = in0 + x.val;
6918					${OUTPUT}
6919				}
6920			""
6921		end
6922		case ivec4_to_vec4
6923			version 320 es
6924			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6925			values
6926			{
6927				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
6928				output vec4 out0 = [ vec4(2.0, 4.0, 6.0, 8.0) | vec4(3.0, 3.0, 5.0, 10.0) | vec4(4.0, 9.0, 5.0, 9.0) ];
6929			}
6930
6931			both ""
6932				#version 320 es
6933				precision highp float;
6934				${DECLARATIONS}
6935
6936				void main()
6937				{
6938					${SETUP}
6939					struct {
6940						vec4 val;
6941					} x;
6942
6943					x.val = vec4(1.0, 2.0, 3.0, 4.0);
6944
6945					out0 = in0 + x.val;
6946					${OUTPUT}
6947				}
6948			""
6949		end
6950		case uvec4_to_vec4
6951			version 320 es
6952			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6953			values
6954			{
6955				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
6956				output vec4 out0 = [ vec4(3.0, 5.0, 8.0, 12.0) | vec4(5.0, 8.0, 5.0, 13.0) | vec4(2.0, 15.0, 10.0, 8.0) ];
6957			}
6958
6959			both ""
6960				#version 320 es
6961				precision highp float;
6962				${DECLARATIONS}
6963
6964				void main()
6965				{
6966					${SETUP}
6967					struct {
6968						vec4 val;
6969					} x;
6970
6971					x.val = vec4(1.0, 2.0, 3.0, 4.0);
6972
6973					out0 = in0 + x.val;
6974					${OUTPUT}
6975				}
6976			""
6977		end
6978
6979	end # input_before_field
6980	group field_before_input "Field before input"
6981
6982		case int_to_float
6983			version 320 es
6984			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
6985			values
6986			{
6987				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
6988				output float out0 = [ 4.0 | 3.0 | 3.0 | 5.0 | 7.0 ];
6989			}
6990
6991			both ""
6992				#version 320 es
6993				precision highp float;
6994				${DECLARATIONS}
6995
6996				void main()
6997				{
6998					${SETUP}
6999					struct {
7000						float val;
7001					} x;
7002
7003					x.val = 2.0;
7004
7005					out0 = x.val + in0;
7006					${OUTPUT}
7007				}
7008			""
7009		end
7010		case int_to_uint
7011			version 320 es
7012			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7013			values
7014			{
7015				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7016				output uint out0 = [ 3 | 2 | 2 | 4 | 6 ];
7017			}
7018
7019			both ""
7020				#version 320 es
7021				precision highp float;
7022				${DECLARATIONS}
7023
7024				void main()
7025				{
7026					${SETUP}
7027					struct {
7028						uint val;
7029					} x;
7030
7031					x.val = 1;
7032
7033					out0 = x.val + in0;
7034					${OUTPUT}
7035				}
7036			""
7037		end
7038		case int_to_vec2
7039			version 320 es
7040			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7041			values
7042			{
7043				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7044				output vec2 out0 = [ vec2(3.0, 4.0) | vec2(2.0, 3.0) | vec2(2.0, 3.0) | vec2(4.0, 5.0) | vec2(6.0, 7.0) ];
7045			}
7046
7047			both ""
7048				#version 320 es
7049				precision highp float;
7050				${DECLARATIONS}
7051
7052				void main()
7053				{
7054					${SETUP}
7055					struct {
7056						vec2 val;
7057					} x;
7058
7059					x.val = vec2(1.0, 2.0);
7060
7061					out0 = x.val + in0;
7062					${OUTPUT}
7063				}
7064			""
7065		end
7066		case int_to_vec3
7067			version 320 es
7068			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7069			values
7070			{
7071				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7072				output vec3 out0 = [ vec3(3.0, 4.0, 5.0) | vec3(2.0, 3.0, 4.0) | vec3(2.0, 3.0, 4.0) | vec3(4.0, 5.0, 6.0) | vec3(6.0, 7.0, 8.0) ];
7073			}
7074
7075			both ""
7076				#version 320 es
7077				precision highp float;
7078				${DECLARATIONS}
7079
7080				void main()
7081				{
7082					${SETUP}
7083					struct {
7084						vec3 val;
7085					} x;
7086
7087					x.val = vec3(1.0, 2.0, 3.0);
7088
7089					out0 = x.val + in0;
7090					${OUTPUT}
7091				}
7092			""
7093		end
7094		case int_to_vec4
7095			version 320 es
7096			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7097			values
7098			{
7099				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7100				output vec4 out0 = [ vec4(3.0, 4.0, 5.0, 6.0) | vec4(2.0, 3.0, 4.0, 5.0) | vec4(2.0, 3.0, 4.0, 5.0) | vec4(4.0, 5.0, 6.0, 7.0) | vec4(6.0, 7.0, 8.0, 9.0) ];
7101			}
7102
7103			both ""
7104				#version 320 es
7105				precision highp float;
7106				${DECLARATIONS}
7107
7108				void main()
7109				{
7110					${SETUP}
7111					struct {
7112						vec4 val;
7113					} x;
7114
7115					x.val = vec4(1.0, 2.0, 3.0, 4.0);
7116
7117					out0 = x.val + in0;
7118					${OUTPUT}
7119				}
7120			""
7121		end
7122		case int_to_uvec2
7123			version 320 es
7124			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7125			values
7126			{
7127				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7128				output uvec2 out0 = [ uvec2(4, 5) | uvec2(3, 4) | uvec2(3, 4) | uvec2(5, 6) | uvec2(7, 8) ];
7129			}
7130
7131			both ""
7132				#version 320 es
7133				precision highp float;
7134				${DECLARATIONS}
7135
7136				void main()
7137				{
7138					${SETUP}
7139					struct {
7140						uvec2 val;
7141					} x;
7142
7143					x.val = uvec2(2, 3);
7144
7145					out0 = x.val + in0;
7146					${OUTPUT}
7147				}
7148			""
7149		end
7150		case int_to_uvec3
7151			version 320 es
7152			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7153			values
7154			{
7155				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7156				output uvec3 out0 = [ uvec3(4, 5, 7) | uvec3(3, 4, 6) | uvec3(3, 4, 6) | uvec3(5, 6, 8) | uvec3(7, 8, 10) ];
7157			}
7158
7159			both ""
7160				#version 320 es
7161				precision highp float;
7162				${DECLARATIONS}
7163
7164				void main()
7165				{
7166					${SETUP}
7167					struct {
7168						uvec3 val;
7169					} x;
7170
7171					x.val = uvec3(2, 3, 5);
7172
7173					out0 = x.val + in0;
7174					${OUTPUT}
7175				}
7176			""
7177		end
7178		case int_to_uvec4
7179			version 320 es
7180			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7181			values
7182			{
7183				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7184				output uvec4 out0 = [ uvec4(4, 5, 7, 10) | uvec4(3, 4, 6, 9) | uvec4(3, 4, 6, 9) | uvec4(5, 6, 8, 11) | uvec4(7, 8, 10, 13) ];
7185			}
7186
7187			both ""
7188				#version 320 es
7189				precision highp float;
7190				${DECLARATIONS}
7191
7192				void main()
7193				{
7194					${SETUP}
7195					struct {
7196						uvec4 val;
7197					} x;
7198
7199					x.val = uvec4(2, 3, 5, 8);
7200
7201					out0 = x.val + in0;
7202					${OUTPUT}
7203				}
7204			""
7205		end
7206		case uint_to_float
7207			version 320 es
7208			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7209			values
7210			{
7211				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
7212				output float out0 = [ 3.0 | 5.0 | 6.0 | 9.0 | 13.0 ];
7213			}
7214
7215			both ""
7216				#version 320 es
7217				precision highp float;
7218				${DECLARATIONS}
7219
7220				void main()
7221				{
7222					${SETUP}
7223					struct {
7224						float val;
7225					} x;
7226
7227					x.val = 2.0;
7228
7229					out0 = x.val + in0;
7230					${OUTPUT}
7231				}
7232			""
7233		end
7234		case uint_to_vec2
7235			version 320 es
7236			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7237			values
7238			{
7239				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
7240				output vec2 out0 = [ vec2(2.0, 3.0) | vec2(4.0, 5.0) | vec2(5.0, 6.0) | vec2(8.0, 9.0) | vec2(12.0, 13.0) ];
7241			}
7242
7243			both ""
7244				#version 320 es
7245				precision highp float;
7246				${DECLARATIONS}
7247
7248				void main()
7249				{
7250					${SETUP}
7251					struct {
7252						vec2 val;
7253					} x;
7254
7255					x.val = vec2(1.0, 2.0);
7256
7257					out0 = x.val + in0;
7258					${OUTPUT}
7259				}
7260			""
7261		end
7262		case uint_to_vec3
7263			version 320 es
7264			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7265			values
7266			{
7267				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
7268				output vec3 out0 = [ vec3(2.0, 3.0, 4.0) | vec3(4.0, 5.0, 6.0) | vec3(5.0, 6.0, 7.0) | vec3(8.0, 9.0, 10.0) | vec3(12.0, 13.0, 14.0) ];
7269			}
7270
7271			both ""
7272				#version 320 es
7273				precision highp float;
7274				${DECLARATIONS}
7275
7276				void main()
7277				{
7278					${SETUP}
7279					struct {
7280						vec3 val;
7281					} x;
7282
7283					x.val = vec3(1.0, 2.0, 3.0);
7284
7285					out0 = x.val + in0;
7286					${OUTPUT}
7287				}
7288			""
7289		end
7290		case uint_to_vec4
7291			version 320 es
7292			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7293			values
7294			{
7295				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
7296				output vec4 out0 = [ vec4(2.0, 3.0, 4.0, 5.0) | vec4(4.0, 5.0, 6.0, 7.0) | vec4(5.0, 6.0, 7.0, 8.0) | vec4(8.0, 9.0, 10.0, 11.0) | vec4(12.0, 13.0, 14.0, 15.0) ];
7297			}
7298
7299			both ""
7300				#version 320 es
7301				precision highp float;
7302				${DECLARATIONS}
7303
7304				void main()
7305				{
7306					${SETUP}
7307					struct {
7308						vec4 val;
7309					} x;
7310
7311					x.val = vec4(1.0, 2.0, 3.0, 4.0);
7312
7313					out0 = x.val + in0;
7314					${OUTPUT}
7315				}
7316			""
7317		end
7318		case ivec2_to_uvec2
7319			version 320 es
7320			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7321			values
7322			{
7323				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
7324				output uvec2 out0 = [ uvec2(3, 5) | uvec2(4, 4) | uvec2(5, 10) ];
7325			}
7326
7327			both ""
7328				#version 320 es
7329				precision highp float;
7330				${DECLARATIONS}
7331
7332				void main()
7333				{
7334					${SETUP}
7335					struct {
7336						uvec2 val;
7337					} x;
7338
7339					x.val = uvec2(2, 3);
7340
7341					out0 = x.val + in0;
7342					${OUTPUT}
7343				}
7344			""
7345		end
7346		case ivec2_to_vec2
7347			version 320 es
7348			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7349			values
7350			{
7351				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
7352				output vec2 out0 = [ vec2(2.0, 4.0) | vec2(3.0, 3.0) | vec2(4.0, 9.0) ];
7353			}
7354
7355			both ""
7356				#version 320 es
7357				precision highp float;
7358				${DECLARATIONS}
7359
7360				void main()
7361				{
7362					${SETUP}
7363					struct {
7364						vec2 val;
7365					} x;
7366
7367					x.val = vec2(1.0, 2.0);
7368
7369					out0 = x.val + in0;
7370					${OUTPUT}
7371				}
7372			""
7373		end
7374		case uvec2_to_vec2
7375			version 320 es
7376			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7377			values
7378			{
7379				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
7380				output vec2 out0 = [ vec2(3.0, 5.0) | vec2(5.0, 8.0) | vec2(2.0, 15.0) ];
7381			}
7382
7383			both ""
7384				#version 320 es
7385				precision highp float;
7386				${DECLARATIONS}
7387
7388				void main()
7389				{
7390					${SETUP}
7391					struct {
7392						vec2 val;
7393					} x;
7394
7395					x.val = vec2(1.0, 2.0);
7396
7397					out0 = x.val + in0;
7398					${OUTPUT}
7399				}
7400			""
7401		end
7402		case ivec3_to_uvec3
7403			version 320 es
7404			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7405			values
7406			{
7407				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
7408				output uvec3 out0 = [ uvec3(3, 5, 8) | uvec3(4, 4, 7) | uvec3(5, 10, 7) ];
7409			}
7410
7411			both ""
7412				#version 320 es
7413				precision highp float;
7414				${DECLARATIONS}
7415
7416				void main()
7417				{
7418					${SETUP}
7419					struct {
7420						uvec3 val;
7421					} x;
7422
7423					x.val = uvec3(2, 3, 5);
7424
7425					out0 = x.val + in0;
7426					${OUTPUT}
7427				}
7428			""
7429		end
7430		case ivec3_to_vec3
7431			version 320 es
7432			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7433			values
7434			{
7435				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
7436				output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(3.0, 3.0, 5.0) | vec3(4.0, 9.0, 5.0) ];
7437			}
7438
7439			both ""
7440				#version 320 es
7441				precision highp float;
7442				${DECLARATIONS}
7443
7444				void main()
7445				{
7446					${SETUP}
7447					struct {
7448						vec3 val;
7449					} x;
7450
7451					x.val = vec3(1.0, 2.0, 3.0);
7452
7453					out0 = x.val + in0;
7454					${OUTPUT}
7455				}
7456			""
7457		end
7458		case uvec3_to_vec3
7459			version 320 es
7460			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7461			values
7462			{
7463				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
7464				output vec3 out0 = [ vec3(3.0, 5.0, 8.0) | vec3(5.0, 8.0, 5.0) | vec3(2.0, 15.0, 10.0) ];
7465			}
7466
7467			both ""
7468				#version 320 es
7469				precision highp float;
7470				${DECLARATIONS}
7471
7472				void main()
7473				{
7474					${SETUP}
7475					struct {
7476						vec3 val;
7477					} x;
7478
7479					x.val = vec3(1.0, 2.0, 3.0);
7480
7481					out0 = x.val + in0;
7482					${OUTPUT}
7483				}
7484			""
7485		end
7486		case ivec4_to_uvec4
7487			version 320 es
7488			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7489			values
7490			{
7491				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
7492				output uvec4 out0 = [ uvec4(3, 5, 8, 12) | uvec4(4, 4, 7, 14) | uvec4(5, 10, 7, 13) ];
7493			}
7494
7495			both ""
7496				#version 320 es
7497				precision highp float;
7498				${DECLARATIONS}
7499
7500				void main()
7501				{
7502					${SETUP}
7503					struct {
7504						uvec4 val;
7505					} x;
7506
7507					x.val = uvec4(2, 3, 5, 8);
7508
7509					out0 = x.val + in0;
7510					${OUTPUT}
7511				}
7512			""
7513		end
7514		case ivec4_to_vec4
7515			version 320 es
7516			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7517			values
7518			{
7519				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
7520				output vec4 out0 = [ vec4(2.0, 4.0, 6.0, 8.0) | vec4(3.0, 3.0, 5.0, 10.0) | vec4(4.0, 9.0, 5.0, 9.0) ];
7521			}
7522
7523			both ""
7524				#version 320 es
7525				precision highp float;
7526				${DECLARATIONS}
7527
7528				void main()
7529				{
7530					${SETUP}
7531					struct {
7532						vec4 val;
7533					} x;
7534
7535					x.val = vec4(1.0, 2.0, 3.0, 4.0);
7536
7537					out0 = x.val + in0;
7538					${OUTPUT}
7539				}
7540			""
7541		end
7542		case uvec4_to_vec4
7543			version 320 es
7544			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7545			values
7546			{
7547				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
7548				output vec4 out0 = [ vec4(3.0, 5.0, 8.0, 12.0) | vec4(5.0, 8.0, 5.0, 13.0) | vec4(2.0, 15.0, 10.0, 8.0) ];
7549			}
7550
7551			both ""
7552				#version 320 es
7553				precision highp float;
7554				${DECLARATIONS}
7555
7556				void main()
7557				{
7558					${SETUP}
7559					struct {
7560						vec4 val;
7561					} x;
7562
7563					x.val = vec4(1.0, 2.0, 3.0, 4.0);
7564
7565					out0 = x.val + in0;
7566					${OUTPUT}
7567				}
7568			""
7569		end
7570
7571	end # field_before_input
7572
7573end # struct_fields
7574group parenthesized_expressions "Parenthesized expressions"
7575
7576	group paren_expr_before_literal "Parenthesized expression before literal"
7577
7578		group input_in_parens "Input variable in parenthesized expression"
7579
7580			case int_to_float
7581				version 320 es
7582				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7583				values
7584				{
7585					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7586					output float out0 = [ 6.0 | 4.0 | 4.0 | 8.0 | 12.0 ];
7587				}
7588
7589				both ""
7590					#version 320 es
7591					precision highp float;
7592					${DECLARATIONS}
7593
7594					void main()
7595					{
7596						${SETUP}
7597						out0 = (in0 + 1.0) * 2.0;
7598						${OUTPUT}
7599					}
7600				""
7601			end
7602			case int_to_uint
7603				version 320 es
7604				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7605				values
7606				{
7607					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7608					output uint out0 = [ 5 | 4 | 4 | 6 | 8 ];
7609				}
7610
7611				both ""
7612					#version 320 es
7613					precision highp float;
7614					${DECLARATIONS}
7615
7616					void main()
7617					{
7618						${SETUP}
7619						out0 = (in0 + 3) * 1;
7620						${OUTPUT}
7621					}
7622				""
7623			end
7624			case int_to_vec2
7625				version 320 es
7626				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7627				values
7628				{
7629					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7630					output vec2 out0 = [ vec2(4.0, 6.0) | vec2(3.0, 4.0) | vec2(3.0, 4.0) | vec2(5.0, 8.0) | vec2(7.0, 12.0) ];
7631				}
7632
7633				both ""
7634					#version 320 es
7635					precision highp float;
7636					${DECLARATIONS}
7637
7638					void main()
7639					{
7640						${SETUP}
7641						out0 = (in0 + vec2(2.0, 1.0)) * vec2(1.0, 2.0);
7642						${OUTPUT}
7643					}
7644				""
7645			end
7646			case int_to_vec3
7647				version 320 es
7648				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7649				values
7650				{
7651					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7652					output vec3 out0 = [ vec3(4.0, 6.0, 12.0) | vec3(3.0, 4.0, 9.0) | vec3(3.0, 4.0, 9.0) | vec3(5.0, 8.0, 15.0) | vec3(7.0, 12.0, 21.0) ];
7653				}
7654
7655				both ""
7656					#version 320 es
7657					precision highp float;
7658					${DECLARATIONS}
7659
7660					void main()
7661					{
7662						${SETUP}
7663						out0 = (in0 + vec3(2.0, 1.0, 2.0)) * vec3(1.0, 2.0, 3.0);
7664						${OUTPUT}
7665					}
7666				""
7667			end
7668			case int_to_vec4
7669				version 320 es
7670				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7671				values
7672				{
7673					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7674					output vec4 out0 = [ vec4(4.0, 6.0, 12.0, 32.0) | vec4(3.0, 4.0, 9.0, 28.0) | vec4(3.0, 4.0, 9.0, 28.0) | vec4(5.0, 8.0, 15.0, 36.0) | vec4(7.0, 12.0, 21.0, 44.0) ];
7675				}
7676
7677				both ""
7678					#version 320 es
7679					precision highp float;
7680					${DECLARATIONS}
7681
7682					void main()
7683					{
7684						${SETUP}
7685						out0 = (in0 + vec4(2.0, 1.0, 2.0, 6.0)) * vec4(1.0, 2.0, 3.0, 4.0);
7686						${OUTPUT}
7687					}
7688				""
7689			end
7690			case int_to_uvec2
7691				version 320 es
7692				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7693				values
7694				{
7695					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7696					output uvec2 out0 = [ uvec2(12, 24) | uvec2(10, 21) | uvec2(10, 21) | uvec2(14, 27) | uvec2(18, 33) ];
7697				}
7698
7699				both ""
7700					#version 320 es
7701					precision highp float;
7702					${DECLARATIONS}
7703
7704					void main()
7705					{
7706						${SETUP}
7707						out0 = (in0 + ivec2(4, 6)) * ivec2(2, 3);
7708						${OUTPUT}
7709					}
7710				""
7711			end
7712			case int_to_uvec3
7713				version 320 es
7714				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7715				values
7716				{
7717					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7718					output uvec3 out0 = [ uvec3(12, 24, 20) | uvec3(10, 21, 15) | uvec3(10, 21, 15) | uvec3(14, 27, 25) | uvec3(18, 33, 35) ];
7719				}
7720
7721				both ""
7722					#version 320 es
7723					precision highp float;
7724					${DECLARATIONS}
7725
7726					void main()
7727					{
7728						${SETUP}
7729						out0 = (in0 + ivec3(4, 6, 2)) * ivec3(2, 3, 5);
7730						${OUTPUT}
7731					}
7732				""
7733			end
7734			case int_to_uvec4
7735				version 320 es
7736				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7737				values
7738				{
7739					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
7740					output uvec4 out0 = [ uvec4(12, 24, 20, 88) | uvec4(10, 21, 15, 80) | uvec4(10, 21, 15, 80) | uvec4(14, 27, 25, 96) | uvec4(18, 33, 35, 112) ];
7741				}
7742
7743				both ""
7744					#version 320 es
7745					precision highp float;
7746					${DECLARATIONS}
7747
7748					void main()
7749					{
7750						${SETUP}
7751						out0 = (in0 + ivec4(4, 6, 2, 9)) * ivec4(2, 3, 5, 8);
7752						${OUTPUT}
7753					}
7754				""
7755			end
7756			case uint_to_float
7757				version 320 es
7758				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7759				values
7760				{
7761					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
7762					output float out0 = [ 4.0 | 8.0 | 10.0 | 16.0 | 24.0 ];
7763				}
7764
7765				both ""
7766					#version 320 es
7767					precision highp float;
7768					${DECLARATIONS}
7769
7770					void main()
7771					{
7772						${SETUP}
7773						out0 = (in0 + 1.0) * 2.0;
7774						${OUTPUT}
7775					}
7776				""
7777			end
7778			case uint_to_vec2
7779				version 320 es
7780				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7781				values
7782				{
7783					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
7784					output vec2 out0 = [ vec2(3.0, 4.0) | vec2(5.0, 8.0) | vec2(6.0, 10.0) | vec2(9.0, 16.0) | vec2(13.0, 24.0) ];
7785				}
7786
7787				both ""
7788					#version 320 es
7789					precision highp float;
7790					${DECLARATIONS}
7791
7792					void main()
7793					{
7794						${SETUP}
7795						out0 = (in0 + vec2(2.0, 1.0)) * vec2(1.0, 2.0);
7796						${OUTPUT}
7797					}
7798				""
7799			end
7800			case uint_to_vec3
7801				version 320 es
7802				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7803				values
7804				{
7805					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
7806					output vec3 out0 = [ vec3(3.0, 4.0, 9.0) | vec3(5.0, 8.0, 15.0) | vec3(6.0, 10.0, 18.0) | vec3(9.0, 16.0, 27.0) | vec3(13.0, 24.0, 39.0) ];
7807				}
7808
7809				both ""
7810					#version 320 es
7811					precision highp float;
7812					${DECLARATIONS}
7813
7814					void main()
7815					{
7816						${SETUP}
7817						out0 = (in0 + vec3(2.0, 1.0, 2.0)) * vec3(1.0, 2.0, 3.0);
7818						${OUTPUT}
7819					}
7820				""
7821			end
7822			case uint_to_vec4
7823				version 320 es
7824				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7825				values
7826				{
7827					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
7828					output vec4 out0 = [ vec4(3.0, 4.0, 9.0, 28.0) | vec4(5.0, 8.0, 15.0, 36.0) | vec4(6.0, 10.0, 18.0, 40.0) | vec4(9.0, 16.0, 27.0, 52.0) | vec4(13.0, 24.0, 39.0, 68.0) ];
7829				}
7830
7831				both ""
7832					#version 320 es
7833					precision highp float;
7834					${DECLARATIONS}
7835
7836					void main()
7837					{
7838						${SETUP}
7839						out0 = (in0 + vec4(2.0, 1.0, 2.0, 6.0)) * vec4(1.0, 2.0, 3.0, 4.0);
7840						${OUTPUT}
7841					}
7842				""
7843			end
7844			case ivec2_to_uvec2
7845				version 320 es
7846				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7847				values
7848				{
7849					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
7850					output uvec2 out0 = [ uvec2(10, 24) | uvec2(12, 21) | uvec2(14, 39) ];
7851				}
7852
7853				both ""
7854					#version 320 es
7855					precision highp float;
7856					${DECLARATIONS}
7857
7858					void main()
7859					{
7860						${SETUP}
7861						out0 = (in0 + ivec2(4, 6)) * ivec2(2, 3);
7862						${OUTPUT}
7863					}
7864				""
7865			end
7866			case ivec2_to_vec2
7867				version 320 es
7868				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7869				values
7870				{
7871					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
7872					output vec2 out0 = [ vec2(3.0, 6.0) | vec2(4.0, 4.0) | vec2(5.0, 16.0) ];
7873				}
7874
7875				both ""
7876					#version 320 es
7877					precision highp float;
7878					${DECLARATIONS}
7879
7880					void main()
7881					{
7882						${SETUP}
7883						out0 = (in0 + vec2(2.0, 1.0)) * vec2(1.0, 2.0);
7884						${OUTPUT}
7885					}
7886				""
7887			end
7888			case uvec2_to_vec2
7889				version 320 es
7890				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7891				values
7892				{
7893					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
7894					output vec2 out0 = [ vec2(4.0, 8.0) | vec2(6.0, 14.0) | vec2(3.0, 28.0) ];
7895				}
7896
7897				both ""
7898					#version 320 es
7899					precision highp float;
7900					${DECLARATIONS}
7901
7902					void main()
7903					{
7904						${SETUP}
7905						out0 = (in0 + vec2(2.0, 1.0)) * vec2(1.0, 2.0);
7906						${OUTPUT}
7907					}
7908				""
7909			end
7910			case ivec3_to_uvec3
7911				version 320 es
7912				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7913				values
7914				{
7915					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
7916					output uvec3 out0 = [ uvec3(10, 24, 25) | uvec3(12, 21, 20) | uvec3(14, 39, 20) ];
7917				}
7918
7919				both ""
7920					#version 320 es
7921					precision highp float;
7922					${DECLARATIONS}
7923
7924					void main()
7925					{
7926						${SETUP}
7927						out0 = (in0 + ivec3(4, 6, 2)) * ivec3(2, 3, 5);
7928						${OUTPUT}
7929					}
7930				""
7931			end
7932			case ivec3_to_vec3
7933				version 320 es
7934				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7935				values
7936				{
7937					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
7938					output vec3 out0 = [ vec3(3.0, 6.0, 15.0) | vec3(4.0, 4.0, 12.0) | vec3(5.0, 16.0, 12.0) ];
7939				}
7940
7941				both ""
7942					#version 320 es
7943					precision highp float;
7944					${DECLARATIONS}
7945
7946					void main()
7947					{
7948						${SETUP}
7949						out0 = (in0 + vec3(2.0, 1.0, 2.0)) * vec3(1.0, 2.0, 3.0);
7950						${OUTPUT}
7951					}
7952				""
7953			end
7954			case uvec3_to_vec3
7955				version 320 es
7956				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7957				values
7958				{
7959					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
7960					output vec3 out0 = [ vec3(4.0, 8.0, 21.0) | vec3(6.0, 14.0, 12.0) | vec3(3.0, 28.0, 27.0) ];
7961				}
7962
7963				both ""
7964					#version 320 es
7965					precision highp float;
7966					${DECLARATIONS}
7967
7968					void main()
7969					{
7970						${SETUP}
7971						out0 = (in0 + vec3(2.0, 1.0, 2.0)) * vec3(1.0, 2.0, 3.0);
7972						${OUTPUT}
7973					}
7974				""
7975			end
7976			case ivec4_to_uvec4
7977				version 320 es
7978				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
7979				values
7980				{
7981					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
7982					output uvec4 out0 = [ uvec4(10, 24, 25, 104) | uvec4(12, 21, 20, 120) | uvec4(14, 39, 20, 112) ];
7983				}
7984
7985				both ""
7986					#version 320 es
7987					precision highp float;
7988					${DECLARATIONS}
7989
7990					void main()
7991					{
7992						${SETUP}
7993						out0 = (in0 + ivec4(4, 6, 2, 9)) * ivec4(2, 3, 5, 8);
7994						${OUTPUT}
7995					}
7996				""
7997			end
7998			case ivec4_to_vec4
7999				version 320 es
8000				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8001				values
8002				{
8003					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
8004					output vec4 out0 = [ vec4(3.0, 6.0, 15.0, 40.0) | vec4(4.0, 4.0, 12.0, 48.0) | vec4(5.0, 16.0, 12.0, 44.0) ];
8005				}
8006
8007				both ""
8008					#version 320 es
8009					precision highp float;
8010					${DECLARATIONS}
8011
8012					void main()
8013					{
8014						${SETUP}
8015						out0 = (in0 + vec4(2.0, 1.0, 2.0, 6.0)) * vec4(1.0, 2.0, 3.0, 4.0);
8016						${OUTPUT}
8017					}
8018				""
8019			end
8020			case uvec4_to_vec4
8021				version 320 es
8022				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8023				values
8024				{
8025					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
8026					output vec4 out0 = [ vec4(4.0, 8.0, 21.0, 56.0) | vec4(6.0, 14.0, 12.0, 60.0) | vec4(3.0, 28.0, 27.0, 40.0) ];
8027				}
8028
8029				both ""
8030					#version 320 es
8031					precision highp float;
8032					${DECLARATIONS}
8033
8034					void main()
8035					{
8036						${SETUP}
8037						out0 = (in0 + vec4(2.0, 1.0, 2.0, 6.0)) * vec4(1.0, 2.0, 3.0, 4.0);
8038						${OUTPUT}
8039					}
8040				""
8041			end
8042
8043		end # input_in_parens
8044		group input_outside_parens "Input variable outside parenthesized expression"
8045
8046			case int_to_float
8047				version 320 es
8048				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8049				values
8050				{
8051					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8052					output float out0 = [ 6.0 | 3.0 | 3.0 | 9.0 | 15.0 ];
8053				}
8054
8055				both ""
8056					#version 320 es
8057					precision highp float;
8058					${DECLARATIONS}
8059
8060					void main()
8061					{
8062						${SETUP}
8063						out0 = (2.0 + 1.0) * in0;
8064						${OUTPUT}
8065					}
8066				""
8067			end
8068			case int_to_uint
8069				version 320 es
8070				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8071				values
8072				{
8073					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8074					output uint out0 = [ 8 | 4 | 4 | 12 | 20 ];
8075				}
8076
8077				both ""
8078					#version 320 es
8079					precision highp float;
8080					${DECLARATIONS}
8081
8082					void main()
8083					{
8084						${SETUP}
8085						out0 = (1 + 3) * in0;
8086						${OUTPUT}
8087					}
8088				""
8089			end
8090			case int_to_vec2
8091				version 320 es
8092				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8093				values
8094				{
8095					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8096					output vec2 out0 = [ vec2(6.0, 6.0) | vec2(3.0, 3.0) | vec2(3.0, 3.0) | vec2(9.0, 9.0) | vec2(15.0, 15.0) ];
8097				}
8098
8099				both ""
8100					#version 320 es
8101					precision highp float;
8102					${DECLARATIONS}
8103
8104					void main()
8105					{
8106						${SETUP}
8107						out0 = (vec2(1.0, 2.0) + vec2(2.0, 1.0)) * in0;
8108						${OUTPUT}
8109					}
8110				""
8111			end
8112			case int_to_vec3
8113				version 320 es
8114				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8115				values
8116				{
8117					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8118					output vec3 out0 = [ vec3(6.0, 6.0, 10.0) | vec3(3.0, 3.0, 5.0) | vec3(3.0, 3.0, 5.0) | vec3(9.0, 9.0, 15.0) | vec3(15.0, 15.0, 25.0) ];
8119				}
8120
8121				both ""
8122					#version 320 es
8123					precision highp float;
8124					${DECLARATIONS}
8125
8126					void main()
8127					{
8128						${SETUP}
8129						out0 = (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0)) * in0;
8130						${OUTPUT}
8131					}
8132				""
8133			end
8134			case int_to_vec4
8135				version 320 es
8136				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8137				values
8138				{
8139					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8140					output vec4 out0 = [ vec4(6.0, 6.0, 10.0, 20.0) | vec4(3.0, 3.0, 5.0, 10.0) | vec4(3.0, 3.0, 5.0, 10.0) | vec4(9.0, 9.0, 15.0, 30.0) | vec4(15.0, 15.0, 25.0, 50.0) ];
8141				}
8142
8143				both ""
8144					#version 320 es
8145					precision highp float;
8146					${DECLARATIONS}
8147
8148					void main()
8149					{
8150						${SETUP}
8151						out0 = (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0)) * in0;
8152						${OUTPUT}
8153					}
8154				""
8155			end
8156			case int_to_uvec2
8157				version 320 es
8158				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8159				values
8160				{
8161					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8162					output uvec2 out0 = [ uvec2(12, 18) | uvec2(6, 9) | uvec2(6, 9) | uvec2(18, 27) | uvec2(30, 45) ];
8163				}
8164
8165				both ""
8166					#version 320 es
8167					precision highp float;
8168					${DECLARATIONS}
8169
8170					void main()
8171					{
8172						${SETUP}
8173						out0 = (ivec2(2, 3) + ivec2(4, 6)) * in0;
8174						${OUTPUT}
8175					}
8176				""
8177			end
8178			case int_to_uvec3
8179				version 320 es
8180				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8181				values
8182				{
8183					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8184					output uvec3 out0 = [ uvec3(12, 18, 14) | uvec3(6, 9, 7) | uvec3(6, 9, 7) | uvec3(18, 27, 21) | uvec3(30, 45, 35) ];
8185				}
8186
8187				both ""
8188					#version 320 es
8189					precision highp float;
8190					${DECLARATIONS}
8191
8192					void main()
8193					{
8194						${SETUP}
8195						out0 = (ivec3(2, 3, 5) + ivec3(4, 6, 2)) * in0;
8196						${OUTPUT}
8197					}
8198				""
8199			end
8200			case int_to_uvec4
8201				version 320 es
8202				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8203				values
8204				{
8205					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8206					output uvec4 out0 = [ uvec4(12, 18, 14, 34) | uvec4(6, 9, 7, 17) | uvec4(6, 9, 7, 17) | uvec4(18, 27, 21, 51) | uvec4(30, 45, 35, 85) ];
8207				}
8208
8209				both ""
8210					#version 320 es
8211					precision highp float;
8212					${DECLARATIONS}
8213
8214					void main()
8215					{
8216						${SETUP}
8217						out0 = (ivec4(2, 3, 5, 8) + ivec4(4, 6, 2, 9)) * in0;
8218						${OUTPUT}
8219					}
8220				""
8221			end
8222			case uint_to_float
8223				version 320 es
8224				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8225				values
8226				{
8227					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
8228					output float out0 = [ 3.0 | 9.0 | 12.0 | 21.0 | 33.0 ];
8229				}
8230
8231				both ""
8232					#version 320 es
8233					precision highp float;
8234					${DECLARATIONS}
8235
8236					void main()
8237					{
8238						${SETUP}
8239						out0 = (2.0 + 1.0) * in0;
8240						${OUTPUT}
8241					}
8242				""
8243			end
8244			case uint_to_vec2
8245				version 320 es
8246				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8247				values
8248				{
8249					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
8250					output vec2 out0 = [ vec2(3.0, 3.0) | vec2(9.0, 9.0) | vec2(12.0, 12.0) | vec2(21.0, 21.0) | vec2(33.0, 33.0) ];
8251				}
8252
8253				both ""
8254					#version 320 es
8255					precision highp float;
8256					${DECLARATIONS}
8257
8258					void main()
8259					{
8260						${SETUP}
8261						out0 = (vec2(1.0, 2.0) + vec2(2.0, 1.0)) * in0;
8262						${OUTPUT}
8263					}
8264				""
8265			end
8266			case uint_to_vec3
8267				version 320 es
8268				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8269				values
8270				{
8271					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
8272					output vec3 out0 = [ vec3(3.0, 3.0, 5.0) | vec3(9.0, 9.0, 15.0) | vec3(12.0, 12.0, 20.0) | vec3(21.0, 21.0, 35.0) | vec3(33.0, 33.0, 55.0) ];
8273				}
8274
8275				both ""
8276					#version 320 es
8277					precision highp float;
8278					${DECLARATIONS}
8279
8280					void main()
8281					{
8282						${SETUP}
8283						out0 = (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0)) * in0;
8284						${OUTPUT}
8285					}
8286				""
8287			end
8288			case uint_to_vec4
8289				version 320 es
8290				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8291				values
8292				{
8293					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
8294					output vec4 out0 = [ vec4(3.0, 3.0, 5.0, 10.0) | vec4(9.0, 9.0, 15.0, 30.0) | vec4(12.0, 12.0, 20.0, 40.0) | vec4(21.0, 21.0, 35.0, 70.0) | vec4(33.0, 33.0, 55.0, 110.0) ];
8295				}
8296
8297				both ""
8298					#version 320 es
8299					precision highp float;
8300					${DECLARATIONS}
8301
8302					void main()
8303					{
8304						${SETUP}
8305						out0 = (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0)) * in0;
8306						${OUTPUT}
8307					}
8308				""
8309			end
8310			case ivec2_to_uvec2
8311				version 320 es
8312				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8313				values
8314				{
8315					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
8316					output uvec2 out0 = [ uvec2(6, 18) | uvec2(12, 9) | uvec2(18, 63) ];
8317				}
8318
8319				both ""
8320					#version 320 es
8321					precision highp float;
8322					${DECLARATIONS}
8323
8324					void main()
8325					{
8326						${SETUP}
8327						out0 = (ivec2(2, 3) + ivec2(4, 6)) * in0;
8328						${OUTPUT}
8329					}
8330				""
8331			end
8332			case ivec2_to_vec2
8333				version 320 es
8334				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8335				values
8336				{
8337					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
8338					output vec2 out0 = [ vec2(3.0, 6.0) | vec2(6.0, 3.0) | vec2(9.0, 21.0) ];
8339				}
8340
8341				both ""
8342					#version 320 es
8343					precision highp float;
8344					${DECLARATIONS}
8345
8346					void main()
8347					{
8348						${SETUP}
8349						out0 = (vec2(1.0, 2.0) + vec2(2.0, 1.0)) * in0;
8350						${OUTPUT}
8351					}
8352				""
8353			end
8354			case uvec2_to_vec2
8355				version 320 es
8356				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8357				values
8358				{
8359					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
8360					output vec2 out0 = [ vec2(6.0, 9.0) | vec2(12.0, 18.0) | vec2(3.0, 39.0) ];
8361				}
8362
8363				both ""
8364					#version 320 es
8365					precision highp float;
8366					${DECLARATIONS}
8367
8368					void main()
8369					{
8370						${SETUP}
8371						out0 = (vec2(1.0, 2.0) + vec2(2.0, 1.0)) * in0;
8372						${OUTPUT}
8373					}
8374				""
8375			end
8376			case ivec3_to_uvec3
8377				version 320 es
8378				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8379				values
8380				{
8381					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
8382					output uvec3 out0 = [ uvec3(6, 18, 21) | uvec3(12, 9, 14) | uvec3(18, 63, 14) ];
8383				}
8384
8385				both ""
8386					#version 320 es
8387					precision highp float;
8388					${DECLARATIONS}
8389
8390					void main()
8391					{
8392						${SETUP}
8393						out0 = (ivec3(2, 3, 5) + ivec3(4, 6, 2)) * in0;
8394						${OUTPUT}
8395					}
8396				""
8397			end
8398			case ivec3_to_vec3
8399				version 320 es
8400				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8401				values
8402				{
8403					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
8404					output vec3 out0 = [ vec3(3.0, 6.0, 15.0) | vec3(6.0, 3.0, 10.0) | vec3(9.0, 21.0, 10.0) ];
8405				}
8406
8407				both ""
8408					#version 320 es
8409					precision highp float;
8410					${DECLARATIONS}
8411
8412					void main()
8413					{
8414						${SETUP}
8415						out0 = (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0)) * in0;
8416						${OUTPUT}
8417					}
8418				""
8419			end
8420			case uvec3_to_vec3
8421				version 320 es
8422				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8423				values
8424				{
8425					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
8426					output vec3 out0 = [ vec3(6.0, 9.0, 25.0) | vec3(12.0, 18.0, 10.0) | vec3(3.0, 39.0, 35.0) ];
8427				}
8428
8429				both ""
8430					#version 320 es
8431					precision highp float;
8432					${DECLARATIONS}
8433
8434					void main()
8435					{
8436						${SETUP}
8437						out0 = (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0)) * in0;
8438						${OUTPUT}
8439					}
8440				""
8441			end
8442			case ivec4_to_uvec4
8443				version 320 es
8444				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8445				values
8446				{
8447					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
8448					output uvec4 out0 = [ uvec4(6, 18, 21, 68) | uvec4(12, 9, 14, 102) | uvec4(18, 63, 14, 85) ];
8449				}
8450
8451				both ""
8452					#version 320 es
8453					precision highp float;
8454					${DECLARATIONS}
8455
8456					void main()
8457					{
8458						${SETUP}
8459						out0 = (ivec4(2, 3, 5, 8) + ivec4(4, 6, 2, 9)) * in0;
8460						${OUTPUT}
8461					}
8462				""
8463			end
8464			case ivec4_to_vec4
8465				version 320 es
8466				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8467				values
8468				{
8469					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
8470					output vec4 out0 = [ vec4(3.0, 6.0, 15.0, 40.0) | vec4(6.0, 3.0, 10.0, 60.0) | vec4(9.0, 21.0, 10.0, 50.0) ];
8471				}
8472
8473				both ""
8474					#version 320 es
8475					precision highp float;
8476					${DECLARATIONS}
8477
8478					void main()
8479					{
8480						${SETUP}
8481						out0 = (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0)) * in0;
8482						${OUTPUT}
8483					}
8484				""
8485			end
8486			case uvec4_to_vec4
8487				version 320 es
8488				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8489				values
8490				{
8491					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
8492					output vec4 out0 = [ vec4(6.0, 9.0, 25.0, 80.0) | vec4(12.0, 18.0, 10.0, 90.0) | vec4(3.0, 39.0, 35.0, 40.0) ];
8493				}
8494
8495				both ""
8496					#version 320 es
8497					precision highp float;
8498					${DECLARATIONS}
8499
8500					void main()
8501					{
8502						${SETUP}
8503						out0 = (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0)) * in0;
8504						${OUTPUT}
8505					}
8506				""
8507			end
8508
8509		end # input_outside_parens
8510
8511	end # paren_expr_before_literal
8512	group literal_before_paren_expr "Literal before parenthesized expression"
8513
8514		group input_in_parens "Input variable in parenthesized expression"
8515
8516			case int_to_float
8517				version 320 es
8518				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8519				values
8520				{
8521					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8522					output float out0 = [ 6.0 | 4.0 | 4.0 | 8.0 | 12.0 ];
8523				}
8524
8525				both ""
8526					#version 320 es
8527					precision highp float;
8528					${DECLARATIONS}
8529
8530					void main()
8531					{
8532						${SETUP}
8533						out0 = 2.0 * (in0 + 1.0);
8534						${OUTPUT}
8535					}
8536				""
8537			end
8538			case int_to_uint
8539				version 320 es
8540				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8541				values
8542				{
8543					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8544					output uint out0 = [ 5 | 4 | 4 | 6 | 8 ];
8545				}
8546
8547				both ""
8548					#version 320 es
8549					precision highp float;
8550					${DECLARATIONS}
8551
8552					void main()
8553					{
8554						${SETUP}
8555						out0 = 1 * (in0 + 3);
8556						${OUTPUT}
8557					}
8558				""
8559			end
8560			case int_to_vec2
8561				version 320 es
8562				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8563				values
8564				{
8565					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8566					output vec2 out0 = [ vec2(4.0, 6.0) | vec2(3.0, 4.0) | vec2(3.0, 4.0) | vec2(5.0, 8.0) | vec2(7.0, 12.0) ];
8567				}
8568
8569				both ""
8570					#version 320 es
8571					precision highp float;
8572					${DECLARATIONS}
8573
8574					void main()
8575					{
8576						${SETUP}
8577						out0 = vec2(1.0, 2.0) * (in0 + vec2(2.0, 1.0));
8578						${OUTPUT}
8579					}
8580				""
8581			end
8582			case int_to_vec3
8583				version 320 es
8584				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8585				values
8586				{
8587					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8588					output vec3 out0 = [ vec3(4.0, 6.0, 12.0) | vec3(3.0, 4.0, 9.0) | vec3(3.0, 4.0, 9.0) | vec3(5.0, 8.0, 15.0) | vec3(7.0, 12.0, 21.0) ];
8589				}
8590
8591				both ""
8592					#version 320 es
8593					precision highp float;
8594					${DECLARATIONS}
8595
8596					void main()
8597					{
8598						${SETUP}
8599						out0 = vec3(1.0, 2.0, 3.0) * (in0 + vec3(2.0, 1.0, 2.0));
8600						${OUTPUT}
8601					}
8602				""
8603			end
8604			case int_to_vec4
8605				version 320 es
8606				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8607				values
8608				{
8609					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8610					output vec4 out0 = [ vec4(4.0, 6.0, 12.0, 32.0) | vec4(3.0, 4.0, 9.0, 28.0) | vec4(3.0, 4.0, 9.0, 28.0) | vec4(5.0, 8.0, 15.0, 36.0) | vec4(7.0, 12.0, 21.0, 44.0) ];
8611				}
8612
8613				both ""
8614					#version 320 es
8615					precision highp float;
8616					${DECLARATIONS}
8617
8618					void main()
8619					{
8620						${SETUP}
8621						out0 = vec4(1.0, 2.0, 3.0, 4.0) * (in0 + vec4(2.0, 1.0, 2.0, 6.0));
8622						${OUTPUT}
8623					}
8624				""
8625			end
8626			case int_to_uvec2
8627				version 320 es
8628				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8629				values
8630				{
8631					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8632					output uvec2 out0 = [ uvec2(12, 24) | uvec2(10, 21) | uvec2(10, 21) | uvec2(14, 27) | uvec2(18, 33) ];
8633				}
8634
8635				both ""
8636					#version 320 es
8637					precision highp float;
8638					${DECLARATIONS}
8639
8640					void main()
8641					{
8642						${SETUP}
8643						out0 = ivec2(2, 3) * (in0 + ivec2(4, 6));
8644						${OUTPUT}
8645					}
8646				""
8647			end
8648			case int_to_uvec3
8649				version 320 es
8650				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8651				values
8652				{
8653					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8654					output uvec3 out0 = [ uvec3(12, 24, 20) | uvec3(10, 21, 15) | uvec3(10, 21, 15) | uvec3(14, 27, 25) | uvec3(18, 33, 35) ];
8655				}
8656
8657				both ""
8658					#version 320 es
8659					precision highp float;
8660					${DECLARATIONS}
8661
8662					void main()
8663					{
8664						${SETUP}
8665						out0 = ivec3(2, 3, 5) * (in0 + ivec3(4, 6, 2));
8666						${OUTPUT}
8667					}
8668				""
8669			end
8670			case int_to_uvec4
8671				version 320 es
8672				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8673				values
8674				{
8675					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8676					output uvec4 out0 = [ uvec4(12, 24, 20, 88) | uvec4(10, 21, 15, 80) | uvec4(10, 21, 15, 80) | uvec4(14, 27, 25, 96) | uvec4(18, 33, 35, 112) ];
8677				}
8678
8679				both ""
8680					#version 320 es
8681					precision highp float;
8682					${DECLARATIONS}
8683
8684					void main()
8685					{
8686						${SETUP}
8687						out0 = ivec4(2, 3, 5, 8) * (in0 + ivec4(4, 6, 2, 9));
8688						${OUTPUT}
8689					}
8690				""
8691			end
8692			case uint_to_float
8693				version 320 es
8694				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8695				values
8696				{
8697					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
8698					output float out0 = [ 4.0 | 8.0 | 10.0 | 16.0 | 24.0 ];
8699				}
8700
8701				both ""
8702					#version 320 es
8703					precision highp float;
8704					${DECLARATIONS}
8705
8706					void main()
8707					{
8708						${SETUP}
8709						out0 = 2.0 * (in0 + 1.0);
8710						${OUTPUT}
8711					}
8712				""
8713			end
8714			case uint_to_vec2
8715				version 320 es
8716				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8717				values
8718				{
8719					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
8720					output vec2 out0 = [ vec2(3.0, 4.0) | vec2(5.0, 8.0) | vec2(6.0, 10.0) | vec2(9.0, 16.0) | vec2(13.0, 24.0) ];
8721				}
8722
8723				both ""
8724					#version 320 es
8725					precision highp float;
8726					${DECLARATIONS}
8727
8728					void main()
8729					{
8730						${SETUP}
8731						out0 = vec2(1.0, 2.0) * (in0 + vec2(2.0, 1.0));
8732						${OUTPUT}
8733					}
8734				""
8735			end
8736			case uint_to_vec3
8737				version 320 es
8738				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8739				values
8740				{
8741					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
8742					output vec3 out0 = [ vec3(3.0, 4.0, 9.0) | vec3(5.0, 8.0, 15.0) | vec3(6.0, 10.0, 18.0) | vec3(9.0, 16.0, 27.0) | vec3(13.0, 24.0, 39.0) ];
8743				}
8744
8745				both ""
8746					#version 320 es
8747					precision highp float;
8748					${DECLARATIONS}
8749
8750					void main()
8751					{
8752						${SETUP}
8753						out0 = vec3(1.0, 2.0, 3.0) * (in0 + vec3(2.0, 1.0, 2.0));
8754						${OUTPUT}
8755					}
8756				""
8757			end
8758			case uint_to_vec4
8759				version 320 es
8760				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8761				values
8762				{
8763					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
8764					output vec4 out0 = [ vec4(3.0, 4.0, 9.0, 28.0) | vec4(5.0, 8.0, 15.0, 36.0) | vec4(6.0, 10.0, 18.0, 40.0) | vec4(9.0, 16.0, 27.0, 52.0) | vec4(13.0, 24.0, 39.0, 68.0) ];
8765				}
8766
8767				both ""
8768					#version 320 es
8769					precision highp float;
8770					${DECLARATIONS}
8771
8772					void main()
8773					{
8774						${SETUP}
8775						out0 = vec4(1.0, 2.0, 3.0, 4.0) * (in0 + vec4(2.0, 1.0, 2.0, 6.0));
8776						${OUTPUT}
8777					}
8778				""
8779			end
8780			case ivec2_to_uvec2
8781				version 320 es
8782				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8783				values
8784				{
8785					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
8786					output uvec2 out0 = [ uvec2(10, 24) | uvec2(12, 21) | uvec2(14, 39) ];
8787				}
8788
8789				both ""
8790					#version 320 es
8791					precision highp float;
8792					${DECLARATIONS}
8793
8794					void main()
8795					{
8796						${SETUP}
8797						out0 = ivec2(2, 3) * (in0 + ivec2(4, 6));
8798						${OUTPUT}
8799					}
8800				""
8801			end
8802			case ivec2_to_vec2
8803				version 320 es
8804				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8805				values
8806				{
8807					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
8808					output vec2 out0 = [ vec2(3.0, 6.0) | vec2(4.0, 4.0) | vec2(5.0, 16.0) ];
8809				}
8810
8811				both ""
8812					#version 320 es
8813					precision highp float;
8814					${DECLARATIONS}
8815
8816					void main()
8817					{
8818						${SETUP}
8819						out0 = vec2(1.0, 2.0) * (in0 + vec2(2.0, 1.0));
8820						${OUTPUT}
8821					}
8822				""
8823			end
8824			case uvec2_to_vec2
8825				version 320 es
8826				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8827				values
8828				{
8829					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
8830					output vec2 out0 = [ vec2(4.0, 8.0) | vec2(6.0, 14.0) | vec2(3.0, 28.0) ];
8831				}
8832
8833				both ""
8834					#version 320 es
8835					precision highp float;
8836					${DECLARATIONS}
8837
8838					void main()
8839					{
8840						${SETUP}
8841						out0 = vec2(1.0, 2.0) * (in0 + vec2(2.0, 1.0));
8842						${OUTPUT}
8843					}
8844				""
8845			end
8846			case ivec3_to_uvec3
8847				version 320 es
8848				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8849				values
8850				{
8851					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
8852					output uvec3 out0 = [ uvec3(10, 24, 25) | uvec3(12, 21, 20) | uvec3(14, 39, 20) ];
8853				}
8854
8855				both ""
8856					#version 320 es
8857					precision highp float;
8858					${DECLARATIONS}
8859
8860					void main()
8861					{
8862						${SETUP}
8863						out0 = ivec3(2, 3, 5) * (in0 + ivec3(4, 6, 2));
8864						${OUTPUT}
8865					}
8866				""
8867			end
8868			case ivec3_to_vec3
8869				version 320 es
8870				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8871				values
8872				{
8873					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
8874					output vec3 out0 = [ vec3(3.0, 6.0, 15.0) | vec3(4.0, 4.0, 12.0) | vec3(5.0, 16.0, 12.0) ];
8875				}
8876
8877				both ""
8878					#version 320 es
8879					precision highp float;
8880					${DECLARATIONS}
8881
8882					void main()
8883					{
8884						${SETUP}
8885						out0 = vec3(1.0, 2.0, 3.0) * (in0 + vec3(2.0, 1.0, 2.0));
8886						${OUTPUT}
8887					}
8888				""
8889			end
8890			case uvec3_to_vec3
8891				version 320 es
8892				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8893				values
8894				{
8895					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
8896					output vec3 out0 = [ vec3(4.0, 8.0, 21.0) | vec3(6.0, 14.0, 12.0) | vec3(3.0, 28.0, 27.0) ];
8897				}
8898
8899				both ""
8900					#version 320 es
8901					precision highp float;
8902					${DECLARATIONS}
8903
8904					void main()
8905					{
8906						${SETUP}
8907						out0 = vec3(1.0, 2.0, 3.0) * (in0 + vec3(2.0, 1.0, 2.0));
8908						${OUTPUT}
8909					}
8910				""
8911			end
8912			case ivec4_to_uvec4
8913				version 320 es
8914				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8915				values
8916				{
8917					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
8918					output uvec4 out0 = [ uvec4(10, 24, 25, 104) | uvec4(12, 21, 20, 120) | uvec4(14, 39, 20, 112) ];
8919				}
8920
8921				both ""
8922					#version 320 es
8923					precision highp float;
8924					${DECLARATIONS}
8925
8926					void main()
8927					{
8928						${SETUP}
8929						out0 = ivec4(2, 3, 5, 8) * (in0 + ivec4(4, 6, 2, 9));
8930						${OUTPUT}
8931					}
8932				""
8933			end
8934			case ivec4_to_vec4
8935				version 320 es
8936				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8937				values
8938				{
8939					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
8940					output vec4 out0 = [ vec4(3.0, 6.0, 15.0, 40.0) | vec4(4.0, 4.0, 12.0, 48.0) | vec4(5.0, 16.0, 12.0, 44.0) ];
8941				}
8942
8943				both ""
8944					#version 320 es
8945					precision highp float;
8946					${DECLARATIONS}
8947
8948					void main()
8949					{
8950						${SETUP}
8951						out0 = vec4(1.0, 2.0, 3.0, 4.0) * (in0 + vec4(2.0, 1.0, 2.0, 6.0));
8952						${OUTPUT}
8953					}
8954				""
8955			end
8956			case uvec4_to_vec4
8957				version 320 es
8958				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8959				values
8960				{
8961					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
8962					output vec4 out0 = [ vec4(4.0, 8.0, 21.0, 56.0) | vec4(6.0, 14.0, 12.0, 60.0) | vec4(3.0, 28.0, 27.0, 40.0) ];
8963				}
8964
8965				both ""
8966					#version 320 es
8967					precision highp float;
8968					${DECLARATIONS}
8969
8970					void main()
8971					{
8972						${SETUP}
8973						out0 = vec4(1.0, 2.0, 3.0, 4.0) * (in0 + vec4(2.0, 1.0, 2.0, 6.0));
8974						${OUTPUT}
8975					}
8976				""
8977			end
8978
8979		end # input_in_parens
8980		group input_outside_parens "Input variable outside parenthesized expression"
8981
8982			case int_to_float
8983				version 320 es
8984				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
8985				values
8986				{
8987					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
8988					output float out0 = [ 6.0 | 3.0 | 3.0 | 9.0 | 15.0 ];
8989				}
8990
8991				both ""
8992					#version 320 es
8993					precision highp float;
8994					${DECLARATIONS}
8995
8996					void main()
8997					{
8998						${SETUP}
8999						out0 = in0 * (2.0 + 1.0);
9000						${OUTPUT}
9001					}
9002				""
9003			end
9004			case int_to_uint
9005				version 320 es
9006				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9007				values
9008				{
9009					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
9010					output uint out0 = [ 8 | 4 | 4 | 12 | 20 ];
9011				}
9012
9013				both ""
9014					#version 320 es
9015					precision highp float;
9016					${DECLARATIONS}
9017
9018					void main()
9019					{
9020						${SETUP}
9021						out0 = in0 * (1 + 3);
9022						${OUTPUT}
9023					}
9024				""
9025			end
9026			case int_to_vec2
9027				version 320 es
9028				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9029				values
9030				{
9031					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
9032					output vec2 out0 = [ vec2(6.0, 6.0) | vec2(3.0, 3.0) | vec2(3.0, 3.0) | vec2(9.0, 9.0) | vec2(15.0, 15.0) ];
9033				}
9034
9035				both ""
9036					#version 320 es
9037					precision highp float;
9038					${DECLARATIONS}
9039
9040					void main()
9041					{
9042						${SETUP}
9043						out0 = in0 * (vec2(1.0, 2.0) + vec2(2.0, 1.0));
9044						${OUTPUT}
9045					}
9046				""
9047			end
9048			case int_to_vec3
9049				version 320 es
9050				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9051				values
9052				{
9053					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
9054					output vec3 out0 = [ vec3(6.0, 6.0, 10.0) | vec3(3.0, 3.0, 5.0) | vec3(3.0, 3.0, 5.0) | vec3(9.0, 9.0, 15.0) | vec3(15.0, 15.0, 25.0) ];
9055				}
9056
9057				both ""
9058					#version 320 es
9059					precision highp float;
9060					${DECLARATIONS}
9061
9062					void main()
9063					{
9064						${SETUP}
9065						out0 = in0 * (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0));
9066						${OUTPUT}
9067					}
9068				""
9069			end
9070			case int_to_vec4
9071				version 320 es
9072				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9073				values
9074				{
9075					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
9076					output vec4 out0 = [ vec4(6.0, 6.0, 10.0, 20.0) | vec4(3.0, 3.0, 5.0, 10.0) | vec4(3.0, 3.0, 5.0, 10.0) | vec4(9.0, 9.0, 15.0, 30.0) | vec4(15.0, 15.0, 25.0, 50.0) ];
9077				}
9078
9079				both ""
9080					#version 320 es
9081					precision highp float;
9082					${DECLARATIONS}
9083
9084					void main()
9085					{
9086						${SETUP}
9087						out0 = in0 * (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0));
9088						${OUTPUT}
9089					}
9090				""
9091			end
9092			case int_to_uvec2
9093				version 320 es
9094				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9095				values
9096				{
9097					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
9098					output uvec2 out0 = [ uvec2(12, 18) | uvec2(6, 9) | uvec2(6, 9) | uvec2(18, 27) | uvec2(30, 45) ];
9099				}
9100
9101				both ""
9102					#version 320 es
9103					precision highp float;
9104					${DECLARATIONS}
9105
9106					void main()
9107					{
9108						${SETUP}
9109						out0 = in0 * (ivec2(2, 3) + ivec2(4, 6));
9110						${OUTPUT}
9111					}
9112				""
9113			end
9114			case int_to_uvec3
9115				version 320 es
9116				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9117				values
9118				{
9119					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
9120					output uvec3 out0 = [ uvec3(12, 18, 14) | uvec3(6, 9, 7) | uvec3(6, 9, 7) | uvec3(18, 27, 21) | uvec3(30, 45, 35) ];
9121				}
9122
9123				both ""
9124					#version 320 es
9125					precision highp float;
9126					${DECLARATIONS}
9127
9128					void main()
9129					{
9130						${SETUP}
9131						out0 = in0 * (ivec3(2, 3, 5) + ivec3(4, 6, 2));
9132						${OUTPUT}
9133					}
9134				""
9135			end
9136			case int_to_uvec4
9137				version 320 es
9138				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9139				values
9140				{
9141					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
9142					output uvec4 out0 = [ uvec4(12, 18, 14, 34) | uvec4(6, 9, 7, 17) | uvec4(6, 9, 7, 17) | uvec4(18, 27, 21, 51) | uvec4(30, 45, 35, 85) ];
9143				}
9144
9145				both ""
9146					#version 320 es
9147					precision highp float;
9148					${DECLARATIONS}
9149
9150					void main()
9151					{
9152						${SETUP}
9153						out0 = in0 * (ivec4(2, 3, 5, 8) + ivec4(4, 6, 2, 9));
9154						${OUTPUT}
9155					}
9156				""
9157			end
9158			case uint_to_float
9159				version 320 es
9160				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9161				values
9162				{
9163					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
9164					output float out0 = [ 3.0 | 9.0 | 12.0 | 21.0 | 33.0 ];
9165				}
9166
9167				both ""
9168					#version 320 es
9169					precision highp float;
9170					${DECLARATIONS}
9171
9172					void main()
9173					{
9174						${SETUP}
9175						out0 = in0 * (2.0 + 1.0);
9176						${OUTPUT}
9177					}
9178				""
9179			end
9180			case uint_to_vec2
9181				version 320 es
9182				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9183				values
9184				{
9185					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
9186					output vec2 out0 = [ vec2(3.0, 3.0) | vec2(9.0, 9.0) | vec2(12.0, 12.0) | vec2(21.0, 21.0) | vec2(33.0, 33.0) ];
9187				}
9188
9189				both ""
9190					#version 320 es
9191					precision highp float;
9192					${DECLARATIONS}
9193
9194					void main()
9195					{
9196						${SETUP}
9197						out0 = in0 * (vec2(1.0, 2.0) + vec2(2.0, 1.0));
9198						${OUTPUT}
9199					}
9200				""
9201			end
9202			case uint_to_vec3
9203				version 320 es
9204				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9205				values
9206				{
9207					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
9208					output vec3 out0 = [ vec3(3.0, 3.0, 5.0) | vec3(9.0, 9.0, 15.0) | vec3(12.0, 12.0, 20.0) | vec3(21.0, 21.0, 35.0) | vec3(33.0, 33.0, 55.0) ];
9209				}
9210
9211				both ""
9212					#version 320 es
9213					precision highp float;
9214					${DECLARATIONS}
9215
9216					void main()
9217					{
9218						${SETUP}
9219						out0 = in0 * (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0));
9220						${OUTPUT}
9221					}
9222				""
9223			end
9224			case uint_to_vec4
9225				version 320 es
9226				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9227				values
9228				{
9229					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
9230					output vec4 out0 = [ vec4(3.0, 3.0, 5.0, 10.0) | vec4(9.0, 9.0, 15.0, 30.0) | vec4(12.0, 12.0, 20.0, 40.0) | vec4(21.0, 21.0, 35.0, 70.0) | vec4(33.0, 33.0, 55.0, 110.0) ];
9231				}
9232
9233				both ""
9234					#version 320 es
9235					precision highp float;
9236					${DECLARATIONS}
9237
9238					void main()
9239					{
9240						${SETUP}
9241						out0 = in0 * (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0));
9242						${OUTPUT}
9243					}
9244				""
9245			end
9246			case ivec2_to_uvec2
9247				version 320 es
9248				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9249				values
9250				{
9251					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
9252					output uvec2 out0 = [ uvec2(6, 18) | uvec2(12, 9) | uvec2(18, 63) ];
9253				}
9254
9255				both ""
9256					#version 320 es
9257					precision highp float;
9258					${DECLARATIONS}
9259
9260					void main()
9261					{
9262						${SETUP}
9263						out0 = in0 * (ivec2(2, 3) + ivec2(4, 6));
9264						${OUTPUT}
9265					}
9266				""
9267			end
9268			case ivec2_to_vec2
9269				version 320 es
9270				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9271				values
9272				{
9273					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
9274					output vec2 out0 = [ vec2(3.0, 6.0) | vec2(6.0, 3.0) | vec2(9.0, 21.0) ];
9275				}
9276
9277				both ""
9278					#version 320 es
9279					precision highp float;
9280					${DECLARATIONS}
9281
9282					void main()
9283					{
9284						${SETUP}
9285						out0 = in0 * (vec2(1.0, 2.0) + vec2(2.0, 1.0));
9286						${OUTPUT}
9287					}
9288				""
9289			end
9290			case uvec2_to_vec2
9291				version 320 es
9292				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9293				values
9294				{
9295					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
9296					output vec2 out0 = [ vec2(6.0, 9.0) | vec2(12.0, 18.0) | vec2(3.0, 39.0) ];
9297				}
9298
9299				both ""
9300					#version 320 es
9301					precision highp float;
9302					${DECLARATIONS}
9303
9304					void main()
9305					{
9306						${SETUP}
9307						out0 = in0 * (vec2(1.0, 2.0) + vec2(2.0, 1.0));
9308						${OUTPUT}
9309					}
9310				""
9311			end
9312			case ivec3_to_uvec3
9313				version 320 es
9314				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9315				values
9316				{
9317					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
9318					output uvec3 out0 = [ uvec3(6, 18, 21) | uvec3(12, 9, 14) | uvec3(18, 63, 14) ];
9319				}
9320
9321				both ""
9322					#version 320 es
9323					precision highp float;
9324					${DECLARATIONS}
9325
9326					void main()
9327					{
9328						${SETUP}
9329						out0 = in0 * (ivec3(2, 3, 5) + ivec3(4, 6, 2));
9330						${OUTPUT}
9331					}
9332				""
9333			end
9334			case ivec3_to_vec3
9335				version 320 es
9336				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9337				values
9338				{
9339					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
9340					output vec3 out0 = [ vec3(3.0, 6.0, 15.0) | vec3(6.0, 3.0, 10.0) | vec3(9.0, 21.0, 10.0) ];
9341				}
9342
9343				both ""
9344					#version 320 es
9345					precision highp float;
9346					${DECLARATIONS}
9347
9348					void main()
9349					{
9350						${SETUP}
9351						out0 = in0 * (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0));
9352						${OUTPUT}
9353					}
9354				""
9355			end
9356			case uvec3_to_vec3
9357				version 320 es
9358				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9359				values
9360				{
9361					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
9362					output vec3 out0 = [ vec3(6.0, 9.0, 25.0) | vec3(12.0, 18.0, 10.0) | vec3(3.0, 39.0, 35.0) ];
9363				}
9364
9365				both ""
9366					#version 320 es
9367					precision highp float;
9368					${DECLARATIONS}
9369
9370					void main()
9371					{
9372						${SETUP}
9373						out0 = in0 * (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0));
9374						${OUTPUT}
9375					}
9376				""
9377			end
9378			case ivec4_to_uvec4
9379				version 320 es
9380				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9381				values
9382				{
9383					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
9384					output uvec4 out0 = [ uvec4(6, 18, 21, 68) | uvec4(12, 9, 14, 102) | uvec4(18, 63, 14, 85) ];
9385				}
9386
9387				both ""
9388					#version 320 es
9389					precision highp float;
9390					${DECLARATIONS}
9391
9392					void main()
9393					{
9394						${SETUP}
9395						out0 = in0 * (ivec4(2, 3, 5, 8) + ivec4(4, 6, 2, 9));
9396						${OUTPUT}
9397					}
9398				""
9399			end
9400			case ivec4_to_vec4
9401				version 320 es
9402				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9403				values
9404				{
9405					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
9406					output vec4 out0 = [ vec4(3.0, 6.0, 15.0, 40.0) | vec4(6.0, 3.0, 10.0, 60.0) | vec4(9.0, 21.0, 10.0, 50.0) ];
9407				}
9408
9409				both ""
9410					#version 320 es
9411					precision highp float;
9412					${DECLARATIONS}
9413
9414					void main()
9415					{
9416						${SETUP}
9417						out0 = in0 * (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0));
9418						${OUTPUT}
9419					}
9420				""
9421			end
9422			case uvec4_to_vec4
9423				version 320 es
9424				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9425				values
9426				{
9427					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
9428					output vec4 out0 = [ vec4(6.0, 9.0, 25.0, 80.0) | vec4(12.0, 18.0, 10.0, 90.0) | vec4(3.0, 39.0, 35.0, 40.0) ];
9429				}
9430
9431				both ""
9432					#version 320 es
9433					precision highp float;
9434					${DECLARATIONS}
9435
9436					void main()
9437					{
9438						${SETUP}
9439						out0 = in0 * (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0));
9440						${OUTPUT}
9441					}
9442				""
9443			end
9444
9445		end # input_outside_parens
9446
9447	end # literal_before_paren_expr
9448
9449end # parenthesized_expressions
9450group invalid "Invalid conversions"
9451
9452	group variables "Single variables"
9453
9454		case uint_to_int
9455			expect compile_fail
9456			version 320 es
9457			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9458			values
9459			{
9460				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
9461				output int out0 = [ 2 | 2 | 2 | 2 | 2 ];
9462			}
9463
9464			both ""
9465				#version 320 es
9466				precision highp float;
9467				${DECLARATIONS}
9468
9469				void main()
9470				{
9471					${SETUP}
9472					out0 = in0 + 2;
9473					${OUTPUT}
9474				}
9475			""
9476		end
9477		case uint_to_ivec2
9478			expect compile_fail
9479			version 320 es
9480			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9481			values
9482			{
9483				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
9484				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
9485			}
9486
9487			both ""
9488				#version 320 es
9489				precision highp float;
9490				${DECLARATIONS}
9491
9492				void main()
9493				{
9494					${SETUP}
9495					out0 = in0 + ivec2(1, 2);
9496					${OUTPUT}
9497				}
9498			""
9499		end
9500		case uint_to_ivec3
9501			expect compile_fail
9502			version 320 es
9503			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9504			values
9505			{
9506				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
9507				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
9508			}
9509
9510			both ""
9511				#version 320 es
9512				precision highp float;
9513				${DECLARATIONS}
9514
9515				void main()
9516				{
9517					${SETUP}
9518					out0 = in0 + ivec3(1, 2, 3);
9519					${OUTPUT}
9520				}
9521			""
9522		end
9523		case uint_to_ivec4
9524			expect compile_fail
9525			version 320 es
9526			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9527			values
9528			{
9529				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
9530				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
9531			}
9532
9533			both ""
9534				#version 320 es
9535				precision highp float;
9536				${DECLARATIONS}
9537
9538				void main()
9539				{
9540					${SETUP}
9541					out0 = in0 + ivec4(1, 2, 3, 4);
9542					${OUTPUT}
9543				}
9544			""
9545		end
9546		case ivec2_to_uint
9547			expect compile_fail
9548			version 320 es
9549			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9550			values
9551			{
9552				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
9553				output uint out0 = [ 1 | 1 | 1 ];
9554			}
9555
9556			both ""
9557				#version 320 es
9558				precision highp float;
9559				${DECLARATIONS}
9560
9561				void main()
9562				{
9563					${SETUP}
9564					out0 = in0 + 1;
9565					${OUTPUT}
9566				}
9567			""
9568		end
9569		case ivec2_to_ivec3
9570			expect compile_fail
9571			version 320 es
9572			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9573			values
9574			{
9575				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
9576				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
9577			}
9578
9579			both ""
9580				#version 320 es
9581				precision highp float;
9582				${DECLARATIONS}
9583
9584				void main()
9585				{
9586					${SETUP}
9587					out0 = in0 + ivec3(1, 2, 3);
9588					${OUTPUT}
9589				}
9590			""
9591		end
9592		case ivec2_to_uvec3
9593			expect compile_fail
9594			version 320 es
9595			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9596			values
9597			{
9598				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
9599				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
9600			}
9601
9602			both ""
9603				#version 320 es
9604				precision highp float;
9605				${DECLARATIONS}
9606
9607				void main()
9608				{
9609					${SETUP}
9610					out0 = in0 + ivec3(2, 3, 5);
9611					${OUTPUT}
9612				}
9613			""
9614		end
9615		case ivec2_to_ivec4
9616			expect compile_fail
9617			version 320 es
9618			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9619			values
9620			{
9621				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
9622				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
9623			}
9624
9625			both ""
9626				#version 320 es
9627				precision highp float;
9628				${DECLARATIONS}
9629
9630				void main()
9631				{
9632					${SETUP}
9633					out0 = in0 + ivec4(1, 2, 3, 4);
9634					${OUTPUT}
9635				}
9636			""
9637		end
9638		case ivec2_to_uvec4
9639			expect compile_fail
9640			version 320 es
9641			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9642			values
9643			{
9644				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
9645				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
9646			}
9647
9648			both ""
9649				#version 320 es
9650				precision highp float;
9651				${DECLARATIONS}
9652
9653				void main()
9654				{
9655					${SETUP}
9656					out0 = in0 + ivec4(2, 3, 5, 8);
9657					${OUTPUT}
9658				}
9659			""
9660		end
9661		case ivec2_to_vec3
9662			expect compile_fail
9663			version 320 es
9664			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9665			values
9666			{
9667				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
9668				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
9669			}
9670
9671			both ""
9672				#version 320 es
9673				precision highp float;
9674				${DECLARATIONS}
9675
9676				void main()
9677				{
9678					${SETUP}
9679					out0 = in0 + vec3(1.0, 2.0, 3.0);
9680					${OUTPUT}
9681				}
9682			""
9683		end
9684		case ivec2_to_vec4
9685			expect compile_fail
9686			version 320 es
9687			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9688			values
9689			{
9690				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
9691				output vec4 out0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) ];
9692			}
9693
9694			both ""
9695				#version 320 es
9696				precision highp float;
9697				${DECLARATIONS}
9698
9699				void main()
9700				{
9701					${SETUP}
9702					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
9703					${OUTPUT}
9704				}
9705			""
9706		end
9707		case uvec2_to_int
9708			expect compile_fail
9709			version 320 es
9710			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9711			values
9712			{
9713				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
9714				output int out0 = [ 2 | 2 | 2 ];
9715			}
9716
9717			both ""
9718				#version 320 es
9719				precision highp float;
9720				${DECLARATIONS}
9721
9722				void main()
9723				{
9724					${SETUP}
9725					out0 = in0 + 2;
9726					${OUTPUT}
9727				}
9728			""
9729		end
9730		case uvec2_to_ivec2
9731			expect compile_fail
9732			version 320 es
9733			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9734			values
9735			{
9736				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
9737				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
9738			}
9739
9740			both ""
9741				#version 320 es
9742				precision highp float;
9743				${DECLARATIONS}
9744
9745				void main()
9746				{
9747					${SETUP}
9748					out0 = in0 + ivec2(1, 2);
9749					${OUTPUT}
9750				}
9751			""
9752		end
9753		case uvec2_to_ivec3
9754			expect compile_fail
9755			version 320 es
9756			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9757			values
9758			{
9759				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
9760				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
9761			}
9762
9763			both ""
9764				#version 320 es
9765				precision highp float;
9766				${DECLARATIONS}
9767
9768				void main()
9769				{
9770					${SETUP}
9771					out0 = in0 + ivec3(1, 2, 3);
9772					${OUTPUT}
9773				}
9774			""
9775		end
9776		case uvec2_to_uvec3
9777			expect compile_fail
9778			version 320 es
9779			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9780			values
9781			{
9782				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
9783				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
9784			}
9785
9786			both ""
9787				#version 320 es
9788				precision highp float;
9789				${DECLARATIONS}
9790
9791				void main()
9792				{
9793					${SETUP}
9794					out0 = in0 + ivec3(2, 3, 5);
9795					${OUTPUT}
9796				}
9797			""
9798		end
9799		case uvec2_to_ivec4
9800			expect compile_fail
9801			version 320 es
9802			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9803			values
9804			{
9805				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
9806				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
9807			}
9808
9809			both ""
9810				#version 320 es
9811				precision highp float;
9812				${DECLARATIONS}
9813
9814				void main()
9815				{
9816					${SETUP}
9817					out0 = in0 + ivec4(1, 2, 3, 4);
9818					${OUTPUT}
9819				}
9820			""
9821		end
9822		case uvec2_to_uvec4
9823			expect compile_fail
9824			version 320 es
9825			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9826			values
9827			{
9828				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
9829				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
9830			}
9831
9832			both ""
9833				#version 320 es
9834				precision highp float;
9835				${DECLARATIONS}
9836
9837				void main()
9838				{
9839					${SETUP}
9840					out0 = in0 + ivec4(2, 3, 5, 8);
9841					${OUTPUT}
9842				}
9843			""
9844		end
9845		case uvec2_to_vec3
9846			expect compile_fail
9847			version 320 es
9848			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9849			values
9850			{
9851				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
9852				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
9853			}
9854
9855			both ""
9856				#version 320 es
9857				precision highp float;
9858				${DECLARATIONS}
9859
9860				void main()
9861				{
9862					${SETUP}
9863					out0 = in0 + vec3(1.0, 2.0, 3.0);
9864					${OUTPUT}
9865				}
9866			""
9867		end
9868		case uvec2_to_vec4
9869			expect compile_fail
9870			version 320 es
9871			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9872			values
9873			{
9874				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
9875				output vec4 out0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) ];
9876			}
9877
9878			both ""
9879				#version 320 es
9880				precision highp float;
9881				${DECLARATIONS}
9882
9883				void main()
9884				{
9885					${SETUP}
9886					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
9887					${OUTPUT}
9888				}
9889			""
9890		end
9891		case ivec3_to_uint
9892			expect compile_fail
9893			version 320 es
9894			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9895			values
9896			{
9897				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
9898				output uint out0 = [ 1 | 1 | 1 ];
9899			}
9900
9901			both ""
9902				#version 320 es
9903				precision highp float;
9904				${DECLARATIONS}
9905
9906				void main()
9907				{
9908					${SETUP}
9909					out0 = in0 + 1;
9910					${OUTPUT}
9911				}
9912			""
9913		end
9914		case ivec3_to_ivec2
9915			expect compile_fail
9916			version 320 es
9917			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9918			values
9919			{
9920				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
9921				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
9922			}
9923
9924			both ""
9925				#version 320 es
9926				precision highp float;
9927				${DECLARATIONS}
9928
9929				void main()
9930				{
9931					${SETUP}
9932					out0 = in0 + ivec2(1, 2);
9933					${OUTPUT}
9934				}
9935			""
9936		end
9937		case ivec3_to_uvec2
9938			expect compile_fail
9939			version 320 es
9940			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9941			values
9942			{
9943				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
9944				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
9945			}
9946
9947			both ""
9948				#version 320 es
9949				precision highp float;
9950				${DECLARATIONS}
9951
9952				void main()
9953				{
9954					${SETUP}
9955					out0 = in0 + ivec2(2, 3);
9956					${OUTPUT}
9957				}
9958			""
9959		end
9960		case ivec3_to_ivec4
9961			expect compile_fail
9962			version 320 es
9963			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9964			values
9965			{
9966				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
9967				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
9968			}
9969
9970			both ""
9971				#version 320 es
9972				precision highp float;
9973				${DECLARATIONS}
9974
9975				void main()
9976				{
9977					${SETUP}
9978					out0 = in0 + ivec4(1, 2, 3, 4);
9979					${OUTPUT}
9980				}
9981			""
9982		end
9983		case ivec3_to_uvec4
9984			expect compile_fail
9985			version 320 es
9986			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
9987			values
9988			{
9989				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
9990				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
9991			}
9992
9993			both ""
9994				#version 320 es
9995				precision highp float;
9996				${DECLARATIONS}
9997
9998				void main()
9999				{
10000					${SETUP}
10001					out0 = in0 + ivec4(2, 3, 5, 8);
10002					${OUTPUT}
10003				}
10004			""
10005		end
10006		case ivec3_to_vec2
10007			expect compile_fail
10008			version 320 es
10009			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10010			values
10011			{
10012				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
10013				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
10014			}
10015
10016			both ""
10017				#version 320 es
10018				precision highp float;
10019				${DECLARATIONS}
10020
10021				void main()
10022				{
10023					${SETUP}
10024					out0 = in0 + vec2(1.0, 2.0);
10025					${OUTPUT}
10026				}
10027			""
10028		end
10029		case ivec3_to_vec4
10030			expect compile_fail
10031			version 320 es
10032			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10033			values
10034			{
10035				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
10036				output vec4 out0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) ];
10037			}
10038
10039			both ""
10040				#version 320 es
10041				precision highp float;
10042				${DECLARATIONS}
10043
10044				void main()
10045				{
10046					${SETUP}
10047					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
10048					${OUTPUT}
10049				}
10050			""
10051		end
10052		case uvec3_to_int
10053			expect compile_fail
10054			version 320 es
10055			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10056			values
10057			{
10058				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
10059				output int out0 = [ 2 | 2 | 2 ];
10060			}
10061
10062			both ""
10063				#version 320 es
10064				precision highp float;
10065				${DECLARATIONS}
10066
10067				void main()
10068				{
10069					${SETUP}
10070					out0 = in0 + 2;
10071					${OUTPUT}
10072				}
10073			""
10074		end
10075		case uvec3_to_ivec2
10076			expect compile_fail
10077			version 320 es
10078			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10079			values
10080			{
10081				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
10082				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
10083			}
10084
10085			both ""
10086				#version 320 es
10087				precision highp float;
10088				${DECLARATIONS}
10089
10090				void main()
10091				{
10092					${SETUP}
10093					out0 = in0 + ivec2(1, 2);
10094					${OUTPUT}
10095				}
10096			""
10097		end
10098		case uvec3_to_uvec2
10099			expect compile_fail
10100			version 320 es
10101			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10102			values
10103			{
10104				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
10105				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
10106			}
10107
10108			both ""
10109				#version 320 es
10110				precision highp float;
10111				${DECLARATIONS}
10112
10113				void main()
10114				{
10115					${SETUP}
10116					out0 = in0 + ivec2(2, 3);
10117					${OUTPUT}
10118				}
10119			""
10120		end
10121		case uvec3_to_ivec3
10122			expect compile_fail
10123			version 320 es
10124			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10125			values
10126			{
10127				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
10128				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
10129			}
10130
10131			both ""
10132				#version 320 es
10133				precision highp float;
10134				${DECLARATIONS}
10135
10136				void main()
10137				{
10138					${SETUP}
10139					out0 = in0 + ivec3(1, 2, 3);
10140					${OUTPUT}
10141				}
10142			""
10143		end
10144		case uvec3_to_ivec4
10145			expect compile_fail
10146			version 320 es
10147			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10148			values
10149			{
10150				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
10151				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
10152			}
10153
10154			both ""
10155				#version 320 es
10156				precision highp float;
10157				${DECLARATIONS}
10158
10159				void main()
10160				{
10161					${SETUP}
10162					out0 = in0 + ivec4(1, 2, 3, 4);
10163					${OUTPUT}
10164				}
10165			""
10166		end
10167		case uvec3_to_uvec4
10168			expect compile_fail
10169			version 320 es
10170			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10171			values
10172			{
10173				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
10174				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
10175			}
10176
10177			both ""
10178				#version 320 es
10179				precision highp float;
10180				${DECLARATIONS}
10181
10182				void main()
10183				{
10184					${SETUP}
10185					out0 = in0 + ivec4(2, 3, 5, 8);
10186					${OUTPUT}
10187				}
10188			""
10189		end
10190		case uvec3_to_vec2
10191			expect compile_fail
10192			version 320 es
10193			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10194			values
10195			{
10196				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
10197				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
10198			}
10199
10200			both ""
10201				#version 320 es
10202				precision highp float;
10203				${DECLARATIONS}
10204
10205				void main()
10206				{
10207					${SETUP}
10208					out0 = in0 + vec2(1.0, 2.0);
10209					${OUTPUT}
10210				}
10211			""
10212		end
10213		case uvec3_to_vec4
10214			expect compile_fail
10215			version 320 es
10216			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10217			values
10218			{
10219				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
10220				output vec4 out0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) ];
10221			}
10222
10223			both ""
10224				#version 320 es
10225				precision highp float;
10226				${DECLARATIONS}
10227
10228				void main()
10229				{
10230					${SETUP}
10231					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
10232					${OUTPUT}
10233				}
10234			""
10235		end
10236		case ivec4_to_uint
10237			expect compile_fail
10238			version 320 es
10239			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10240			values
10241			{
10242				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
10243				output uint out0 = [ 1 | 1 | 1 ];
10244			}
10245
10246			both ""
10247				#version 320 es
10248				precision highp float;
10249				${DECLARATIONS}
10250
10251				void main()
10252				{
10253					${SETUP}
10254					out0 = in0 + 1;
10255					${OUTPUT}
10256				}
10257			""
10258		end
10259		case ivec4_to_ivec2
10260			expect compile_fail
10261			version 320 es
10262			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10263			values
10264			{
10265				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
10266				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
10267			}
10268
10269			both ""
10270				#version 320 es
10271				precision highp float;
10272				${DECLARATIONS}
10273
10274				void main()
10275				{
10276					${SETUP}
10277					out0 = in0 + ivec2(1, 2);
10278					${OUTPUT}
10279				}
10280			""
10281		end
10282		case ivec4_to_uvec2
10283			expect compile_fail
10284			version 320 es
10285			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10286			values
10287			{
10288				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
10289				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
10290			}
10291
10292			both ""
10293				#version 320 es
10294				precision highp float;
10295				${DECLARATIONS}
10296
10297				void main()
10298				{
10299					${SETUP}
10300					out0 = in0 + ivec2(2, 3);
10301					${OUTPUT}
10302				}
10303			""
10304		end
10305		case ivec4_to_ivec3
10306			expect compile_fail
10307			version 320 es
10308			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10309			values
10310			{
10311				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
10312				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
10313			}
10314
10315			both ""
10316				#version 320 es
10317				precision highp float;
10318				${DECLARATIONS}
10319
10320				void main()
10321				{
10322					${SETUP}
10323					out0 = in0 + ivec3(1, 2, 3);
10324					${OUTPUT}
10325				}
10326			""
10327		end
10328		case ivec4_to_uvec3
10329			expect compile_fail
10330			version 320 es
10331			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10332			values
10333			{
10334				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
10335				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
10336			}
10337
10338			both ""
10339				#version 320 es
10340				precision highp float;
10341				${DECLARATIONS}
10342
10343				void main()
10344				{
10345					${SETUP}
10346					out0 = in0 + ivec3(2, 3, 5);
10347					${OUTPUT}
10348				}
10349			""
10350		end
10351		case ivec4_to_vec2
10352			expect compile_fail
10353			version 320 es
10354			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10355			values
10356			{
10357				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
10358				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
10359			}
10360
10361			both ""
10362				#version 320 es
10363				precision highp float;
10364				${DECLARATIONS}
10365
10366				void main()
10367				{
10368					${SETUP}
10369					out0 = in0 + vec2(1.0, 2.0);
10370					${OUTPUT}
10371				}
10372			""
10373		end
10374		case ivec4_to_vec3
10375			expect compile_fail
10376			version 320 es
10377			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10378			values
10379			{
10380				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
10381				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
10382			}
10383
10384			both ""
10385				#version 320 es
10386				precision highp float;
10387				${DECLARATIONS}
10388
10389				void main()
10390				{
10391					${SETUP}
10392					out0 = in0 + vec3(1.0, 2.0, 3.0);
10393					${OUTPUT}
10394				}
10395			""
10396		end
10397		case uvec4_to_int
10398			expect compile_fail
10399			version 320 es
10400			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10401			values
10402			{
10403				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
10404				output int out0 = [ 2 | 2 | 2 ];
10405			}
10406
10407			both ""
10408				#version 320 es
10409				precision highp float;
10410				${DECLARATIONS}
10411
10412				void main()
10413				{
10414					${SETUP}
10415					out0 = in0 + 2;
10416					${OUTPUT}
10417				}
10418			""
10419		end
10420		case uvec4_to_ivec2
10421			expect compile_fail
10422			version 320 es
10423			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10424			values
10425			{
10426				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
10427				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
10428			}
10429
10430			both ""
10431				#version 320 es
10432				precision highp float;
10433				${DECLARATIONS}
10434
10435				void main()
10436				{
10437					${SETUP}
10438					out0 = in0 + ivec2(1, 2);
10439					${OUTPUT}
10440				}
10441			""
10442		end
10443		case uvec4_to_uvec2
10444			expect compile_fail
10445			version 320 es
10446			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10447			values
10448			{
10449				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
10450				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
10451			}
10452
10453			both ""
10454				#version 320 es
10455				precision highp float;
10456				${DECLARATIONS}
10457
10458				void main()
10459				{
10460					${SETUP}
10461					out0 = in0 + ivec2(2, 3);
10462					${OUTPUT}
10463				}
10464			""
10465		end
10466		case uvec4_to_ivec3
10467			expect compile_fail
10468			version 320 es
10469			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10470			values
10471			{
10472				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
10473				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
10474			}
10475
10476			both ""
10477				#version 320 es
10478				precision highp float;
10479				${DECLARATIONS}
10480
10481				void main()
10482				{
10483					${SETUP}
10484					out0 = in0 + ivec3(1, 2, 3);
10485					${OUTPUT}
10486				}
10487			""
10488		end
10489		case uvec4_to_uvec3
10490			expect compile_fail
10491			version 320 es
10492			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10493			values
10494			{
10495				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
10496				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
10497			}
10498
10499			both ""
10500				#version 320 es
10501				precision highp float;
10502				${DECLARATIONS}
10503
10504				void main()
10505				{
10506					${SETUP}
10507					out0 = in0 + ivec3(2, 3, 5);
10508					${OUTPUT}
10509				}
10510			""
10511		end
10512		case uvec4_to_ivec4
10513			expect compile_fail
10514			version 320 es
10515			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10516			values
10517			{
10518				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
10519				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
10520			}
10521
10522			both ""
10523				#version 320 es
10524				precision highp float;
10525				${DECLARATIONS}
10526
10527				void main()
10528				{
10529					${SETUP}
10530					out0 = in0 + ivec4(1, 2, 3, 4);
10531					${OUTPUT}
10532				}
10533			""
10534		end
10535		case uvec4_to_vec2
10536			expect compile_fail
10537			version 320 es
10538			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10539			values
10540			{
10541				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
10542				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
10543			}
10544
10545			both ""
10546				#version 320 es
10547				precision highp float;
10548				${DECLARATIONS}
10549
10550				void main()
10551				{
10552					${SETUP}
10553					out0 = in0 + vec2(1.0, 2.0);
10554					${OUTPUT}
10555				}
10556			""
10557		end
10558		case uvec4_to_vec3
10559			expect compile_fail
10560			version 320 es
10561			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10562			values
10563			{
10564				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
10565				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
10566			}
10567
10568			both ""
10569				#version 320 es
10570				precision highp float;
10571				${DECLARATIONS}
10572
10573				void main()
10574				{
10575					${SETUP}
10576					out0 = in0 + vec3(1.0, 2.0, 3.0);
10577					${OUTPUT}
10578				}
10579			""
10580		end
10581		case float_to_int
10582			expect compile_fail
10583			version 320 es
10584			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10585			values
10586			{
10587				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
10588				output int out0 = [ 2 | 2 | 2 | 2 | 2 ];
10589			}
10590
10591			both ""
10592				#version 320 es
10593				precision highp float;
10594				${DECLARATIONS}
10595
10596				void main()
10597				{
10598					${SETUP}
10599					out0 = in0 + 2;
10600					${OUTPUT}
10601				}
10602			""
10603		end
10604		case float_to_uint
10605			expect compile_fail
10606			version 320 es
10607			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10608			values
10609			{
10610				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
10611				output uint out0 = [ 1 | 1 | 1 | 1 | 1 ];
10612			}
10613
10614			both ""
10615				#version 320 es
10616				precision highp float;
10617				${DECLARATIONS}
10618
10619				void main()
10620				{
10621					${SETUP}
10622					out0 = in0 + 1;
10623					${OUTPUT}
10624				}
10625			""
10626		end
10627		case float_to_ivec2
10628			expect compile_fail
10629			version 320 es
10630			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10631			values
10632			{
10633				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
10634				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
10635			}
10636
10637			both ""
10638				#version 320 es
10639				precision highp float;
10640				${DECLARATIONS}
10641
10642				void main()
10643				{
10644					${SETUP}
10645					out0 = in0 + ivec2(1, 2);
10646					${OUTPUT}
10647				}
10648			""
10649		end
10650		case float_to_uvec2
10651			expect compile_fail
10652			version 320 es
10653			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10654			values
10655			{
10656				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
10657				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
10658			}
10659
10660			both ""
10661				#version 320 es
10662				precision highp float;
10663				${DECLARATIONS}
10664
10665				void main()
10666				{
10667					${SETUP}
10668					out0 = in0 + ivec2(2, 3);
10669					${OUTPUT}
10670				}
10671			""
10672		end
10673		case float_to_ivec3
10674			expect compile_fail
10675			version 320 es
10676			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10677			values
10678			{
10679				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
10680				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
10681			}
10682
10683			both ""
10684				#version 320 es
10685				precision highp float;
10686				${DECLARATIONS}
10687
10688				void main()
10689				{
10690					${SETUP}
10691					out0 = in0 + ivec3(1, 2, 3);
10692					${OUTPUT}
10693				}
10694			""
10695		end
10696		case float_to_uvec3
10697			expect compile_fail
10698			version 320 es
10699			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10700			values
10701			{
10702				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
10703				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
10704			}
10705
10706			both ""
10707				#version 320 es
10708				precision highp float;
10709				${DECLARATIONS}
10710
10711				void main()
10712				{
10713					${SETUP}
10714					out0 = in0 + ivec3(2, 3, 5);
10715					${OUTPUT}
10716				}
10717			""
10718		end
10719		case float_to_ivec4
10720			expect compile_fail
10721			version 320 es
10722			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10723			values
10724			{
10725				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
10726				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
10727			}
10728
10729			both ""
10730				#version 320 es
10731				precision highp float;
10732				${DECLARATIONS}
10733
10734				void main()
10735				{
10736					${SETUP}
10737					out0 = in0 + ivec4(1, 2, 3, 4);
10738					${OUTPUT}
10739				}
10740			""
10741		end
10742		case float_to_uvec4
10743			expect compile_fail
10744			version 320 es
10745			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10746			values
10747			{
10748				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
10749				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
10750			}
10751
10752			both ""
10753				#version 320 es
10754				precision highp float;
10755				${DECLARATIONS}
10756
10757				void main()
10758				{
10759					${SETUP}
10760					out0 = in0 + ivec4(2, 3, 5, 8);
10761					${OUTPUT}
10762				}
10763			""
10764		end
10765		case vec2_to_int
10766			expect compile_fail
10767			version 320 es
10768			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10769			values
10770			{
10771				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
10772				output int out0 = [ 2 | 2 | 2 ];
10773			}
10774
10775			both ""
10776				#version 320 es
10777				precision highp float;
10778				${DECLARATIONS}
10779
10780				void main()
10781				{
10782					${SETUP}
10783					out0 = in0 + 2;
10784					${OUTPUT}
10785				}
10786			""
10787		end
10788		case vec2_to_uint
10789			expect compile_fail
10790			version 320 es
10791			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10792			values
10793			{
10794				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
10795				output uint out0 = [ 1 | 1 | 1 ];
10796			}
10797
10798			both ""
10799				#version 320 es
10800				precision highp float;
10801				${DECLARATIONS}
10802
10803				void main()
10804				{
10805					${SETUP}
10806					out0 = in0 + 1;
10807					${OUTPUT}
10808				}
10809			""
10810		end
10811		case vec2_to_ivec2
10812			expect compile_fail
10813			version 320 es
10814			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10815			values
10816			{
10817				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
10818				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
10819			}
10820
10821			both ""
10822				#version 320 es
10823				precision highp float;
10824				${DECLARATIONS}
10825
10826				void main()
10827				{
10828					${SETUP}
10829					out0 = in0 + ivec2(1, 2);
10830					${OUTPUT}
10831				}
10832			""
10833		end
10834		case vec2_to_uvec2
10835			expect compile_fail
10836			version 320 es
10837			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10838			values
10839			{
10840				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
10841				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
10842			}
10843
10844			both ""
10845				#version 320 es
10846				precision highp float;
10847				${DECLARATIONS}
10848
10849				void main()
10850				{
10851					${SETUP}
10852					out0 = in0 + ivec2(2, 3);
10853					${OUTPUT}
10854				}
10855			""
10856		end
10857		case vec2_to_ivec3
10858			expect compile_fail
10859			version 320 es
10860			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10861			values
10862			{
10863				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
10864				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
10865			}
10866
10867			both ""
10868				#version 320 es
10869				precision highp float;
10870				${DECLARATIONS}
10871
10872				void main()
10873				{
10874					${SETUP}
10875					out0 = in0 + ivec3(1, 2, 3);
10876					${OUTPUT}
10877				}
10878			""
10879		end
10880		case vec2_to_uvec3
10881			expect compile_fail
10882			version 320 es
10883			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10884			values
10885			{
10886				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
10887				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
10888			}
10889
10890			both ""
10891				#version 320 es
10892				precision highp float;
10893				${DECLARATIONS}
10894
10895				void main()
10896				{
10897					${SETUP}
10898					out0 = in0 + ivec3(2, 3, 5);
10899					${OUTPUT}
10900				}
10901			""
10902		end
10903		case vec2_to_ivec4
10904			expect compile_fail
10905			version 320 es
10906			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10907			values
10908			{
10909				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
10910				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
10911			}
10912
10913			both ""
10914				#version 320 es
10915				precision highp float;
10916				${DECLARATIONS}
10917
10918				void main()
10919				{
10920					${SETUP}
10921					out0 = in0 + ivec4(1, 2, 3, 4);
10922					${OUTPUT}
10923				}
10924			""
10925		end
10926		case vec2_to_uvec4
10927			expect compile_fail
10928			version 320 es
10929			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10930			values
10931			{
10932				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
10933				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
10934			}
10935
10936			both ""
10937				#version 320 es
10938				precision highp float;
10939				${DECLARATIONS}
10940
10941				void main()
10942				{
10943					${SETUP}
10944					out0 = in0 + ivec4(2, 3, 5, 8);
10945					${OUTPUT}
10946				}
10947			""
10948		end
10949		case vec2_to_vec3
10950			expect compile_fail
10951			version 320 es
10952			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10953			values
10954			{
10955				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
10956				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
10957			}
10958
10959			both ""
10960				#version 320 es
10961				precision highp float;
10962				${DECLARATIONS}
10963
10964				void main()
10965				{
10966					${SETUP}
10967					out0 = in0 + vec3(1.0, 2.0, 3.0);
10968					${OUTPUT}
10969				}
10970			""
10971		end
10972		case vec2_to_vec4
10973			expect compile_fail
10974			version 320 es
10975			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10976			values
10977			{
10978				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
10979				output vec4 out0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) ];
10980			}
10981
10982			both ""
10983				#version 320 es
10984				precision highp float;
10985				${DECLARATIONS}
10986
10987				void main()
10988				{
10989					${SETUP}
10990					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
10991					${OUTPUT}
10992				}
10993			""
10994		end
10995		case vec3_to_int
10996			expect compile_fail
10997			version 320 es
10998			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
10999			values
11000			{
11001				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
11002				output int out0 = [ 2 | 2 | 2 ];
11003			}
11004
11005			both ""
11006				#version 320 es
11007				precision highp float;
11008				${DECLARATIONS}
11009
11010				void main()
11011				{
11012					${SETUP}
11013					out0 = in0 + 2;
11014					${OUTPUT}
11015				}
11016			""
11017		end
11018		case vec3_to_uint
11019			expect compile_fail
11020			version 320 es
11021			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11022			values
11023			{
11024				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
11025				output uint out0 = [ 1 | 1 | 1 ];
11026			}
11027
11028			both ""
11029				#version 320 es
11030				precision highp float;
11031				${DECLARATIONS}
11032
11033				void main()
11034				{
11035					${SETUP}
11036					out0 = in0 + 1;
11037					${OUTPUT}
11038				}
11039			""
11040		end
11041		case vec3_to_ivec2
11042			expect compile_fail
11043			version 320 es
11044			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11045			values
11046			{
11047				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
11048				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
11049			}
11050
11051			both ""
11052				#version 320 es
11053				precision highp float;
11054				${DECLARATIONS}
11055
11056				void main()
11057				{
11058					${SETUP}
11059					out0 = in0 + ivec2(1, 2);
11060					${OUTPUT}
11061				}
11062			""
11063		end
11064		case vec3_to_uvec2
11065			expect compile_fail
11066			version 320 es
11067			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11068			values
11069			{
11070				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
11071				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
11072			}
11073
11074			both ""
11075				#version 320 es
11076				precision highp float;
11077				${DECLARATIONS}
11078
11079				void main()
11080				{
11081					${SETUP}
11082					out0 = in0 + ivec2(2, 3);
11083					${OUTPUT}
11084				}
11085			""
11086		end
11087		case vec3_to_ivec3
11088			expect compile_fail
11089			version 320 es
11090			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11091			values
11092			{
11093				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
11094				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
11095			}
11096
11097			both ""
11098				#version 320 es
11099				precision highp float;
11100				${DECLARATIONS}
11101
11102				void main()
11103				{
11104					${SETUP}
11105					out0 = in0 + ivec3(1, 2, 3);
11106					${OUTPUT}
11107				}
11108			""
11109		end
11110		case vec3_to_uvec3
11111			expect compile_fail
11112			version 320 es
11113			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11114			values
11115			{
11116				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
11117				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
11118			}
11119
11120			both ""
11121				#version 320 es
11122				precision highp float;
11123				${DECLARATIONS}
11124
11125				void main()
11126				{
11127					${SETUP}
11128					out0 = in0 + ivec3(2, 3, 5);
11129					${OUTPUT}
11130				}
11131			""
11132		end
11133		case vec3_to_ivec4
11134			expect compile_fail
11135			version 320 es
11136			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11137			values
11138			{
11139				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
11140				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
11141			}
11142
11143			both ""
11144				#version 320 es
11145				precision highp float;
11146				${DECLARATIONS}
11147
11148				void main()
11149				{
11150					${SETUP}
11151					out0 = in0 + ivec4(1, 2, 3, 4);
11152					${OUTPUT}
11153				}
11154			""
11155		end
11156		case vec3_to_uvec4
11157			expect compile_fail
11158			version 320 es
11159			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11160			values
11161			{
11162				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
11163				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
11164			}
11165
11166			both ""
11167				#version 320 es
11168				precision highp float;
11169				${DECLARATIONS}
11170
11171				void main()
11172				{
11173					${SETUP}
11174					out0 = in0 + ivec4(2, 3, 5, 8);
11175					${OUTPUT}
11176				}
11177			""
11178		end
11179		case vec3_to_vec2
11180			expect compile_fail
11181			version 320 es
11182			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11183			values
11184			{
11185				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
11186				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
11187			}
11188
11189			both ""
11190				#version 320 es
11191				precision highp float;
11192				${DECLARATIONS}
11193
11194				void main()
11195				{
11196					${SETUP}
11197					out0 = in0 + vec2(1.0, 2.0);
11198					${OUTPUT}
11199				}
11200			""
11201		end
11202		case vec3_to_vec4
11203			expect compile_fail
11204			version 320 es
11205			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11206			values
11207			{
11208				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
11209				output vec4 out0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) | vec4(1.0, 2.0, 3.0, 4.0) ];
11210			}
11211
11212			both ""
11213				#version 320 es
11214				precision highp float;
11215				${DECLARATIONS}
11216
11217				void main()
11218				{
11219					${SETUP}
11220					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
11221					${OUTPUT}
11222				}
11223			""
11224		end
11225		case vec4_to_int
11226			expect compile_fail
11227			version 320 es
11228			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11229			values
11230			{
11231				input vec4 in0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(2.0, 1.0, 2.0, 6.0) | vec4(3.0, 7.0, 2.0, 5.0) ];
11232				output int out0 = [ 2 | 2 | 2 ];
11233			}
11234
11235			both ""
11236				#version 320 es
11237				precision highp float;
11238				${DECLARATIONS}
11239
11240				void main()
11241				{
11242					${SETUP}
11243					out0 = in0 + 2;
11244					${OUTPUT}
11245				}
11246			""
11247		end
11248		case vec4_to_uint
11249			expect compile_fail
11250			version 320 es
11251			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11252			values
11253			{
11254				input vec4 in0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(2.0, 1.0, 2.0, 6.0) | vec4(3.0, 7.0, 2.0, 5.0) ];
11255				output uint out0 = [ 1 | 1 | 1 ];
11256			}
11257
11258			both ""
11259				#version 320 es
11260				precision highp float;
11261				${DECLARATIONS}
11262
11263				void main()
11264				{
11265					${SETUP}
11266					out0 = in0 + 1;
11267					${OUTPUT}
11268				}
11269			""
11270		end
11271		case vec4_to_ivec2
11272			expect compile_fail
11273			version 320 es
11274			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11275			values
11276			{
11277				input vec4 in0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(2.0, 1.0, 2.0, 6.0) | vec4(3.0, 7.0, 2.0, 5.0) ];
11278				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
11279			}
11280
11281			both ""
11282				#version 320 es
11283				precision highp float;
11284				${DECLARATIONS}
11285
11286				void main()
11287				{
11288					${SETUP}
11289					out0 = in0 + ivec2(1, 2);
11290					${OUTPUT}
11291				}
11292			""
11293		end
11294		case vec4_to_uvec2
11295			expect compile_fail
11296			version 320 es
11297			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11298			values
11299			{
11300				input vec4 in0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(2.0, 1.0, 2.0, 6.0) | vec4(3.0, 7.0, 2.0, 5.0) ];
11301				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
11302			}
11303
11304			both ""
11305				#version 320 es
11306				precision highp float;
11307				${DECLARATIONS}
11308
11309				void main()
11310				{
11311					${SETUP}
11312					out0 = in0 + ivec2(2, 3);
11313					${OUTPUT}
11314				}
11315			""
11316		end
11317		case vec4_to_ivec3
11318			expect compile_fail
11319			version 320 es
11320			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11321			values
11322			{
11323				input vec4 in0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(2.0, 1.0, 2.0, 6.0) | vec4(3.0, 7.0, 2.0, 5.0) ];
11324				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
11325			}
11326
11327			both ""
11328				#version 320 es
11329				precision highp float;
11330				${DECLARATIONS}
11331
11332				void main()
11333				{
11334					${SETUP}
11335					out0 = in0 + ivec3(1, 2, 3);
11336					${OUTPUT}
11337				}
11338			""
11339		end
11340		case vec4_to_uvec3
11341			expect compile_fail
11342			version 320 es
11343			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11344			values
11345			{
11346				input vec4 in0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(2.0, 1.0, 2.0, 6.0) | vec4(3.0, 7.0, 2.0, 5.0) ];
11347				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
11348			}
11349
11350			both ""
11351				#version 320 es
11352				precision highp float;
11353				${DECLARATIONS}
11354
11355				void main()
11356				{
11357					${SETUP}
11358					out0 = in0 + ivec3(2, 3, 5);
11359					${OUTPUT}
11360				}
11361			""
11362		end
11363		case vec4_to_ivec4
11364			expect compile_fail
11365			version 320 es
11366			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11367			values
11368			{
11369				input vec4 in0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(2.0, 1.0, 2.0, 6.0) | vec4(3.0, 7.0, 2.0, 5.0) ];
11370				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
11371			}
11372
11373			both ""
11374				#version 320 es
11375				precision highp float;
11376				${DECLARATIONS}
11377
11378				void main()
11379				{
11380					${SETUP}
11381					out0 = in0 + ivec4(1, 2, 3, 4);
11382					${OUTPUT}
11383				}
11384			""
11385		end
11386		case vec4_to_uvec4
11387			expect compile_fail
11388			version 320 es
11389			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11390			values
11391			{
11392				input vec4 in0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(2.0, 1.0, 2.0, 6.0) | vec4(3.0, 7.0, 2.0, 5.0) ];
11393				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
11394			}
11395
11396			both ""
11397				#version 320 es
11398				precision highp float;
11399				${DECLARATIONS}
11400
11401				void main()
11402				{
11403					${SETUP}
11404					out0 = in0 + ivec4(2, 3, 5, 8);
11405					${OUTPUT}
11406				}
11407			""
11408		end
11409		case vec4_to_vec2
11410			expect compile_fail
11411			version 320 es
11412			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11413			values
11414			{
11415				input vec4 in0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(2.0, 1.0, 2.0, 6.0) | vec4(3.0, 7.0, 2.0, 5.0) ];
11416				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
11417			}
11418
11419			both ""
11420				#version 320 es
11421				precision highp float;
11422				${DECLARATIONS}
11423
11424				void main()
11425				{
11426					${SETUP}
11427					out0 = in0 + vec2(1.0, 2.0);
11428					${OUTPUT}
11429				}
11430			""
11431		end
11432		case vec4_to_vec3
11433			expect compile_fail
11434			version 320 es
11435			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11436			values
11437			{
11438				input vec4 in0 = [ vec4(1.0, 2.0, 3.0, 4.0) | vec4(2.0, 1.0, 2.0, 6.0) | vec4(3.0, 7.0, 2.0, 5.0) ];
11439				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
11440			}
11441
11442			both ""
11443				#version 320 es
11444				precision highp float;
11445				${DECLARATIONS}
11446
11447				void main()
11448				{
11449					${SETUP}
11450					out0 = in0 + vec3(1.0, 2.0, 3.0);
11451					${OUTPUT}
11452				}
11453			""
11454		end
11455
11456	end # variables
11457	group arrays "Arrays"
11458
11459		case int_to_float
11460			expect compile_fail
11461			version 320 es
11462			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11463			values {}
11464
11465			both ""
11466				#version 320 es
11467				precision highp float;
11468				${DECLARATIONS}
11469
11470				void main()
11471				{
11472					${SETUP}
11473					float a[] = int[] (2, 1, 1, 3, 5);
11474					${OUTPUT}
11475				}
11476			""
11477		end
11478		case int_to_uint
11479			expect compile_fail
11480			version 320 es
11481			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11482			values {}
11483
11484			both ""
11485				#version 320 es
11486				precision highp float;
11487				${DECLARATIONS}
11488
11489				void main()
11490				{
11491					${SETUP}
11492					uint a[] = int[] (2, 1, 1, 3, 5);
11493					${OUTPUT}
11494				}
11495			""
11496		end
11497		case uint_to_float
11498			expect compile_fail
11499			version 320 es
11500			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11501			values {}
11502
11503			both ""
11504				#version 320 es
11505				precision highp float;
11506				${DECLARATIONS}
11507
11508				void main()
11509				{
11510					${SETUP}
11511					float a[] = uint[] (1, 3, 4, 7, 11);
11512					${OUTPUT}
11513				}
11514			""
11515		end
11516		case ivec2_to_uvec2
11517			expect compile_fail
11518			version 320 es
11519			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11520			values {}
11521
11522			both ""
11523				#version 320 es
11524				precision highp float;
11525				${DECLARATIONS}
11526
11527				void main()
11528				{
11529					${SETUP}
11530					uvec2 a[] = ivec2[] (uvec2(1, 2), uvec2(2, 1), uvec2(3, 7));
11531					${OUTPUT}
11532				}
11533			""
11534		end
11535		case ivec2_to_vec2
11536			expect compile_fail
11537			version 320 es
11538			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11539			values {}
11540
11541			both ""
11542				#version 320 es
11543				precision highp float;
11544				${DECLARATIONS}
11545
11546				void main()
11547				{
11548					${SETUP}
11549					vec2 a[] = ivec2[] (vec2(1, 2), vec2(2, 1), vec2(3, 7));
11550					${OUTPUT}
11551				}
11552			""
11553		end
11554		case uvec2_to_vec2
11555			expect compile_fail
11556			version 320 es
11557			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11558			values {}
11559
11560			both ""
11561				#version 320 es
11562				precision highp float;
11563				${DECLARATIONS}
11564
11565				void main()
11566				{
11567					${SETUP}
11568					vec2 a[] = uvec2[] (vec2(2, 3), vec2(4, 6), vec2(1, 13));
11569					${OUTPUT}
11570				}
11571			""
11572		end
11573		case ivec3_to_uvec3
11574			expect compile_fail
11575			version 320 es
11576			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11577			values {}
11578
11579			both ""
11580				#version 320 es
11581				precision highp float;
11582				${DECLARATIONS}
11583
11584				void main()
11585				{
11586					${SETUP}
11587					uvec3 a[] = ivec3[] (uvec3(1, 2, 3), uvec3(2, 1, 2), uvec3(3, 7, 2));
11588					${OUTPUT}
11589				}
11590			""
11591		end
11592		case ivec3_to_vec3
11593			expect compile_fail
11594			version 320 es
11595			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11596			values {}
11597
11598			both ""
11599				#version 320 es
11600				precision highp float;
11601				${DECLARATIONS}
11602
11603				void main()
11604				{
11605					${SETUP}
11606					vec3 a[] = ivec3[] (vec3(1, 2, 3), vec3(2, 1, 2), vec3(3, 7, 2));
11607					${OUTPUT}
11608				}
11609			""
11610		end
11611		case uvec3_to_vec3
11612			expect compile_fail
11613			version 320 es
11614			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11615			values {}
11616
11617			both ""
11618				#version 320 es
11619				precision highp float;
11620				${DECLARATIONS}
11621
11622				void main()
11623				{
11624					${SETUP}
11625					vec3 a[] = uvec3[] (vec3(2, 3, 5), vec3(4, 6, 2), vec3(1, 13, 7));
11626					${OUTPUT}
11627				}
11628			""
11629		end
11630		case ivec4_to_uvec4
11631			expect compile_fail
11632			version 320 es
11633			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11634			values {}
11635
11636			both ""
11637				#version 320 es
11638				precision highp float;
11639				${DECLARATIONS}
11640
11641				void main()
11642				{
11643					${SETUP}
11644					uvec4 a[] = ivec4[] (uvec4(1, 2, 3, 4), uvec4(2, 1, 2, 6), uvec4(3, 7, 2, 5));
11645					${OUTPUT}
11646				}
11647			""
11648		end
11649		case ivec4_to_vec4
11650			expect compile_fail
11651			version 320 es
11652			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11653			values {}
11654
11655			both ""
11656				#version 320 es
11657				precision highp float;
11658				${DECLARATIONS}
11659
11660				void main()
11661				{
11662					${SETUP}
11663					vec4 a[] = ivec4[] (vec4(1, 2, 3, 4), vec4(2, 1, 2, 6), vec4(3, 7, 2, 5));
11664					${OUTPUT}
11665				}
11666			""
11667		end
11668		case uvec4_to_vec4
11669			expect compile_fail
11670			version 320 es
11671			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11672			values {}
11673
11674			both ""
11675				#version 320 es
11676				precision highp float;
11677				${DECLARATIONS}
11678
11679				void main()
11680				{
11681					${SETUP}
11682					vec4 a[] = uvec4[] (vec4(2, 3, 5, 8), vec4(4, 6, 2, 9), vec4(1, 13, 7, 4));
11683					${OUTPUT}
11684				}
11685			""
11686		end
11687
11688	end # arrays
11689	group structs "Structs"
11690
11691		case int_to_float
11692			expect compile_fail
11693			version 320 es
11694			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11695			values {}
11696
11697			both ""
11698				#version 320 es
11699				precision highp float;
11700				${DECLARATIONS}
11701
11702				void main()
11703				{
11704					${SETUP}
11705					struct { int value; } a;
11706					struct { float value; } b;
11707					a = 2;
11708					b = a;
11709					${OUTPUT}
11710				}
11711			""
11712		end
11713		case int_to_uint
11714			expect compile_fail
11715			version 320 es
11716			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11717			values {}
11718
11719			both ""
11720				#version 320 es
11721				precision highp float;
11722				${DECLARATIONS}
11723
11724				void main()
11725				{
11726					${SETUP}
11727					struct { int value; } a;
11728					struct { uint value; } b;
11729					a = 2;
11730					b = a;
11731					${OUTPUT}
11732				}
11733			""
11734		end
11735		case uint_to_float
11736			expect compile_fail
11737			version 320 es
11738			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11739			values {}
11740
11741			both ""
11742				#version 320 es
11743				precision highp float;
11744				${DECLARATIONS}
11745
11746				void main()
11747				{
11748					${SETUP}
11749					struct { uint value; } a;
11750					struct { float value; } b;
11751					a = 1;
11752					b = a;
11753					${OUTPUT}
11754				}
11755			""
11756		end
11757		case ivec2_to_uvec2
11758			expect compile_fail
11759			version 320 es
11760			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11761			values {}
11762
11763			both ""
11764				#version 320 es
11765				precision highp float;
11766				${DECLARATIONS}
11767
11768				void main()
11769				{
11770					${SETUP}
11771					struct { ivec2 value; } a;
11772					struct { uvec2 value; } b;
11773					a = ivec2(1, 2);
11774					b = a;
11775					${OUTPUT}
11776				}
11777			""
11778		end
11779		case ivec2_to_vec2
11780			expect compile_fail
11781			version 320 es
11782			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11783			values {}
11784
11785			both ""
11786				#version 320 es
11787				precision highp float;
11788				${DECLARATIONS}
11789
11790				void main()
11791				{
11792					${SETUP}
11793					struct { ivec2 value; } a;
11794					struct { vec2 value; } b;
11795					a = ivec2(1, 2);
11796					b = a;
11797					${OUTPUT}
11798				}
11799			""
11800		end
11801		case uvec2_to_vec2
11802			expect compile_fail
11803			version 320 es
11804			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11805			values {}
11806
11807			both ""
11808				#version 320 es
11809				precision highp float;
11810				${DECLARATIONS}
11811
11812				void main()
11813				{
11814					${SETUP}
11815					struct { uvec2 value; } a;
11816					struct { vec2 value; } b;
11817					a = uvec2(2, 3);
11818					b = a;
11819					${OUTPUT}
11820				}
11821			""
11822		end
11823		case ivec3_to_uvec3
11824			expect compile_fail
11825			version 320 es
11826			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11827			values {}
11828
11829			both ""
11830				#version 320 es
11831				precision highp float;
11832				${DECLARATIONS}
11833
11834				void main()
11835				{
11836					${SETUP}
11837					struct { ivec3 value; } a;
11838					struct { uvec3 value; } b;
11839					a = ivec3(1, 2, 3);
11840					b = a;
11841					${OUTPUT}
11842				}
11843			""
11844		end
11845		case ivec3_to_vec3
11846			expect compile_fail
11847			version 320 es
11848			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11849			values {}
11850
11851			both ""
11852				#version 320 es
11853				precision highp float;
11854				${DECLARATIONS}
11855
11856				void main()
11857				{
11858					${SETUP}
11859					struct { ivec3 value; } a;
11860					struct { vec3 value; } b;
11861					a = ivec3(1, 2, 3);
11862					b = a;
11863					${OUTPUT}
11864				}
11865			""
11866		end
11867		case uvec3_to_vec3
11868			expect compile_fail
11869			version 320 es
11870			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11871			values {}
11872
11873			both ""
11874				#version 320 es
11875				precision highp float;
11876				${DECLARATIONS}
11877
11878				void main()
11879				{
11880					${SETUP}
11881					struct { uvec3 value; } a;
11882					struct { vec3 value; } b;
11883					a = uvec3(2, 3, 5);
11884					b = a;
11885					${OUTPUT}
11886				}
11887			""
11888		end
11889		case ivec4_to_uvec4
11890			expect compile_fail
11891			version 320 es
11892			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11893			values {}
11894
11895			both ""
11896				#version 320 es
11897				precision highp float;
11898				${DECLARATIONS}
11899
11900				void main()
11901				{
11902					${SETUP}
11903					struct { ivec4 value; } a;
11904					struct { uvec4 value; } b;
11905					a = ivec4(1, 2, 3, 4);
11906					b = a;
11907					${OUTPUT}
11908				}
11909			""
11910		end
11911		case ivec4_to_vec4
11912			expect compile_fail
11913			version 320 es
11914			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11915			values {}
11916
11917			both ""
11918				#version 320 es
11919				precision highp float;
11920				${DECLARATIONS}
11921
11922				void main()
11923				{
11924					${SETUP}
11925					struct { ivec4 value; } a;
11926					struct { vec4 value; } b;
11927					a = ivec4(1, 2, 3, 4);
11928					b = a;
11929					${OUTPUT}
11930				}
11931			""
11932		end
11933		case uvec4_to_vec4
11934			expect compile_fail
11935			version 320 es
11936			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
11937			values {}
11938
11939			both ""
11940				#version 320 es
11941				precision highp float;
11942				${DECLARATIONS}
11943
11944				void main()
11945				{
11946					${SETUP}
11947					struct { uvec4 value; } a;
11948					struct { vec4 value; } b;
11949					a = uvec4(2, 3, 5, 8);
11950					b = a;
11951					${OUTPUT}
11952				}
11953			""
11954		end
11955
11956	end # structs
11957
11958end # invalid
11959