Home | History | Annotate | Download | only in shaders
      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 
      4 group 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 
   3435 end # arithmetic
   3436 group comparisons "Comparisons"
   3437 
   3438 	group input_before_literal "Input before literal"
   3439 
   3440 		group equal "Equal"
   3441 
   3442 			case int_to_float
   3443 				version 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 
   5079 end # comparisons
   5080 group array_subscripts "Array subscripts"
   5081 
   5082 	group input_before_subscript "Input before subscript"
   5083 
   5084 		case int_to_float
   5085 			version 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 
   6057 end # array_subscripts
   6058 group functions "Function calls"
   6059 
   6060 	case int_to_float
   6061 		version 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 
   6385 end # functions
   6386 group struct_fields "Struct field selectors"
   6387 
   6388 	group input_before_field "Input before field"
   6389 
   6390 		case int_to_float
   6391 			version 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 
   7573 end # struct_fields
   7574 group 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 
   9449 end # parenthesized_expressions
   9450 group invalid "Invalid conversions"
   9451 
   9452 	group variables "Single variables"
   9453 
   9454 		case uint_to_int
   9455 			expect compile_fail
   9456 			version 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 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 310 es
   11462 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11463 			values {}
   11464 
   11465 			both ""
   11466 				#version 310 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 310 es
   11481 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11482 			values {}
   11483 
   11484 			both ""
   11485 				#version 310 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 310 es
   11500 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11501 			values {}
   11502 
   11503 			both ""
   11504 				#version 310 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 310 es
   11519 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11520 			values {}
   11521 
   11522 			both ""
   11523 				#version 310 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 310 es
   11538 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11539 			values {}
   11540 
   11541 			both ""
   11542 				#version 310 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 310 es
   11557 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11558 			values {}
   11559 
   11560 			both ""
   11561 				#version 310 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 310 es
   11576 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11577 			values {}
   11578 
   11579 			both ""
   11580 				#version 310 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 310 es
   11595 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11596 			values {}
   11597 
   11598 			both ""
   11599 				#version 310 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 310 es
   11614 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11615 			values {}
   11616 
   11617 			both ""
   11618 				#version 310 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 310 es
   11633 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11634 			values {}
   11635 
   11636 			both ""
   11637 				#version 310 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 310 es
   11652 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11653 			values {}
   11654 
   11655 			both ""
   11656 				#version 310 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 310 es
   11671 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11672 			values {}
   11673 
   11674 			both ""
   11675 				#version 310 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 310 es
   11694 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11695 			values {}
   11696 
   11697 			both ""
   11698 				#version 310 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 310 es
   11716 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11717 			values {}
   11718 
   11719 			both ""
   11720 				#version 310 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 310 es
   11738 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11739 			values {}
   11740 
   11741 			both ""
   11742 				#version 310 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 310 es
   11760 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11761 			values {}
   11762 
   11763 			both ""
   11764 				#version 310 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 310 es
   11782 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11783 			values {}
   11784 
   11785 			both ""
   11786 				#version 310 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 310 es
   11804 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11805 			values {}
   11806 
   11807 			both ""
   11808 				#version 310 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 310 es
   11826 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11827 			values {}
   11828 
   11829 			both ""
   11830 				#version 310 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 310 es
   11848 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11849 			values {}
   11850 
   11851 			both ""
   11852 				#version 310 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 310 es
   11870 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11871 			values {}
   11872 
   11873 			both ""
   11874 				#version 310 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 310 es
   11892 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11893 			values {}
   11894 
   11895 			both ""
   11896 				#version 310 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 310 es
   11914 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11915 			values {}
   11916 
   11917 			both ""
   11918 				#version 310 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 310 es
   11936 			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
   11937 			values {}
   11938 
   11939 			both ""
   11940 				#version 310 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 
   11958 end # invalid
   11959