xref: /aosp_15_r20/external/deqp/data/gles31/shaders/es32/implicit_conversions.test (revision 35238bce31c2a825756842865a792f8cf7f89930)
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