# WARNING: This file is auto-generated. Do NOT modify it manually, but rather
# modify the generating script file. Otherwise changes will be lost!

group arithmetic "Arithmetic operations"

	group input_before_literal "Input before literal"

		group add "Addition"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 4.0 | 3.0 | 3.0 | 5.0 | 7.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + 2.0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uint out0 = [ 4 | 3 | 3 | 5 | 7 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + 2;
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec2 out0 = [ uvec2(3, 4) | uvec2(2, 3) | uvec2(2, 3) | uvec2(4, 5) | uvec2(6, 7) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + uvec2(1, 2);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec3 out0 = [ uvec3(3, 4, 5) | uvec3(2, 3, 4) | uvec3(2, 3, 4) | uvec3(4, 5, 6) | uvec3(6, 7, 8) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + uvec3(1, 2, 3);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + uvec4(1, 2, 3, 4);
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ 3.0 | 5.0 | 6.0 | 9.0 | 13.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + 2.0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output uvec2 out0 = [ uvec2(2, 4) | uvec2(3, 3) | uvec2(4, 9) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + uvec2(1, 2);
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(2.0, 4.0) | vec2(3.0, 3.0) | vec2(4.0, 9.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(3.0, 5.0) | vec2(5.0, 8.0) | vec2(2.0, 15.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output uvec3 out0 = [ uvec3(2, 4, 6) | uvec3(3, 3, 5) | uvec3(4, 9, 5) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + uvec3(1, 2, 3);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(3.0, 3.0, 5.0) | vec3(4.0, 9.0, 5.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(3.0, 5.0, 8.0) | vec3(5.0, 8.0, 5.0) | vec3(2.0, 15.0, 10.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output uvec4 out0 = [ uvec4(2, 4, 6, 8) | uvec4(3, 3, 5, 10) | uvec4(4, 9, 5, 9) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + uvec4(1, 2, 3, 4);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end

		end # add
		group sub "Subtraction"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 0.0 | -1.0 | -1.0 | 1.0 | 3.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - 2.0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ -1.0 | 1.0 | 2.0 | 5.0 | 9.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - 2.0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(0.0, 0.0) | vec2(1.0, -1.0) | vec2(2.0, 5.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(1.0, 1.0) | vec2(3.0, 4.0) | vec2(0.0, 11.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(0.0, 0.0, 0.0) | vec3(1.0, -1.0, -1.0) | vec3(2.0, 5.0, -1.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(1.0, 1.0, 2.0) | vec3(3.0, 4.0, -1.0) | vec3(0.0, 11.0, 4.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 - vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end

		end # sub
		group mul "Multiplication"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 4.0 | 2.0 | 2.0 | 6.0 | 10.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * 2.0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uint out0 = [ 4 | 2 | 2 | 6 | 10 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * 2;
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec2 out0 = [ uvec2(2, 4) | uvec2(1, 2) | uvec2(1, 2) | uvec2(3, 6) | uvec2(5, 10) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * uvec2(1, 2);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec3 out0 = [ uvec3(2, 4, 6) | uvec3(1, 2, 3) | uvec3(1, 2, 3) | uvec3(3, 6, 9) | uvec3(5, 10, 15) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * uvec3(1, 2, 3);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * uvec4(1, 2, 3, 4);
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ 2.0 | 6.0 | 8.0 | 14.0 | 22.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * 2.0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output uvec2 out0 = [ uvec2(1, 4) | uvec2(2, 2) | uvec2(3, 14) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * uvec2(1, 2);
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(1.0, 4.0) | vec2(2.0, 2.0) | vec2(3.0, 14.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(2.0, 6.0) | vec2(4.0, 12.0) | vec2(1.0, 26.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output uvec3 out0 = [ uvec3(1, 4, 9) | uvec3(2, 2, 6) | uvec3(3, 14, 6) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * uvec3(1, 2, 3);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(1.0, 4.0, 9.0) | vec3(2.0, 2.0, 6.0) | vec3(3.0, 14.0, 6.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(2.0, 6.0, 15.0) | vec3(4.0, 12.0, 6.0) | vec3(1.0, 26.0, 21.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output uvec4 out0 = [ uvec4(1, 4, 9, 16) | uvec4(2, 2, 6, 24) | uvec4(3, 14, 6, 20) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * uvec4(1, 2, 3, 4);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end

		end # mul
		group div "Division"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 1.0 | 0.5 | 0.5 | 1.5 | 2.5 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / 2.0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uint out0 = [ 1 | 0 | 0 | 1 | 2 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / 2;
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec2 out0 = [ uvec2(2, 1) | uvec2(1, 0) | uvec2(1, 0) | uvec2(3, 1) | uvec2(5, 2) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / uvec2(1, 2);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec3 out0 = [ uvec3(2, 1, 0) | uvec3(1, 0, 0) | uvec3(1, 0, 0) | uvec3(3, 1, 1) | uvec3(5, 2, 1) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / uvec3(1, 2, 3);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / uvec4(1, 2, 3, 4);
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ 0.5 | 1.5 | 2.0 | 3.5 | 5.5 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / 2.0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output uvec2 out0 = [ uvec2(1, 1) | uvec2(2, 0) | uvec2(3, 3) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / uvec2(1, 2);
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(1.0, 1.0) | vec2(2.0, 0.5) | vec2(3.0, 3.5) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(2.0, 1.5) | vec2(4.0, 3.0) | vec2(1.0, 6.5) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output uvec3 out0 = [ uvec3(1, 1, 1) | uvec3(2, 0, 0) | uvec3(3, 3, 0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / uvec3(1, 2, 3);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(1.0, 1.0, 1.0) | vec3(2.0, 0.5, 0.666666666667) | vec3(3.0, 3.5, 0.666666666667) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(2.0, 1.5, 1.66666666667) | vec3(4.0, 3.0, 0.666666666667) | vec3(1.0, 6.5, 2.33333333333) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output uvec4 out0 = [ uvec4(1, 1, 1, 1) | uvec4(2, 0, 0, 1) | uvec4(3, 3, 0, 1) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / uvec4(1, 2, 3, 4);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 / vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end

		end # div

	end # input_before_literal
	group literal_before_input "Literal before input"

		group add "Addition"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 4.0 | 3.0 | 3.0 | 5.0 | 7.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 + in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uint out0 = [ 4 | 3 | 3 | 5 | 7 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2 + in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) + in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) + in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) + in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec2 out0 = [ uvec2(3, 4) | uvec2(2, 3) | uvec2(2, 3) | uvec2(4, 5) | uvec2(6, 7) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec2(1, 2) + in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec3 out0 = [ uvec3(3, 4, 5) | uvec3(2, 3, 4) | uvec3(2, 3, 4) | uvec3(4, 5, 6) | uvec3(6, 7, 8) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec3(1, 2, 3) + in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec4(1, 2, 3, 4) + in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ 3.0 | 5.0 | 6.0 | 9.0 | 13.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 + in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) + in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) + in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) + in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output uvec2 out0 = [ uvec2(2, 4) | uvec2(3, 3) | uvec2(4, 9) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec2(1, 2) + in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(2.0, 4.0) | vec2(3.0, 3.0) | vec2(4.0, 9.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) + in0;
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(3.0, 5.0) | vec2(5.0, 8.0) | vec2(2.0, 15.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) + in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output uvec3 out0 = [ uvec3(2, 4, 6) | uvec3(3, 3, 5) | uvec3(4, 9, 5) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec3(1, 2, 3) + in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(3.0, 3.0, 5.0) | vec3(4.0, 9.0, 5.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) + in0;
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(3.0, 5.0, 8.0) | vec3(5.0, 8.0, 5.0) | vec3(2.0, 15.0, 10.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) + in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output uvec4 out0 = [ uvec4(2, 4, 6, 8) | uvec4(3, 3, 5, 10) | uvec4(4, 9, 5, 9) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec4(1, 2, 3, 4) + in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) + in0;
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) + in0;
						${OUTPUT}
					}
				""
			end

		end # add
		group sub "Subtraction"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 0.0 | 1.0 | 1.0 | -1.0 | -3.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 - in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) - in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) - in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) - in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ 1.0 | -1.0 | -2.0 | -5.0 | -9.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 - in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) - in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) - in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) - in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(0.0, 0.0) | vec2(-1.0, 1.0) | vec2(-2.0, -5.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) - in0;
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(-1.0, -1.0) | vec2(-3.0, -4.0) | vec2(0.0, -11.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) - in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(0.0, 0.0, 0.0) | vec3(-1.0, 1.0, 1.0) | vec3(-2.0, -5.0, 1.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) - in0;
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(-1.0, -1.0, -2.0) | vec3(-3.0, -4.0, 1.0) | vec3(0.0, -11.0, -4.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) - in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) - in0;
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) - in0;
						${OUTPUT}
					}
				""
			end

		end # sub
		group mul "Multiplication"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 4.0 | 2.0 | 2.0 | 6.0 | 10.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uint out0 = [ 4 | 2 | 2 | 6 | 10 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2 * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec2 out0 = [ uvec2(2, 4) | uvec2(1, 2) | uvec2(1, 2) | uvec2(3, 6) | uvec2(5, 10) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec2(1, 2) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec3 out0 = [ uvec3(2, 4, 6) | uvec3(1, 2, 3) | uvec3(1, 2, 3) | uvec3(3, 6, 9) | uvec3(5, 10, 15) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec3(1, 2, 3) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec4(1, 2, 3, 4) * in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ 2.0 | 6.0 | 8.0 | 14.0 | 22.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 * in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) * in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) * in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output uvec2 out0 = [ uvec2(1, 4) | uvec2(2, 2) | uvec2(3, 14) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec2(1, 2) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(1.0, 4.0) | vec2(2.0, 2.0) | vec2(3.0, 14.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) * in0;
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(2.0, 6.0) | vec2(4.0, 12.0) | vec2(1.0, 26.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output uvec3 out0 = [ uvec3(1, 4, 9) | uvec3(2, 2, 6) | uvec3(3, 14, 6) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec3(1, 2, 3) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(1.0, 4.0, 9.0) | vec3(2.0, 2.0, 6.0) | vec3(3.0, 14.0, 6.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) * in0;
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(2.0, 6.0, 15.0) | vec3(4.0, 12.0, 6.0) | vec3(1.0, 26.0, 21.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output uvec4 out0 = [ uvec4(1, 4, 9, 16) | uvec4(2, 2, 6, 24) | uvec4(3, 14, 6, 20) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec4(1, 2, 3, 4) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) * in0;
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) * in0;
						${OUTPUT}
					}
				""
			end

		end # mul
		group div "Division"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 1.0 | 2.0 | 2.0 | 0.666666666667 | 0.4 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 / in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uint out0 = [ 1 | 2 | 2 | 0 | 0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2 / in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) / in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) / in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) / in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec2 out0 = [ uvec2(0, 1) | uvec2(1, 2) | uvec2(1, 2) | uvec2(0, 0) | uvec2(0, 0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec2(1, 2) / in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec3 out0 = [ uvec3(0, 1, 1) | uvec3(1, 2, 3) | uvec3(1, 2, 3) | uvec3(0, 0, 1) | uvec3(0, 0, 0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec3(1, 2, 3) / in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec4(1, 2, 3, 4) / in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ 2.0 | 0.666666666667 | 0.5 | 0.285714285714 | 0.181818181818 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 / in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) / in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) / in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) / in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output uvec2 out0 = [ uvec2(1, 1) | uvec2(0, 2) | uvec2(0, 0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec2(1, 2) / in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(1.0, 1.0) | vec2(0.5, 2.0) | vec2(0.333333333333, 0.285714285714) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) / in0;
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(0.5, 0.666666666667) | vec2(0.25, 0.333333333333) | vec2(1.0, 0.153846153846) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) / in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output uvec3 out0 = [ uvec3(1, 1, 1) | uvec3(0, 2, 1) | uvec3(0, 0, 1) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec3(1, 2, 3) / in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(1.0, 1.0, 1.0) | vec3(0.5, 2.0, 1.5) | vec3(0.333333333333, 0.285714285714, 1.5) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) / in0;
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(0.5, 0.666666666667, 0.6) | vec3(0.25, 0.333333333333, 1.5) | vec3(1.0, 0.153846153846, 0.428571428571) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) / in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output uvec4 out0 = [ uvec4(1, 1, 1, 1) | uvec4(0, 2, 1, 0) | uvec4(0, 0, 1, 0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec4(1, 2, 3, 4) / in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) / in0;
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) / in0;
						${OUTPUT}
					}
				""
			end

		end # div

	end # literal_before_input

end # arithmetic
group comparisons "Comparisons"

	group input_before_literal "Input before literal"

		group equal "Equal"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | false | false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == 2.0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | false | false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == 2;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ false | false | false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == 2.0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == uvec2(1, 2);
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output bool out0 = [ false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == uvec3(1, 2, 3);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output bool out0 = [ false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == uvec4(1, 2, 3, 4);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					output bool out0 = [ false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 == vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end

		end # equal
		group not_equal "Not equal"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | true | true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != 2.0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | true | true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != 2;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ true | true | true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != 2.0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != uvec2(1, 2);
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output bool out0 = [ true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != uvec3(1, 2, 3);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output bool out0 = [ true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != uvec4(1, 2, 3, 4);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					output bool out0 = [ true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 != vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end

		end # not_equal
		group less "Less than"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | true | true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 < 2.0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | true | true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 < 2;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ true | false | false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 < 2.0;
						${OUTPUT}
					}
				""
			end

		end # less
		group greater "Greater than"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | false | false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 > 2.0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | false | false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 > 2;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ false | true | true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 > 2.0;
						${OUTPUT}
					}
				""
			end

		end # greater
		group less_or_equal "Less than or equal"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | true | true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 <= 2.0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | true | true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 <= 2;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ true | false | false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 <= 2.0;
						${OUTPUT}
					}
				""
			end

		end # less_or_equal
		group greater_or_equal "Greater than or equal"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | false | false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 >= 2.0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | false | false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 >= 2;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ false | true | true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 >= 2.0;
						${OUTPUT}
					}
				""
			end

		end # greater_or_equal

	end # input_before_literal
	group literal_before_input "Literal before input"

		group equal "Equal"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | false | false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 == in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | false | false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2 == in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ false | false | false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 == in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec2(1, 2) == in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) == in0;
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output bool out0 = [ false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) == in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec3(1, 2, 3) == in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) == in0;
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output bool out0 = [ false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) == in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec4(1, 2, 3, 4) == in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output bool out0 = [ true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) == in0;
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					output bool out0 = [ false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) == in0;
						${OUTPUT}
					}
				""
			end

		end # equal
		group not_equal "Not equal"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | true | true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 != in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | true | true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2 != in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ true | true | true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 != in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec2(1, 2) != in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) != in0;
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output bool out0 = [ true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) != in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec3(1, 2, 3) != in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) != in0;
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output bool out0 = [ true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) != in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = uvec4(1, 2, 3, 4) != in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output bool out0 = [ false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) != in0;
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					output bool out0 = [ true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) != in0;
						${OUTPUT}
					}
				""
			end

		end # not_equal
		group less "Less than"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | false | false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 < in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | false | false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2 < in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ false | true | true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 < in0;
						${OUTPUT}
					}
				""
			end

		end # less
		group greater "Greater than"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | true | true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 > in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ false | true | true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2 > in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ true | false | false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 > in0;
						${OUTPUT}
					}
				""
			end

		end # greater
		group less_or_equal "Less than or equal"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | false | false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 <= in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | false | false | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2 <= in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ false | true | true | true | true ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 <= in0;
						${OUTPUT}
					}
				""
			end

		end # less_or_equal
		group greater_or_equal "Greater than or equal"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | true | true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 >= in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output bool out0 = [ true | true | true | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2 >= in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output bool out0 = [ true | false | false | false | false ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 >= in0;
						${OUTPUT}
					}
				""
			end

		end # greater_or_equal

	end # literal_before_input

end # comparisons
group array_subscripts "Array subscripts"

	group input_before_subscript "Input before subscript"

		case int_to_float
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output float out0 = [ 3.0 | 2.0 | 2.0 | 4.0 | 6.0 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					float[] x = float[] (2.0, 1.0, 1.0, 3.0, 5.0);
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case int_to_uint
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uint out0 = [ 5 | 4 | 4 | 6 | 8 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uint[] x = uint[] (1, 3, 4, 7, 11);
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case int_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case int_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case int_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					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));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case int_to_uvec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uvec2 out0 = [ uvec2(6, 8) | uvec2(5, 7) | uvec2(5, 7) | uvec2(7, 9) | uvec2(9, 11) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec2[] x = uvec2[] (uvec2(2, 3), uvec2(4, 6), uvec2(1, 13));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case int_to_uvec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uvec3 out0 = [ uvec3(6, 8, 4) | uvec3(5, 7, 3) | uvec3(5, 7, 3) | uvec3(7, 9, 5) | uvec3(9, 11, 7) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec3[] x = uvec3[] (uvec3(2, 3, 5), uvec3(4, 6, 2), uvec3(1, 13, 7));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case int_to_uvec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec4[] x = uvec4[] (uvec4(2, 3, 5, 8), uvec4(4, 6, 2, 9), uvec4(1, 13, 7, 4));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case uint_to_float
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				output float out0 = [ 2.0 | 4.0 | 5.0 | 8.0 | 12.0 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					float[] x = float[] (2.0, 1.0, 1.0, 3.0, 5.0);
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case uint_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case uint_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case uint_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					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));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case ivec2_to_uvec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output uvec2 out0 = [ uvec2(5, 8) | uvec2(6, 7) | uvec2(7, 13) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec2[] x = uvec2[] (uvec2(2, 3), uvec2(4, 6), uvec2(1, 13));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case ivec2_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output vec2 out0 = [ vec2(3.0, 3.0) | vec2(4.0, 2.0) | vec2(5.0, 8.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case uvec2_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				output vec2 out0 = [ vec2(4.0, 4.0) | vec2(6.0, 7.0) | vec2(3.0, 14.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case ivec3_to_uvec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output uvec3 out0 = [ uvec3(5, 8, 5) | uvec3(6, 7, 4) | uvec3(7, 13, 4) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec3[] x = uvec3[] (uvec3(2, 3, 5), uvec3(4, 6, 2), uvec3(1, 13, 7));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case ivec3_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output vec3 out0 = [ vec3(3.0, 3.0, 5.0) | vec3(4.0, 2.0, 4.0) | vec3(5.0, 8.0, 4.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case uvec3_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				output vec3 out0 = [ vec3(4.0, 4.0, 7.0) | vec3(6.0, 7.0, 4.0) | vec3(3.0, 14.0, 9.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case ivec4_to_uvec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				output uvec4 out0 = [ uvec4(5, 8, 5, 13) | uvec4(6, 7, 4, 15) | uvec4(7, 13, 4, 14) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec4[] x = uvec4[] (uvec4(2, 3, 5, 8), uvec4(4, 6, 2, 9), uvec4(1, 13, 7, 4));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case ivec4_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					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));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end
		case uvec4_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					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));
					out0 = in0 + x[1];
					${OUTPUT}
				}
			""
		end

	end # input_before_subscript
	group subscript_before_input "Subscript before input"

		case int_to_float
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output float out0 = [ 3.0 | 2.0 | 2.0 | 4.0 | 6.0 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					float[] x = float[] (2.0, 1.0, 1.0, 3.0, 5.0);
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_uint
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uint out0 = [ 5 | 4 | 4 | 6 | 8 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uint[] x = uint[] (1, 3, 4, 7, 11);
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					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));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_uvec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uvec2 out0 = [ uvec2(6, 8) | uvec2(5, 7) | uvec2(5, 7) | uvec2(7, 9) | uvec2(9, 11) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec2[] x = uvec2[] (uvec2(2, 3), uvec2(4, 6), uvec2(1, 13));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_uvec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uvec3 out0 = [ uvec3(6, 8, 4) | uvec3(5, 7, 3) | uvec3(5, 7, 3) | uvec3(7, 9, 5) | uvec3(9, 11, 7) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec3[] x = uvec3[] (uvec3(2, 3, 5), uvec3(4, 6, 2), uvec3(1, 13, 7));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_uvec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec4[] x = uvec4[] (uvec4(2, 3, 5, 8), uvec4(4, 6, 2, 9), uvec4(1, 13, 7, 4));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case uint_to_float
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				output float out0 = [ 2.0 | 4.0 | 5.0 | 8.0 | 12.0 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					float[] x = float[] (2.0, 1.0, 1.0, 3.0, 5.0);
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case uint_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case uint_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case uint_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					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));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case ivec2_to_uvec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output uvec2 out0 = [ uvec2(5, 8) | uvec2(6, 7) | uvec2(7, 13) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec2[] x = uvec2[] (uvec2(2, 3), uvec2(4, 6), uvec2(1, 13));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case ivec2_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output vec2 out0 = [ vec2(3.0, 3.0) | vec2(4.0, 2.0) | vec2(5.0, 8.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case uvec2_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				output vec2 out0 = [ vec2(4.0, 4.0) | vec2(6.0, 7.0) | vec2(3.0, 14.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec2[] x = vec2[] (vec2(1.0, 2.0), vec2(2.0, 1.0), vec2(3.0, 7.0));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case ivec3_to_uvec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output uvec3 out0 = [ uvec3(5, 8, 5) | uvec3(6, 7, 4) | uvec3(7, 13, 4) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec3[] x = uvec3[] (uvec3(2, 3, 5), uvec3(4, 6, 2), uvec3(1, 13, 7));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case ivec3_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output vec3 out0 = [ vec3(3.0, 3.0, 5.0) | vec3(4.0, 2.0, 4.0) | vec3(5.0, 8.0, 4.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case uvec3_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				output vec3 out0 = [ vec3(4.0, 4.0, 7.0) | vec3(6.0, 7.0, 4.0) | vec3(3.0, 14.0, 9.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec3[] x = vec3[] (vec3(1.0, 2.0, 3.0), vec3(2.0, 1.0, 2.0), vec3(3.0, 7.0, 2.0));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case ivec4_to_uvec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				output uvec4 out0 = [ uvec4(5, 8, 5, 13) | uvec4(6, 7, 4, 15) | uvec4(7, 13, 4, 14) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec4[] x = uvec4[] (uvec4(2, 3, 5, 8), uvec4(4, 6, 2, 9), uvec4(1, 13, 7, 4));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case ivec4_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					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));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end
		case uvec4_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					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));
					out0 = x[1] + in0;
					${OUTPUT}
				}
			""
		end

	end # subscript_before_input

end # array_subscripts
group functions "Function calls"

	case int_to_float
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
			output float out0 = [ 4.0 | 2.0 | 2.0 | 6.0 | 10.0 ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			float func (float a)
			{
				return a * float(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end
	case int_to_uint
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
			output uint out0 = [ 4 | 2 | 2 | 6 | 10 ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			uint func (uint a)
			{
				return a * uint(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end
	case uint_to_float
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
			output float out0 = [ 2.0 | 6.0 | 8.0 | 14.0 | 22.0 ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			float func (float a)
			{
				return a * float(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end
	case ivec2_to_uvec2
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
			output uvec2 out0 = [ uvec2(2, 4) | uvec2(4, 2) | uvec2(6, 14) ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			uvec2 func (uvec2 a)
			{
				return a * uvec2(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end
	case ivec2_to_vec2
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
			output vec2 out0 = [ vec2(2.0, 4.0) | vec2(4.0, 2.0) | vec2(6.0, 14.0) ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			vec2 func (vec2 a)
			{
				return a * vec2(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end
	case uvec2_to_vec2
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
			output vec2 out0 = [ vec2(4.0, 6.0) | vec2(8.0, 12.0) | vec2(2.0, 26.0) ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			vec2 func (vec2 a)
			{
				return a * vec2(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end
	case ivec3_to_uvec3
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
			output uvec3 out0 = [ uvec3(2, 4, 6) | uvec3(4, 2, 4) | uvec3(6, 14, 4) ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			uvec3 func (uvec3 a)
			{
				return a * uvec3(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end
	case ivec3_to_vec3
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
			output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(4.0, 2.0, 4.0) | vec3(6.0, 14.0, 4.0) ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			vec3 func (vec3 a)
			{
				return a * vec3(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end
	case uvec3_to_vec3
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
			output vec3 out0 = [ vec3(4.0, 6.0, 10.0) | vec3(8.0, 12.0, 4.0) | vec3(2.0, 26.0, 14.0) ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			vec3 func (vec3 a)
			{
				return a * vec3(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end
	case ivec4_to_uvec4
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
			output uvec4 out0 = [ uvec4(2, 4, 6, 8) | uvec4(4, 2, 4, 12) | uvec4(6, 14, 4, 10) ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			uvec4 func (uvec4 a)
			{
				return a * uvec4(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end
	case ivec4_to_vec4
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
			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) ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			vec4 func (vec4 a)
			{
				return a * vec4(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end
	case uvec4_to_vec4
		version 310 es
		require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
		values
		{
			input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
			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) ];
		}

		both ""
			#version 310 es
			precision highp float;
			${DECLARATIONS}

			vec4 func (vec4 a)
			{
				return a * vec4(2);
			}

			void main()
			{
				${SETUP}
				out0 = func(in0);
				${OUTPUT}
			}
		""
	end

end # functions
group struct_fields "Struct field selectors"

	group input_before_field "Input before field"

		case int_to_float
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output float out0 = [ 4.0 | 3.0 | 3.0 | 5.0 | 7.0 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						float val;
					} x;

					x.val = 2.0;

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case int_to_uint
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uint out0 = [ 3 | 2 | 2 | 4 | 6 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uint val;
					} x;

					x.val = 1;

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case int_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec2 val;
					} x;

					x.val = vec2(1.0, 2.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case int_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec3 val;
					} x;

					x.val = vec3(1.0, 2.0, 3.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case int_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec4 val;
					} x;

					x.val = vec4(1.0, 2.0, 3.0, 4.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case int_to_uvec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uvec2 out0 = [ uvec2(4, 5) | uvec2(3, 4) | uvec2(3, 4) | uvec2(5, 6) | uvec2(7, 8) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec2 val;
					} x;

					x.val = uvec2(2, 3);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case int_to_uvec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uvec3 out0 = [ uvec3(4, 5, 7) | uvec3(3, 4, 6) | uvec3(3, 4, 6) | uvec3(5, 6, 8) | uvec3(7, 8, 10) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec3 val;
					} x;

					x.val = uvec3(2, 3, 5);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case int_to_uvec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec4 val;
					} x;

					x.val = uvec4(2, 3, 5, 8);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case uint_to_float
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				output float out0 = [ 3.0 | 5.0 | 6.0 | 9.0 | 13.0 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						float val;
					} x;

					x.val = 2.0;

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case uint_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec2 val;
					} x;

					x.val = vec2(1.0, 2.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case uint_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec3 val;
					} x;

					x.val = vec3(1.0, 2.0, 3.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case uint_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec4 val;
					} x;

					x.val = vec4(1.0, 2.0, 3.0, 4.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case ivec2_to_uvec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output uvec2 out0 = [ uvec2(3, 5) | uvec2(4, 4) | uvec2(5, 10) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec2 val;
					} x;

					x.val = uvec2(2, 3);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case ivec2_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output vec2 out0 = [ vec2(2.0, 4.0) | vec2(3.0, 3.0) | vec2(4.0, 9.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec2 val;
					} x;

					x.val = vec2(1.0, 2.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case uvec2_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				output vec2 out0 = [ vec2(3.0, 5.0) | vec2(5.0, 8.0) | vec2(2.0, 15.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec2 val;
					} x;

					x.val = vec2(1.0, 2.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case ivec3_to_uvec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output uvec3 out0 = [ uvec3(3, 5, 8) | uvec3(4, 4, 7) | uvec3(5, 10, 7) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec3 val;
					} x;

					x.val = uvec3(2, 3, 5);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case ivec3_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(3.0, 3.0, 5.0) | vec3(4.0, 9.0, 5.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec3 val;
					} x;

					x.val = vec3(1.0, 2.0, 3.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case uvec3_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				output vec3 out0 = [ vec3(3.0, 5.0, 8.0) | vec3(5.0, 8.0, 5.0) | vec3(2.0, 15.0, 10.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec3 val;
					} x;

					x.val = vec3(1.0, 2.0, 3.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case ivec4_to_uvec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				output uvec4 out0 = [ uvec4(3, 5, 8, 12) | uvec4(4, 4, 7, 14) | uvec4(5, 10, 7, 13) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec4 val;
					} x;

					x.val = uvec4(2, 3, 5, 8);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case ivec4_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec4 val;
					} x;

					x.val = vec4(1.0, 2.0, 3.0, 4.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end
		case uvec4_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec4 val;
					} x;

					x.val = vec4(1.0, 2.0, 3.0, 4.0);

					out0 = in0 + x.val;
					${OUTPUT}
				}
			""
		end

	end # input_before_field
	group field_before_input "Field before input"

		case int_to_float
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output float out0 = [ 4.0 | 3.0 | 3.0 | 5.0 | 7.0 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						float val;
					} x;

					x.val = 2.0;

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_uint
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uint out0 = [ 3 | 2 | 2 | 4 | 6 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uint val;
					} x;

					x.val = 1;

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec2 val;
					} x;

					x.val = vec2(1.0, 2.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec3 val;
					} x;

					x.val = vec3(1.0, 2.0, 3.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec4 val;
					} x;

					x.val = vec4(1.0, 2.0, 3.0, 4.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_uvec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uvec2 out0 = [ uvec2(4, 5) | uvec2(3, 4) | uvec2(3, 4) | uvec2(5, 6) | uvec2(7, 8) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec2 val;
					} x;

					x.val = uvec2(2, 3);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_uvec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				output uvec3 out0 = [ uvec3(4, 5, 7) | uvec3(3, 4, 6) | uvec3(3, 4, 6) | uvec3(5, 6, 8) | uvec3(7, 8, 10) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec3 val;
					} x;

					x.val = uvec3(2, 3, 5);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case int_to_uvec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec4 val;
					} x;

					x.val = uvec4(2, 3, 5, 8);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case uint_to_float
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				output float out0 = [ 3.0 | 5.0 | 6.0 | 9.0 | 13.0 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						float val;
					} x;

					x.val = 2.0;

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case uint_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec2 val;
					} x;

					x.val = vec2(1.0, 2.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case uint_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec3 val;
					} x;

					x.val = vec3(1.0, 2.0, 3.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case uint_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec4 val;
					} x;

					x.val = vec4(1.0, 2.0, 3.0, 4.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case ivec2_to_uvec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output uvec2 out0 = [ uvec2(3, 5) | uvec2(4, 4) | uvec2(5, 10) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec2 val;
					} x;

					x.val = uvec2(2, 3);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case ivec2_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output vec2 out0 = [ vec2(2.0, 4.0) | vec2(3.0, 3.0) | vec2(4.0, 9.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec2 val;
					} x;

					x.val = vec2(1.0, 2.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case uvec2_to_vec2
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				output vec2 out0 = [ vec2(3.0, 5.0) | vec2(5.0, 8.0) | vec2(2.0, 15.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec2 val;
					} x;

					x.val = vec2(1.0, 2.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case ivec3_to_uvec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output uvec3 out0 = [ uvec3(3, 5, 8) | uvec3(4, 4, 7) | uvec3(5, 10, 7) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec3 val;
					} x;

					x.val = uvec3(2, 3, 5);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case ivec3_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output vec3 out0 = [ vec3(2.0, 4.0, 6.0) | vec3(3.0, 3.0, 5.0) | vec3(4.0, 9.0, 5.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec3 val;
					} x;

					x.val = vec3(1.0, 2.0, 3.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case uvec3_to_vec3
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				output vec3 out0 = [ vec3(3.0, 5.0, 8.0) | vec3(5.0, 8.0, 5.0) | vec3(2.0, 15.0, 10.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec3 val;
					} x;

					x.val = vec3(1.0, 2.0, 3.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case ivec4_to_uvec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				output uvec4 out0 = [ uvec4(3, 5, 8, 12) | uvec4(4, 4, 7, 14) | uvec4(5, 10, 7, 13) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						uvec4 val;
					} x;

					x.val = uvec4(2, 3, 5, 8);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case ivec4_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec4 val;
					} x;

					x.val = vec4(1.0, 2.0, 3.0, 4.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end
		case uvec4_to_vec4
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct {
						vec4 val;
					} x;

					x.val = vec4(1.0, 2.0, 3.0, 4.0);

					out0 = x.val + in0;
					${OUTPUT}
				}
			""
		end

	end # field_before_input

end # struct_fields
group parenthesized_expressions "Parenthesized expressions"

	group paren_expr_before_literal "Parenthesized expression before literal"

		group input_in_parens "Input variable in parenthesized expression"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 6.0 | 4.0 | 4.0 | 8.0 | 12.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + 1.0) * 2.0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uint out0 = [ 5 | 4 | 4 | 6 | 8 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + 3) * 1;
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec2(2.0, 1.0)) * vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec3(2.0, 1.0, 2.0)) * vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec4(2.0, 1.0, 2.0, 6.0)) * vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec2 out0 = [ uvec2(12, 24) | uvec2(10, 21) | uvec2(10, 21) | uvec2(14, 27) | uvec2(18, 33) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + ivec2(4, 6)) * ivec2(2, 3);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec3 out0 = [ uvec3(12, 24, 20) | uvec3(10, 21, 15) | uvec3(10, 21, 15) | uvec3(14, 27, 25) | uvec3(18, 33, 35) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + ivec3(4, 6, 2)) * ivec3(2, 3, 5);
						${OUTPUT}
					}
				""
			end
			case int_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + ivec4(4, 6, 2, 9)) * ivec4(2, 3, 5, 8);
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ 4.0 | 8.0 | 10.0 | 16.0 | 24.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + 1.0) * 2.0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec2(2.0, 1.0)) * vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec3(2.0, 1.0, 2.0)) * vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec4(2.0, 1.0, 2.0, 6.0)) * vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output uvec2 out0 = [ uvec2(10, 24) | uvec2(12, 21) | uvec2(14, 39) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + ivec2(4, 6)) * ivec2(2, 3);
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(3.0, 6.0) | vec2(4.0, 4.0) | vec2(5.0, 16.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec2(2.0, 1.0)) * vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(4.0, 8.0) | vec2(6.0, 14.0) | vec2(3.0, 28.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec2(2.0, 1.0)) * vec2(1.0, 2.0);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output uvec3 out0 = [ uvec3(10, 24, 25) | uvec3(12, 21, 20) | uvec3(14, 39, 20) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + ivec3(4, 6, 2)) * ivec3(2, 3, 5);
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(3.0, 6.0, 15.0) | vec3(4.0, 4.0, 12.0) | vec3(5.0, 16.0, 12.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec3(2.0, 1.0, 2.0)) * vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(4.0, 8.0, 21.0) | vec3(6.0, 14.0, 12.0) | vec3(3.0, 28.0, 27.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec3(2.0, 1.0, 2.0)) * vec3(1.0, 2.0, 3.0);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output uvec4 out0 = [ uvec4(10, 24, 25, 104) | uvec4(12, 21, 20, 120) | uvec4(14, 39, 20, 112) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + ivec4(4, 6, 2, 9)) * ivec4(2, 3, 5, 8);
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec4(2.0, 1.0, 2.0, 6.0)) * vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (in0 + vec4(2.0, 1.0, 2.0, 6.0)) * vec4(1.0, 2.0, 3.0, 4.0);
						${OUTPUT}
					}
				""
			end

		end # input_in_parens
		group input_outside_parens "Input variable outside parenthesized expression"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 6.0 | 3.0 | 3.0 | 9.0 | 15.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (2.0 + 1.0) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uint out0 = [ 8 | 4 | 4 | 12 | 20 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (1 + 3) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec2(1.0, 2.0) + vec2(2.0, 1.0)) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0)) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0)) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec2 out0 = [ uvec2(12, 18) | uvec2(6, 9) | uvec2(6, 9) | uvec2(18, 27) | uvec2(30, 45) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (ivec2(2, 3) + ivec2(4, 6)) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec3 out0 = [ uvec3(12, 18, 14) | uvec3(6, 9, 7) | uvec3(6, 9, 7) | uvec3(18, 27, 21) | uvec3(30, 45, 35) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (ivec3(2, 3, 5) + ivec3(4, 6, 2)) * in0;
						${OUTPUT}
					}
				""
			end
			case int_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (ivec4(2, 3, 5, 8) + ivec4(4, 6, 2, 9)) * in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ 3.0 | 9.0 | 12.0 | 21.0 | 33.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (2.0 + 1.0) * in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec2(1.0, 2.0) + vec2(2.0, 1.0)) * in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0)) * in0;
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0)) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output uvec2 out0 = [ uvec2(6, 18) | uvec2(12, 9) | uvec2(18, 63) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (ivec2(2, 3) + ivec2(4, 6)) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(3.0, 6.0) | vec2(6.0, 3.0) | vec2(9.0, 21.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec2(1.0, 2.0) + vec2(2.0, 1.0)) * in0;
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(6.0, 9.0) | vec2(12.0, 18.0) | vec2(3.0, 39.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec2(1.0, 2.0) + vec2(2.0, 1.0)) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output uvec3 out0 = [ uvec3(6, 18, 21) | uvec3(12, 9, 14) | uvec3(18, 63, 14) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (ivec3(2, 3, 5) + ivec3(4, 6, 2)) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(3.0, 6.0, 15.0) | vec3(6.0, 3.0, 10.0) | vec3(9.0, 21.0, 10.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0)) * in0;
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(6.0, 9.0, 25.0) | vec3(12.0, 18.0, 10.0) | vec3(3.0, 39.0, 35.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0)) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output uvec4 out0 = [ uvec4(6, 18, 21, 68) | uvec4(12, 9, 14, 102) | uvec4(18, 63, 14, 85) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (ivec4(2, 3, 5, 8) + ivec4(4, 6, 2, 9)) * in0;
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0)) * in0;
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0)) * in0;
						${OUTPUT}
					}
				""
			end

		end # input_outside_parens

	end # paren_expr_before_literal
	group literal_before_paren_expr "Literal before parenthesized expression"

		group input_in_parens "Input variable in parenthesized expression"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 6.0 | 4.0 | 4.0 | 8.0 | 12.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 * (in0 + 1.0);
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uint out0 = [ 5 | 4 | 4 | 6 | 8 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 1 * (in0 + 3);
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) * (in0 + vec2(2.0, 1.0));
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) * (in0 + vec3(2.0, 1.0, 2.0));
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) * (in0 + vec4(2.0, 1.0, 2.0, 6.0));
						${OUTPUT}
					}
				""
			end
			case int_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec2 out0 = [ uvec2(12, 24) | uvec2(10, 21) | uvec2(10, 21) | uvec2(14, 27) | uvec2(18, 33) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = ivec2(2, 3) * (in0 + ivec2(4, 6));
						${OUTPUT}
					}
				""
			end
			case int_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec3 out0 = [ uvec3(12, 24, 20) | uvec3(10, 21, 15) | uvec3(10, 21, 15) | uvec3(14, 27, 25) | uvec3(18, 33, 35) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = ivec3(2, 3, 5) * (in0 + ivec3(4, 6, 2));
						${OUTPUT}
					}
				""
			end
			case int_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = ivec4(2, 3, 5, 8) * (in0 + ivec4(4, 6, 2, 9));
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ 4.0 | 8.0 | 10.0 | 16.0 | 24.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = 2.0 * (in0 + 1.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) * (in0 + vec2(2.0, 1.0));
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) * (in0 + vec3(2.0, 1.0, 2.0));
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) * (in0 + vec4(2.0, 1.0, 2.0, 6.0));
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output uvec2 out0 = [ uvec2(10, 24) | uvec2(12, 21) | uvec2(14, 39) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = ivec2(2, 3) * (in0 + ivec2(4, 6));
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(3.0, 6.0) | vec2(4.0, 4.0) | vec2(5.0, 16.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) * (in0 + vec2(2.0, 1.0));
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(4.0, 8.0) | vec2(6.0, 14.0) | vec2(3.0, 28.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec2(1.0, 2.0) * (in0 + vec2(2.0, 1.0));
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output uvec3 out0 = [ uvec3(10, 24, 25) | uvec3(12, 21, 20) | uvec3(14, 39, 20) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = ivec3(2, 3, 5) * (in0 + ivec3(4, 6, 2));
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(3.0, 6.0, 15.0) | vec3(4.0, 4.0, 12.0) | vec3(5.0, 16.0, 12.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) * (in0 + vec3(2.0, 1.0, 2.0));
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(4.0, 8.0, 21.0) | vec3(6.0, 14.0, 12.0) | vec3(3.0, 28.0, 27.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec3(1.0, 2.0, 3.0) * (in0 + vec3(2.0, 1.0, 2.0));
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output uvec4 out0 = [ uvec4(10, 24, 25, 104) | uvec4(12, 21, 20, 120) | uvec4(14, 39, 20, 112) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = ivec4(2, 3, 5, 8) * (in0 + ivec4(4, 6, 2, 9));
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) * (in0 + vec4(2.0, 1.0, 2.0, 6.0));
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = vec4(1.0, 2.0, 3.0, 4.0) * (in0 + vec4(2.0, 1.0, 2.0, 6.0));
						${OUTPUT}
					}
				""
			end

		end # input_in_parens
		group input_outside_parens "Input variable outside parenthesized expression"

			case int_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output float out0 = [ 6.0 | 3.0 | 3.0 | 9.0 | 15.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (2.0 + 1.0);
						${OUTPUT}
					}
				""
			end
			case int_to_uint
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uint out0 = [ 8 | 4 | 4 | 12 | 20 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (1 + 3);
						${OUTPUT}
					}
				""
			end
			case int_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec2(1.0, 2.0) + vec2(2.0, 1.0));
						${OUTPUT}
					}
				""
			end
			case int_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0));
						${OUTPUT}
					}
				""
			end
			case int_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0));
						${OUTPUT}
					}
				""
			end
			case int_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec2 out0 = [ uvec2(12, 18) | uvec2(6, 9) | uvec2(6, 9) | uvec2(18, 27) | uvec2(30, 45) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (ivec2(2, 3) + ivec2(4, 6));
						${OUTPUT}
					}
				""
			end
			case int_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					output uvec3 out0 = [ uvec3(12, 18, 14) | uvec3(6, 9, 7) | uvec3(6, 9, 7) | uvec3(18, 27, 21) | uvec3(30, 45, 35) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (ivec3(2, 3, 5) + ivec3(4, 6, 2));
						${OUTPUT}
					}
				""
			end
			case int_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input int in0 = [ 2 | 1 | 1 | 3 | 5 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (ivec4(2, 3, 5, 8) + ivec4(4, 6, 2, 9));
						${OUTPUT}
					}
				""
			end
			case uint_to_float
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					output float out0 = [ 3.0 | 9.0 | 12.0 | 21.0 | 33.0 ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (2.0 + 1.0);
						${OUTPUT}
					}
				""
			end
			case uint_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec2(1.0, 2.0) + vec2(2.0, 1.0));
						${OUTPUT}
					}
				""
			end
			case uint_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0));
						${OUTPUT}
					}
				""
			end
			case uint_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0));
						${OUTPUT}
					}
				""
			end
			case ivec2_to_uvec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output uvec2 out0 = [ uvec2(6, 18) | uvec2(12, 9) | uvec2(18, 63) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (ivec2(2, 3) + ivec2(4, 6));
						${OUTPUT}
					}
				""
			end
			case ivec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
					output vec2 out0 = [ vec2(3.0, 6.0) | vec2(6.0, 3.0) | vec2(9.0, 21.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec2(1.0, 2.0) + vec2(2.0, 1.0));
						${OUTPUT}
					}
				""
			end
			case uvec2_to_vec2
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
					output vec2 out0 = [ vec2(6.0, 9.0) | vec2(12.0, 18.0) | vec2(3.0, 39.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec2(1.0, 2.0) + vec2(2.0, 1.0));
						${OUTPUT}
					}
				""
			end
			case ivec3_to_uvec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output uvec3 out0 = [ uvec3(6, 18, 21) | uvec3(12, 9, 14) | uvec3(18, 63, 14) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (ivec3(2, 3, 5) + ivec3(4, 6, 2));
						${OUTPUT}
					}
				""
			end
			case ivec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
					output vec3 out0 = [ vec3(3.0, 6.0, 15.0) | vec3(6.0, 3.0, 10.0) | vec3(9.0, 21.0, 10.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0));
						${OUTPUT}
					}
				""
			end
			case uvec3_to_vec3
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
					output vec3 out0 = [ vec3(6.0, 9.0, 25.0) | vec3(12.0, 18.0, 10.0) | vec3(3.0, 39.0, 35.0) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec3(1.0, 2.0, 3.0) + vec3(2.0, 1.0, 2.0));
						${OUTPUT}
					}
				""
			end
			case ivec4_to_uvec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					output uvec4 out0 = [ uvec4(6, 18, 21, 68) | uvec4(12, 9, 14, 102) | uvec4(18, 63, 14, 85) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (ivec4(2, 3, 5, 8) + ivec4(4, 6, 2, 9));
						${OUTPUT}
					}
				""
			end
			case ivec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0));
						${OUTPUT}
					}
				""
			end
			case uvec4_to_vec4
				version 310 es
				require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
				values
				{
					input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
					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) ];
				}

				both ""
					#version 310 es
					precision highp float;
					${DECLARATIONS}

					void main()
					{
						${SETUP}
						out0 = in0 * (vec4(1.0, 2.0, 3.0, 4.0) + vec4(2.0, 1.0, 2.0, 6.0));
						${OUTPUT}
					}
				""
			end

		end # input_outside_parens

	end # literal_before_paren_expr

end # parenthesized_expressions
group invalid "Invalid conversions"

	group variables "Single variables"

		case uint_to_int
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				output int out0 = [ 2 | 2 | 2 | 2 | 2 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 2;
					${OUTPUT}
				}
			""
		end
		case uint_to_ivec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(1, 2);
					${OUTPUT}
				}
			""
		end
		case uint_to_ivec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(1, 2, 3);
					${OUTPUT}
				}
			""
		end
		case uint_to_ivec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uint in0 = [ 1 | 3 | 4 | 7 | 11 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(1, 2, 3, 4);
					${OUTPUT}
				}
			""
		end
		case ivec2_to_uint
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output uint out0 = [ 1 | 1 | 1 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 1;
					${OUTPUT}
				}
			""
		end
		case ivec2_to_ivec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(1, 2, 3);
					${OUTPUT}
				}
			""
		end
		case ivec2_to_uvec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(2, 3, 5);
					${OUTPUT}
				}
			""
		end
		case ivec2_to_ivec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(1, 2, 3, 4);
					${OUTPUT}
				}
			""
		end
		case ivec2_to_uvec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(2, 3, 5, 8);
					${OUTPUT}
				}
			""
		end
		case ivec2_to_vec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec3(1.0, 2.0, 3.0);
					${OUTPUT}
				}
			""
		end
		case ivec2_to_vec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec2 in0 = [ ivec2(1, 2) | ivec2(2, 1) | ivec2(3, 7) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
					${OUTPUT}
				}
			""
		end
		case uvec2_to_int
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				output int out0 = [ 2 | 2 | 2 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 2;
					${OUTPUT}
				}
			""
		end
		case uvec2_to_ivec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(1, 2);
					${OUTPUT}
				}
			""
		end
		case uvec2_to_ivec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(1, 2, 3);
					${OUTPUT}
				}
			""
		end
		case uvec2_to_uvec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(2, 3, 5);
					${OUTPUT}
				}
			""
		end
		case uvec2_to_ivec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(1, 2, 3, 4);
					${OUTPUT}
				}
			""
		end
		case uvec2_to_uvec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(2, 3, 5, 8);
					${OUTPUT}
				}
			""
		end
		case uvec2_to_vec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec3(1.0, 2.0, 3.0);
					${OUTPUT}
				}
			""
		end
		case uvec2_to_vec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec2 in0 = [ uvec2(2, 3) | uvec2(4, 6) | uvec2(1, 13) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
					${OUTPUT}
				}
			""
		end
		case ivec3_to_uint
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output uint out0 = [ 1 | 1 | 1 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 1;
					${OUTPUT}
				}
			""
		end
		case ivec3_to_ivec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(1, 2);
					${OUTPUT}
				}
			""
		end
		case ivec3_to_uvec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(2, 3);
					${OUTPUT}
				}
			""
		end
		case ivec3_to_ivec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(1, 2, 3, 4);
					${OUTPUT}
				}
			""
		end
		case ivec3_to_uvec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(2, 3, 5, 8);
					${OUTPUT}
				}
			""
		end
		case ivec3_to_vec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec2(1.0, 2.0);
					${OUTPUT}
				}
			""
		end
		case ivec3_to_vec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec3 in0 = [ ivec3(1, 2, 3) | ivec3(2, 1, 2) | ivec3(3, 7, 2) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
					${OUTPUT}
				}
			""
		end
		case uvec3_to_int
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				output int out0 = [ 2 | 2 | 2 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 2;
					${OUTPUT}
				}
			""
		end
		case uvec3_to_ivec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(1, 2);
					${OUTPUT}
				}
			""
		end
		case uvec3_to_uvec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(2, 3);
					${OUTPUT}
				}
			""
		end
		case uvec3_to_ivec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(1, 2, 3);
					${OUTPUT}
				}
			""
		end
		case uvec3_to_ivec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(1, 2, 3, 4);
					${OUTPUT}
				}
			""
		end
		case uvec3_to_uvec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(2, 3, 5, 8);
					${OUTPUT}
				}
			""
		end
		case uvec3_to_vec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec2(1.0, 2.0);
					${OUTPUT}
				}
			""
		end
		case uvec3_to_vec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec3 in0 = [ uvec3(2, 3, 5) | uvec3(4, 6, 2) | uvec3(1, 13, 7) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
					${OUTPUT}
				}
			""
		end
		case ivec4_to_uint
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				output uint out0 = [ 1 | 1 | 1 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 1;
					${OUTPUT}
				}
			""
		end
		case ivec4_to_ivec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(1, 2);
					${OUTPUT}
				}
			""
		end
		case ivec4_to_uvec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(2, 3);
					${OUTPUT}
				}
			""
		end
		case ivec4_to_ivec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(1, 2, 3);
					${OUTPUT}
				}
			""
		end
		case ivec4_to_uvec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(2, 3, 5);
					${OUTPUT}
				}
			""
		end
		case ivec4_to_vec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec2(1.0, 2.0);
					${OUTPUT}
				}
			""
		end
		case ivec4_to_vec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input ivec4 in0 = [ ivec4(1, 2, 3, 4) | ivec4(2, 1, 2, 6) | ivec4(3, 7, 2, 5) ];
				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec3(1.0, 2.0, 3.0);
					${OUTPUT}
				}
			""
		end
		case uvec4_to_int
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				output int out0 = [ 2 | 2 | 2 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 2;
					${OUTPUT}
				}
			""
		end
		case uvec4_to_ivec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(1, 2);
					${OUTPUT}
				}
			""
		end
		case uvec4_to_uvec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(2, 3);
					${OUTPUT}
				}
			""
		end
		case uvec4_to_ivec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(1, 2, 3);
					${OUTPUT}
				}
			""
		end
		case uvec4_to_uvec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(2, 3, 5);
					${OUTPUT}
				}
			""
		end
		case uvec4_to_ivec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(1, 2, 3, 4);
					${OUTPUT}
				}
			""
		end
		case uvec4_to_vec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec2(1.0, 2.0);
					${OUTPUT}
				}
			""
		end
		case uvec4_to_vec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input uvec4 in0 = [ uvec4(2, 3, 5, 8) | uvec4(4, 6, 2, 9) | uvec4(1, 13, 7, 4) ];
				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec3(1.0, 2.0, 3.0);
					${OUTPUT}
				}
			""
		end
		case float_to_int
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
				output int out0 = [ 2 | 2 | 2 | 2 | 2 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 2;
					${OUTPUT}
				}
			""
		end
		case float_to_uint
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
				output uint out0 = [ 1 | 1 | 1 | 1 | 1 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 1;
					${OUTPUT}
				}
			""
		end
		case float_to_ivec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(1, 2);
					${OUTPUT}
				}
			""
		end
		case float_to_uvec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(2, 3);
					${OUTPUT}
				}
			""
		end
		case float_to_ivec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(1, 2, 3);
					${OUTPUT}
				}
			""
		end
		case float_to_uvec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(2, 3, 5);
					${OUTPUT}
				}
			""
		end
		case float_to_ivec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(1, 2, 3, 4);
					${OUTPUT}
				}
			""
		end
		case float_to_uvec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input float in0 = [ 2.0 | 1.0 | 1.0 | 3.0 | 5.0 ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(2, 3, 5, 8);
					${OUTPUT}
				}
			""
		end
		case vec2_to_int
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
				output int out0 = [ 2 | 2 | 2 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 2;
					${OUTPUT}
				}
			""
		end
		case vec2_to_uint
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
				output uint out0 = [ 1 | 1 | 1 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 1;
					${OUTPUT}
				}
			""
		end
		case vec2_to_ivec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(1, 2);
					${OUTPUT}
				}
			""
		end
		case vec2_to_uvec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(2, 3);
					${OUTPUT}
				}
			""
		end
		case vec2_to_ivec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(1, 2, 3);
					${OUTPUT}
				}
			""
		end
		case vec2_to_uvec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(2, 3, 5);
					${OUTPUT}
				}
			""
		end
		case vec2_to_ivec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(1, 2, 3, 4);
					${OUTPUT}
				}
			""
		end
		case vec2_to_uvec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(2, 3, 5, 8);
					${OUTPUT}
				}
			""
		end
		case vec2_to_vec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec3(1.0, 2.0, 3.0);
					${OUTPUT}
				}
			""
		end
		case vec2_to_vec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec2 in0 = [ vec2(1.0, 2.0) | vec2(2.0, 1.0) | vec2(3.0, 7.0) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
					${OUTPUT}
				}
			""
		end
		case vec3_to_int
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
				output int out0 = [ 2 | 2 | 2 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 2;
					${OUTPUT}
				}
			""
		end
		case vec3_to_uint
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
				output uint out0 = [ 1 | 1 | 1 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 1;
					${OUTPUT}
				}
			""
		end
		case vec3_to_ivec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(1, 2);
					${OUTPUT}
				}
			""
		end
		case vec3_to_uvec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(2, 3);
					${OUTPUT}
				}
			""
		end
		case vec3_to_ivec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(1, 2, 3);
					${OUTPUT}
				}
			""
		end
		case vec3_to_uvec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(2, 3, 5);
					${OUTPUT}
				}
			""
		end
		case vec3_to_ivec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(1, 2, 3, 4);
					${OUTPUT}
				}
			""
		end
		case vec3_to_uvec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(2, 3, 5, 8);
					${OUTPUT}
				}
			""
		end
		case vec3_to_vec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec2(1.0, 2.0);
					${OUTPUT}
				}
			""
		end
		case vec3_to_vec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				input vec3 in0 = [ vec3(1.0, 2.0, 3.0) | vec3(2.0, 1.0, 2.0) | vec3(3.0, 7.0, 2.0) ];
				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) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec4(1.0, 2.0, 3.0, 4.0);
					${OUTPUT}
				}
			""
		end
		case vec4_to_int
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				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) ];
				output int out0 = [ 2 | 2 | 2 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 2;
					${OUTPUT}
				}
			""
		end
		case vec4_to_uint
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				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) ];
				output uint out0 = [ 1 | 1 | 1 ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + 1;
					${OUTPUT}
				}
			""
		end
		case vec4_to_ivec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				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) ];
				output ivec2 out0 = [ ivec2(1, 2) | ivec2(1, 2) | ivec2(1, 2) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(1, 2);
					${OUTPUT}
				}
			""
		end
		case vec4_to_uvec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				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) ];
				output uvec2 out0 = [ uvec2(2, 3) | uvec2(2, 3) | uvec2(2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec2(2, 3);
					${OUTPUT}
				}
			""
		end
		case vec4_to_ivec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				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) ];
				output ivec3 out0 = [ ivec3(1, 2, 3) | ivec3(1, 2, 3) | ivec3(1, 2, 3) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(1, 2, 3);
					${OUTPUT}
				}
			""
		end
		case vec4_to_uvec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				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) ];
				output uvec3 out0 = [ uvec3(2, 3, 5) | uvec3(2, 3, 5) | uvec3(2, 3, 5) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec3(2, 3, 5);
					${OUTPUT}
				}
			""
		end
		case vec4_to_ivec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				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) ];
				output ivec4 out0 = [ ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) | ivec4(1, 2, 3, 4) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(1, 2, 3, 4);
					${OUTPUT}
				}
			""
		end
		case vec4_to_uvec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				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) ];
				output uvec4 out0 = [ uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) | uvec4(2, 3, 5, 8) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + ivec4(2, 3, 5, 8);
					${OUTPUT}
				}
			""
		end
		case vec4_to_vec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				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) ];
				output vec2 out0 = [ vec2(1.0, 2.0) | vec2(1.0, 2.0) | vec2(1.0, 2.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec2(1.0, 2.0);
					${OUTPUT}
				}
			""
		end
		case vec4_to_vec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values
			{
				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) ];
				output vec3 out0 = [ vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) | vec3(1.0, 2.0, 3.0) ];
			}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					out0 = in0 + vec3(1.0, 2.0, 3.0);
					${OUTPUT}
				}
			""
		end

	end # variables
	group arrays "Arrays"

		case int_to_float
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					float a[] = int[] (2, 1, 1, 3, 5);
					${OUTPUT}
				}
			""
		end
		case int_to_uint
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uint a[] = int[] (2, 1, 1, 3, 5);
					${OUTPUT}
				}
			""
		end
		case uint_to_float
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					float a[] = uint[] (1, 3, 4, 7, 11);
					${OUTPUT}
				}
			""
		end
		case ivec2_to_uvec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec2 a[] = ivec2[] (uvec2(1, 2), uvec2(2, 1), uvec2(3, 7));
					${OUTPUT}
				}
			""
		end
		case ivec2_to_vec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec2 a[] = ivec2[] (vec2(1, 2), vec2(2, 1), vec2(3, 7));
					${OUTPUT}
				}
			""
		end
		case uvec2_to_vec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec2 a[] = uvec2[] (vec2(2, 3), vec2(4, 6), vec2(1, 13));
					${OUTPUT}
				}
			""
		end
		case ivec3_to_uvec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec3 a[] = ivec3[] (uvec3(1, 2, 3), uvec3(2, 1, 2), uvec3(3, 7, 2));
					${OUTPUT}
				}
			""
		end
		case ivec3_to_vec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec3 a[] = ivec3[] (vec3(1, 2, 3), vec3(2, 1, 2), vec3(3, 7, 2));
					${OUTPUT}
				}
			""
		end
		case uvec3_to_vec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec3 a[] = uvec3[] (vec3(2, 3, 5), vec3(4, 6, 2), vec3(1, 13, 7));
					${OUTPUT}
				}
			""
		end
		case ivec4_to_uvec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					uvec4 a[] = ivec4[] (uvec4(1, 2, 3, 4), uvec4(2, 1, 2, 6), uvec4(3, 7, 2, 5));
					${OUTPUT}
				}
			""
		end
		case ivec4_to_vec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec4 a[] = ivec4[] (vec4(1, 2, 3, 4), vec4(2, 1, 2, 6), vec4(3, 7, 2, 5));
					${OUTPUT}
				}
			""
		end
		case uvec4_to_vec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					vec4 a[] = uvec4[] (vec4(2, 3, 5, 8), vec4(4, 6, 2, 9), vec4(1, 13, 7, 4));
					${OUTPUT}
				}
			""
		end

	end # arrays
	group structs "Structs"

		case int_to_float
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { int value; } a;
					struct { float value; } b;
					a = 2;
					b = a;
					${OUTPUT}
				}
			""
		end
		case int_to_uint
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { int value; } a;
					struct { uint value; } b;
					a = 2;
					b = a;
					${OUTPUT}
				}
			""
		end
		case uint_to_float
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { uint value; } a;
					struct { float value; } b;
					a = 1;
					b = a;
					${OUTPUT}
				}
			""
		end
		case ivec2_to_uvec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { ivec2 value; } a;
					struct { uvec2 value; } b;
					a = ivec2(1, 2);
					b = a;
					${OUTPUT}
				}
			""
		end
		case ivec2_to_vec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { ivec2 value; } a;
					struct { vec2 value; } b;
					a = ivec2(1, 2);
					b = a;
					${OUTPUT}
				}
			""
		end
		case uvec2_to_vec2
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { uvec2 value; } a;
					struct { vec2 value; } b;
					a = uvec2(2, 3);
					b = a;
					${OUTPUT}
				}
			""
		end
		case ivec3_to_uvec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { ivec3 value; } a;
					struct { uvec3 value; } b;
					a = ivec3(1, 2, 3);
					b = a;
					${OUTPUT}
				}
			""
		end
		case ivec3_to_vec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { ivec3 value; } a;
					struct { vec3 value; } b;
					a = ivec3(1, 2, 3);
					b = a;
					${OUTPUT}
				}
			""
		end
		case uvec3_to_vec3
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { uvec3 value; } a;
					struct { vec3 value; } b;
					a = uvec3(2, 3, 5);
					b = a;
					${OUTPUT}
				}
			""
		end
		case ivec4_to_uvec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { ivec4 value; } a;
					struct { uvec4 value; } b;
					a = ivec4(1, 2, 3, 4);
					b = a;
					${OUTPUT}
				}
			""
		end
		case ivec4_to_vec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { ivec4 value; } a;
					struct { vec4 value; } b;
					a = ivec4(1, 2, 3, 4);
					b = a;
					${OUTPUT}
				}
			""
		end
		case uvec4_to_vec4
			expect compile_fail
			version 310 es
			require extension { "GL_EXT_shader_implicit_conversions" } in { vertex, fragment }
			values {}

			both ""
				#version 310 es
				precision highp float;
				${DECLARATIONS}

				void main()
				{
					${SETUP}
					struct { uvec4 value; } a;
					struct { vec4 value; } b;
					a = uvec4(2, 3, 5, 8);
					b = a;
					${OUTPUT}
				}
			""
		end

	end # structs

end # invalid