
# Varying tests
group varying "Varying linkage"
	group component "Component qualifier"
		group vert_in "Vertex shader input"
			group vec2 "vec2"
				case as_float_float
					version 440 core
					desc "Read vertex input (vec2) as float float."
					output_color vec2
					values
					{
						input vec2 in0		= [ vec2(1.0, 11.0) | vec2(1.0, 9.0) | vec2(13.0, 7.0) | vec2(8.0, 3.0) ];
						output vec2 out0	= [ vec2(2.0, 22.0) | vec2(2.0, 18.0) | vec2(26.0, 14.0) | vec2(16.0, 6.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in float in0_0;
						layout(location = 1, component = 1) in float in0_1;
						layout(location = 0) out vec2 var0;

						void main()
						{
							vec2 in0 = vec2(in0_0, in0_1);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec2 var0;
						layout(location = 0) out vec2 dEQP_FragColor;

						void main()
						{
							vec2 out0 = var0;
							out0 /= vec2(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_float_float_unused
					version 440 core
					desc "Read vertex input (vec2) as float float. Read unused fourth component."
					output_color vec2
					values
					{
						input vec2 in0		= [ vec2(1.0, 11.0) | vec2(1.0, 9.0) | vec2(13.0, 7.0) | vec2(8.0, 3.0) ];
						output vec2 out0	= [ vec2(2.0, 22.0) | vec2(2.0, 18.0) | vec2(26.0, 14.0) | vec2(16.0, 6.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in float in0_0;
						layout(location = 1, component = 1) in float in0_1;
						layout(location = 1, component = 3) in float in0_3;
						layout(location = 0) out vec2 var0;

						void main()
						{
							vec2 in0 = vec2(in0_0, in0_1);
							var0 = in0_3 * in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec2 var0;
						layout(location = 0) out vec2 dEQP_FragColor;

						void main()
						{
							vec2 out0 = var0;
							out0 /= vec2(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
			end
			group vec3 "vec3"
				case as_float_float_float
					version 440 core
					desc "Read vertex input (vec3) as float float float."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in float in0_0;
						layout(location = 1, component = 1) in float in0_1;
						layout(location = 1, component = 2) in float in0_2;
						layout(location = 0) out vec3 var0;

						void main()
						{
							vec3 in0 = vec3(in0_0, in0_1, in0_2);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec3 var0;
						layout(location = 0) out vec3 dEQP_FragColor;

						void main()
						{
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_float_float_float_unused
					version 440 core
					desc "Read vertex input (vec3) as float float float. Read unused fourth component."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in float in0_0;
						layout(location = 1, component = 1) in float in0_1;
						layout(location = 1, component = 2) in float in0_2;
						layout(location = 1, component = 3) in float in0_3;
						layout(location = 0) out vec3 var0;

						void main()
						{
							vec3 in0 = vec3(in0_0, in0_1, in0_2);
							var0 = in0_3 * in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec3 var0;
						layout(location = 0) out vec3 dEQP_FragColor;

						void main()
						{
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_float_vec2
					version 440 core
					desc "Read vertex input (vec3) as float vec2."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in float in0_0;
						layout(location = 1, component = 1) in vec2 in0_1;
						layout(location = 0) out vec3 var0;

						void main()
						{
							vec3 in0 = vec3(in0_0, in0_1);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec3 var0;
						layout(location = 0) out vec3 dEQP_FragColor;

						void main()
						{
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_float_vec2_unused
					version 440 core
					desc "Read vertex input (vec3) as float vec2. Read unused fourth component."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in float in0_0;
						layout(location = 1, component = 1) in vec2 in0_1;
						layout(location = 1, component = 3) in float in0_3;
						layout(location = 0) out vec3 var0;

						void main()
						{
							vec3 in0 = vec3(in0_0, in0_1);
							var0 = in0_3 * in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec3 var0;
						layout(location = 0) out vec3 dEQP_FragColor;

						void main()
						{
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_vec2_float
					version 440 core
					desc "Read vertex input (vec3) as vec2 float."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in vec2 in0_0;
						layout(location = 1, component = 2) in float in0_1;
						layout(location = 0) out vec3 var0;

						void main()
						{
							vec3 in0 = vec3(in0_0, in0_1);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec3 var0;
						layout(location = 0) out vec3 dEQP_FragColor;

						void main()
						{
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_vec2_float_unused
					version 440 core
					desc "Read vertex input (vec3) as vec2 float. Read unused fourth component."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in vec2 in0_0;
						layout(location = 1, component = 2) in float in0_1;
						layout(location = 1, component = 3) in float in0_3;
						layout(location = 0) out vec3 var0;

						void main()
						{
							vec3 in0 = vec3(in0_0, in0_1);
							var0 = in0_3 * in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec3 var0;
						layout(location = 0) out vec3 dEQP_FragColor;

						void main()
						{
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor = out0;
						}
					""
				end
			end
			group vec4 "vec4"
				case as_float_float_float_float
					version 440 core
					desc "Read vertex input (vec4) as float float float float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in float in0_0;
						layout(location = 1, component = 1) in float in0_1;
						layout(location = 1, component = 2) in float in0_2;
						layout(location = 1, component = 3) in float in0_3;
						layout(location = 0) out vec4 var0;

						void main()
						{
							vec4 in0 = vec4(in0_0, in0_1, in0_2, in0_3);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_float_float_vec2
					version 440 core
					desc "Read vertex input (vec4) as float float vec2."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in float in0_0;
						layout(location = 1, component = 1) in float in0_1;
						layout(location = 1, component = 2) in vec2 in0_2;
						layout(location = 0) out vec4 var0;

						void main()
						{
							vec4 in0 = vec4(in0_0, in0_1, in0_2);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_float_vec2_float
					version 440 core
					desc "Read vertex input (vec4) as float vec2 float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in float in0_0;
						layout(location = 1, component = 1) in vec2 in0_1;
						layout(location = 1, component = 3) in float in0_2;
						layout(location = 0) out vec4 var0;

						void main()
						{
							vec4 in0 = vec4(in0_0, in0_1, in0_2);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_float_vec3
					version 440 core
					desc "Read vertex input (vec4) as float vec3."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in float in0_0;
						layout(location = 1, component = 1) in vec3 in0_1;
						layout(location = 0) out vec4 var0;

						void main()
						{
							vec4 in0 = vec4(in0_0, in0_1);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_vec2_float_float
					version 440 core
					desc "Read vertex input (vec4) as vec2 float float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in vec2 in0_0;
						layout(location = 1, component = 2) in float in0_1;
						layout(location = 1, component = 3) in float in0_2;
						layout(location = 0) out vec4 var0;

						void main()
						{
							vec4 in0 = vec4(in0_0, in0_1, in0_2);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_vec2_vec2
					version 440 core
					desc "Read vertex input (vec4) as vec2 vec2."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in vec2 in0_0;
						layout(location = 1, component = 2) in vec2 in0_1;
						layout(location = 0) out vec4 var0;

						void main()
						{
							vec4 in0 = vec4(in0_0, in0_1);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_vec3_float
					version 440 core
					desc "Read vertex input (vec4) as vec3 float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in vec3 in0_0;
						layout(location = 1, component = 3) in float in0_1;
						layout(location = 0) out vec4 var0;

						void main()
						{
							vec4 in0 = vec4(in0_0, in0_1);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
			end
			group ivec2 "ivec2"
				case as_int_int
					version 440 core
					desc "Read vertex input (ivec2) as int int."
					output_color ivec2
					values
					{
						input ivec2 in0		= [ ivec2(7, 13) | ivec2(9, 7) | ivec2(13, 1) | ivec2(15, 11) ];
						output ivec2 out0	= [ ivec2(14, 26) | ivec2(18, 14) | ivec2(26, 2) | ivec2(30, 22) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in int in0_0;
						layout(location = 1, component = 1) in int in0_1;
						layout(location = 0) out ivec2 var0;

						void main()
						{
							ivec2 in0 = ivec2(in0_0, in0_1);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec2 var0;
						layout(location = 0) out ivec2 dEQP_FragColor;

						void main()
						{
							ivec2 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_int_int_unused
					version 440 core
					desc "Read vertex input (ivec2) as int int. Read unused fourth component."
					output_color ivec2
					values
					{
						input ivec2 in0		= [ ivec2(7, 13) | ivec2(9, 7) | ivec2(13, 1) | ivec2(15, 11) ];
						output ivec2 out0	= [ ivec2(14, 26) | ivec2(18, 14) | ivec2(26, 2) | ivec2(30, 22) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in int in0_0;
						layout(location = 1, component = 1) in int in0_1;
						layout(location = 1, component = 3) in int in0_3;
						layout(location = 0) out ivec2 var0;

						void main()
						{
							ivec2 in0 = ivec2(in0_0, in0_1);
							var0 = in0_3 * in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec2 var0;
						layout(location = 0) out ivec2 dEQP_FragColor;

						void main()
						{
							ivec2 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
			end
			group ivec4 "ivec4"
				case as_int_int_int_int
					version 440 core
					desc "Read vertex input (ivec4) as int int int int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in int in0_0;
						layout(location = 1, component = 1) in int in0_1;
						layout(location = 1, component = 2) in int in0_2;
						layout(location = 1, component = 3) in int in0_3;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							ivec4 in0 = ivec4(in0_0, in0_1, in0_2, in0_3);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_int_int_ivec2
					version 440 core
					desc "Read vertex input (ivec4) as int int ivec2."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in int in0_0;
						layout(location = 1, component = 1) in int in0_1;
						layout(location = 1, component = 2) in ivec2 in0_2;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							ivec4 in0 = ivec4(in0_0, in0_1, in0_2);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_int_ivec2_int
					version 440 core
					desc "Read vertex input (ivec4) as int ivec2 int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in int in0_0;
						layout(location = 1, component = 1) in ivec2 in0_1;
						layout(location = 1, component = 3) in int in0_2;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							ivec4 in0 = ivec4(in0_0, in0_1, in0_2);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_int_ivec3
					version 440 core
					desc "Read vertex input (ivec4) as int ivec3."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in int in0_0;
						layout(location = 1, component = 1) in ivec3 in0_1;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							ivec4 in0 = ivec4(in0_0, in0_1);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_ivec2_int_int
					version 440 core
					desc "Read vertex input (ivec4) as ivec2 int int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in ivec2 in0_0;
						layout(location = 1, component = 2) in int in0_1;
						layout(location = 1, component = 3) in int in0_2;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							ivec4 in0 = ivec4(in0_0, in0_1, in0_2);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_ivec2_ivec2
					version 440 core
					desc "Read vertex input (ivec4) as ivec2 ivec2."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in ivec2 in0_0;
						layout(location = 1, component = 2) in ivec2 in0_1;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							ivec4 in0 = ivec4(in0_0, in0_1);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_ivec3_int
					version 440 core
					desc "Read vertex input (ivec4) as ivec3 int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1, component = 0) in ivec3 in0_0;
						layout(location = 1, component = 3) in int in0_1;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							ivec4 in0 = ivec4(in0_0, in0_1);
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
			end
		end
		group vert_out_frag_in "Vertex shader output and fragment shader input"
			group vec2 "vec2"
				case as_float_float
					version 440 core
					desc "Write vertex output and read fragment input (vec2) as float float."
					output_color vec2
					values
					{
						input vec2 in0		= [ vec2(1.0, 11.0) | vec2(1.0, 9.0) | vec2(13.0, 7.0) | vec2(8.0, 3.0) ];
						output vec2 out0	= [ vec2(2.0, 22.0) | vec2(2.0, 18.0) | vec2(26.0, 14.0) | vec2(16.0, 6.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec2 in0;
						layout(location = 0, component = 0) out float var0_0;
						layout(location = 0, component = 1) out float var0_1;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.y + in0.y;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) in float var0_0;
						layout(location = 0, component = 1) in float var0_1;
						layout(location = 0) out vec2 dEQP_FragColor;

						void main()
						{
							vec2 var0 = vec2(var0_0, var0_1);
							vec2 out0 = var0;
							out0 /= vec2(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
			end
			group vec3 "vec3"
				case as_float_float_float
					version 440 core
					desc "Write vertex output and read fragment input (vec3) as float float float."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec3 in0;
						layout(location = 0, component = 0) out float var0_0;
						layout(location = 0, component = 1) out float var0_1;
						layout(location = 0, component = 2) out float var0_2;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.y + in0.y;
							var0_2 = in0.z + in0.z;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) in float var0_0;
						layout(location = 0, component = 1) in float var0_1;
						layout(location = 0, component = 2) in float var0_2;
						layout(location = 0) out vec3 dEQP_FragColor;

						void main()
						{
							vec3 var0 = vec3(var0_0, var0_1, var0_2);
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_float_vec2
					version 440 core
					desc "Write vertex output and read fragment input (vec3) as float vec2."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec3 in0;
						layout(location = 0, component = 0) out float var0_0;
						layout(location = 0, component = 1) out vec2 var0_1;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.yz + in0.yz;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) in float var0_0;
						layout(location = 0, component = 1) in vec2 var0_1;
						layout(location = 0) out vec3 dEQP_FragColor;

						void main()
						{
							vec3 var0 = vec3(var0_0, var0_1);
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_vec2_float
					version 440 core
					desc "Write vertex output and read fragment input (vec3) as vec2 float."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec3 in0;
						layout(location = 0, component = 0) out vec2 var0_0;
						layout(location = 0, component = 2) out float var0_1;

						void main()
						{
							var0_0 = in0.xy + in0.xy;
							var0_1 = in0.z + in0.z;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) in vec2 var0_0;
						layout(location = 0, component = 2) in float var0_1;
						layout(location = 0) out vec3 dEQP_FragColor;

						void main()
						{
							vec3 var0 = vec3(var0_0, var0_1);
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor = out0;
						}
					""
				end
			end
			group vec4 "vec4"
				case as_float_float_float_float
					version 440 core
					desc "Write vertex output and read fragment input (vec4) as float float float float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0, component = 0) out float var0_0;
						layout(location = 0, component = 1) out float var0_1;
						layout(location = 0, component = 2) out float var0_2;
						layout(location = 0, component = 3) out float var0_3;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.y + in0.y;
							var0_2 = in0.z + in0.z;
							var0_3 = in0.w + in0.w;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) in float var0_0;
						layout(location = 0, component = 1) in float var0_1;
						layout(location = 0, component = 2) in float var0_2;
						layout(location = 0, component = 3) in float var0_3;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 var0 = vec4(var0_0, var0_1, var0_2, var0_3);
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_float_float_vec2
					version 440 core
					desc "Write vertex output and read fragment input (vec4) as float float vec2."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0, component = 0) out float var0_0;
						layout(location = 0, component = 1) out float var0_1;
						layout(location = 0, component = 2) out vec2 var0_2;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.y + in0.y;
							var0_2 = in0.zw + in0.zw;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) in float var0_0;
						layout(location = 0, component = 1) in float var0_1;
						layout(location = 0, component = 2) in vec2 var0_2;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 var0 = vec4(var0_0, var0_1, var0_2);
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_float_vec2_float
					version 440 core
					desc "Write vertex output and read fragment input (vec4) as float vec2 float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0, component = 0) out float var0_0;
						layout(location = 0, component = 1) out vec2 var0_1;
						layout(location = 0, component = 3) out float var0_2;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.yz + in0.yz;
							var0_2 = in0.w + in0.w;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) in float var0_0;
						layout(location = 0, component = 1) in vec2 var0_1;
						layout(location = 0, component = 3) in float var0_2;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 var0 = vec4(var0_0, var0_1, var0_2);
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_float_vec3
					version 440 core
					desc "Write vertex output and read fragment input (vec4) as float vec3."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0, component = 0) out float var0_0;
						layout(location = 0, component = 1) out vec3 var0_1;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.yzw + in0.yzw;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) in float var0_0;
						layout(location = 0, component = 1) in vec3 var0_1;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 var0 = vec4(var0_0, var0_1);
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_vec2_float_float
					version 440 core
					desc "Write vertex output and read fragment input (vec4) as vec2 float float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0, component = 0) out vec2 var0_0;
						layout(location = 0, component = 2) out float var0_1;
						layout(location = 0, component = 3) out float var0_2;

						void main()
						{
							var0_0 = in0.xy + in0.xy;
							var0_1 = in0.z + in0.z;
							var0_2 = in0.w + in0.w;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) in vec2 var0_0;
						layout(location = 0, component = 2) in float var0_1;
						layout(location = 0, component = 3) in float var0_2;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 var0 = vec4(var0_0, var0_1, var0_2);
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_vec2_vec2
					version 440 core
					desc "Write vertex output and read fragment input (vec4) as vec2 vec2."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0, component = 0) out vec2 var0_0;
						layout(location = 0, component = 2) out vec2 var0_1;

						void main()
						{
							var0_0 = in0.xy + in0.xy;
							var0_1 = in0.zw + in0.zw;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) in vec2 var0_0;
						layout(location = 0, component = 2) in vec2 var0_1;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 var0 = vec4(var0_0, var0_1);
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
				case as_vec3_float
					version 440 core
					desc "Write vertex output and read fragment input (vec4) as vec3 float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0, component = 0) out vec3 var0_0;
						layout(location = 0, component = 3) out float var0_1;

						void main()
						{
							var0_0 = in0.xyz + in0.xyz;
							var0_1 = in0.w + in0.w;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) in vec3 var0_0;
						layout(location = 0, component = 3) in float var0_1;
						layout(location = 0) out vec4 dEQP_FragColor;

						void main()
						{
							vec4 var0 = vec4(var0_0, var0_1);
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor = out0;
						}
					""
				end
			end
			group ivec2 "ivec2"
				case as_int_int
					version 440 core
					desc "Write vertex output and read fragment input (ivec2) as int int."
					output_color ivec2
					values
					{
						input ivec2 in0		= [ ivec2(7, 13) | ivec2(9, 7) | ivec2(13, 1) | ivec2(15, 11) ];
						output ivec2 out0	= [ ivec2(14, 26) | ivec2(18, 14) | ivec2(26, 2) | ivec2(30, 22) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec2 in0;
						layout(location = 0, component = 0) out int var0_0;
						layout(location = 0, component = 1) out int var0_1;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.y + in0.y;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) flat in int var0_0;
						layout(location = 0, component = 1) flat in int var0_1;
						layout(location = 0) out ivec2 dEQP_FragColor;

						void main()
						{
							ivec2 var0 = ivec2(var0_0, var0_1);
							ivec2 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
			end
			group ivec4 "ivec4"
				case as_int_int_int_int
					version 440 core
					desc "Write vertex output and read fragment input (ivec4) as int int int int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0, component = 0) out int var0_0;
						layout(location = 0, component = 1) out int var0_1;
						layout(location = 0, component = 2) out int var0_2;
						layout(location = 0, component = 3) out int var0_3;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.y + in0.y;
							var0_2 = in0.z + in0.z;
							var0_3 = in0.w + in0.w;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) flat in int var0_0;
						layout(location = 0, component = 1) flat in int var0_1;
						layout(location = 0, component = 2) flat in int var0_2;
						layout(location = 0, component = 3) flat in int var0_3;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 var0 = ivec4(var0_0, var0_1, var0_2, var0_3);
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_int_int_ivec2
					version 440 core
					desc "Write vertex output and read fragment input (ivec4) as int int ivec2."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0, component = 0) out int var0_0;
						layout(location = 0, component = 1) out int var0_1;
						layout(location = 0, component = 2) out ivec2 var0_2;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.y + in0.y;
							var0_2 = in0.zw + in0.zw;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) flat in int var0_0;
						layout(location = 0, component = 1) flat in int var0_1;
						layout(location = 0, component = 2) flat in ivec2 var0_2;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 var0 = ivec4(var0_0, var0_1, var0_2);
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_int_ivec2_int
					version 440 core
					desc "Write vertex output and read fragment input (ivec4) as int ivec2 int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0, component = 0) out int var0_0;
						layout(location = 0, component = 1) out ivec2 var0_1;
						layout(location = 0, component = 3) out int var0_2;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.yz + in0.yz;
							var0_2 = in0.w + in0.w;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) flat in int var0_0;
						layout(location = 0, component = 1) flat in ivec2 var0_1;
						layout(location = 0, component = 3) flat in int var0_2;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 var0 = ivec4(var0_0, var0_1, var0_2);
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_int_ivec3
					version 440 core
					desc "Write vertex output and read fragment input (ivec4) as int ivec3."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0, component = 0) out int var0_0;
						layout(location = 0, component = 1) out ivec3 var0_1;

						void main()
						{
							var0_0 = in0.x + in0.x;
							var0_1 = in0.yzw + in0.yzw;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) flat in int var0_0;
						layout(location = 0, component = 1) flat in ivec3 var0_1;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 var0 = ivec4(var0_0, var0_1);
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_ivec2_int_int
					version 440 core
					desc "Write vertex output and read fragment input (ivec4) as ivec2 int int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0, component = 0) out ivec2 var0_0;
						layout(location = 0, component = 2) out int var0_1;
						layout(location = 0, component = 3) out int var0_2;

						void main()
						{
							var0_0 = in0.xy + in0.xy;
							var0_1 = in0.z + in0.z;
							var0_2 = in0.w + in0.w;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) flat in ivec2 var0_0;
						layout(location = 0, component = 2) flat in int var0_1;
						layout(location = 0, component = 3) flat in int var0_2;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 var0 = ivec4(var0_0, var0_1, var0_2);
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_ivec2_ivec2
					version 440 core
					desc "Write vertex output and read fragment input (ivec4) as ivec2 ivec2."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0, component = 0) out ivec2 var0_0;
						layout(location = 0, component = 2) out ivec2 var0_1;

						void main()
						{
							var0_0 = in0.xy + in0.xy;
							var0_1 = in0.zw + in0.zw;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) flat in ivec2 var0_0;
						layout(location = 0, component = 2) flat in ivec2 var0_1;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 var0 = ivec4(var0_0, var0_1);
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
				case as_ivec3_int
					version 440 core
					desc "Write vertex output and read fragment input (ivec4) as ivec3 int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0, component = 0) out ivec3 var0_0;
						layout(location = 0, component = 3) out int var0_1;

						void main()
						{
							var0_0 = in0.xyz + in0.xyz;
							var0_1 = in0.w + in0.w;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0, component = 0) flat in ivec3 var0_0;
						layout(location = 0, component = 3) flat in int var0_1;
						layout(location = 0) out ivec4 dEQP_FragColor;

						void main()
						{
							ivec4 var0 = ivec4(var0_0, var0_1);
							ivec4 out0 = var0;
							dEQP_FragColor = out0;
						}
					""
				end
			end
		end
		group frag_out "Fragment shader output"
			group vec2 "vec2"
				case as_float_float
					version 440 core
					desc "Write fragment output (vec2) as float float."
					output_color vec2
					values
					{
						input vec2 in0		= [ vec2(1.0, 11.0) | vec2(1.0, 9.0) | vec2(13.0, 7.0) | vec2(8.0, 3.0) ];
						output vec2 out0	= [ vec2(2.0, 22.0) | vec2(2.0, 18.0) | vec2(26.0, 14.0) | vec2(16.0, 6.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec2 in0;
						layout(location = 0) out vec2 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec2 var0;
						layout(location = 0, component = 0) out float dEQP_FragColor_0;
						layout(location = 0, component = 1) out float dEQP_FragColor_1;

						void main()
						{
							vec2 out0 = var0;
							out0 /= vec2(255.0);
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.y;
						}
					""
				end
			end
			group vec3 "vec3"
				case as_float_float_float
					version 440 core
					desc "Write fragment output (vec3) as float float float."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec3 in0;
						layout(location = 0) out vec3 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec3 var0;
						layout(location = 0, component = 0) out float dEQP_FragColor_0;
						layout(location = 0, component = 1) out float dEQP_FragColor_1;
						layout(location = 0, component = 2) out float dEQP_FragColor_2;

						void main()
						{
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.y;
							dEQP_FragColor_2 = out0.z;
						}
					""
				end
				case as_float_vec2
					version 440 core
					desc "Write fragment output (vec3) as float vec2."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec3 in0;
						layout(location = 0) out vec3 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec3 var0;
						layout(location = 0, component = 0) out float dEQP_FragColor_0;
						layout(location = 0, component = 1) out vec2 dEQP_FragColor_1;

						void main()
						{
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.yz;
						}
					""
				end
				case as_vec2_float
					version 440 core
					desc "Write fragment output (vec3) as vec2 float."
					output_color vec3
					values
					{
						input vec3 in0		= [ vec3(6.0, 8.0, 7.0) | vec3(14.0, 10.0, 15.0) | vec3(9.0, 5.0, 4.0) | vec3(7.0, 3.0, 1.0) ];
						output vec3 out0	= [ vec3(12.0, 16.0, 14.0) | vec3(28.0, 20.0, 30.0) | vec3(18.0, 10.0, 8.0) | vec3(14.0, 6.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec3 in0;
						layout(location = 0) out vec3 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec3 var0;
						layout(location = 0, component = 0) out vec2 dEQP_FragColor_0;
						layout(location = 0, component = 2) out float dEQP_FragColor_1;

						void main()
						{
							vec3 out0 = var0;
							out0 /= vec3(31.0, 63.0, 31.0);
							dEQP_FragColor_0 = out0.xy;
							dEQP_FragColor_1 = out0.z;
						}
					""
				end
			end
            group two_vec4 "two_vec4"
                group array_writes "array_writes"
                    case as_float_vec3-2_float
                        version 440 core
                        desc "Write fragment output 0 as float and vec3, output 1 as float and vec3"
                        output_color vec4

                        values
                        {
                            input vec4 in0	= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
                            output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
                            output vec4 out1	= [ vec4(52.0, 8.0, 44.0, 4.0) | vec4(16.0, 52.0, 32.0, 12.0) | vec4(28.0, 20.0, 4.0, 48.0) | vec4(56.0, 60.0, 44.0, 4.0) ];
                        }
                        vertex ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 dEQP_Position;
                            layout(location = 1) in vec4 in0;
                            layout(location = 0) out vec4 var0;
                            layout(location = 1) out vec4 var1;

                            void main()
                            {
                                var0 = in0 + in0;
                                var1 = in0 + in0 + in0 + in0;
                                ${VERTEX_OUTPUT}
                            }
                        ""
                        fragment ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 var0;
                            layout(location = 1) in vec4 var1;
                            layout(location = 0, component = 0) out float dEQP_FragColor_0_0;
                            layout(location = 0, component = 1) out vec3  dEQP_FragColor_0_1[2];
                            layout(location = 1, component = 0) out float dEQP_FragColor_1_0;
                            void main()
                            {
                                vec4 out0 = var0;
                                out0 /= vec4(255.0);
                                dEQP_FragColor_0_0 = out0.x;
                                dEQP_FragColor_0_1[0] = out0.yzw;

                                vec4 out1 = var1;
                                out1 /= vec4(255.0);
                                dEQP_FragColor_1_0 = out1.x;
                                dEQP_FragColor_0_1[1] = out1.yzw;
                            }
                        ""
                    end
                    case as_vec3-2_float_float
                        version 440 core
                        desc "Write fragment output 0 as vec3 and float, output 1 as vec3 and float."
                        output_color vec4

                        values
                        {
                            input vec4 in0	= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
                            output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
                            output vec4 out1	= [ vec4(52.0, 8.0, 44.0, 4.0) | vec4(16.0, 52.0, 32.0, 12.0) | vec4(28.0, 20.0, 4.0, 48.0) | vec4(56.0, 60.0, 44.0, 4.0) ];
                        }
                        vertex ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 dEQP_Position;
                            layout(location = 1) in vec4 in0;
                            layout(location = 0) out vec4 var0;
                            layout(location = 1) out vec4 var1;

                            void main()
                            {
                                var0 = in0 + in0;
                                var1 = in0 + in0 + in0 + in0;
                                ${VERTEX_OUTPUT}
                            }
                        ""
                        fragment ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 var0;
                            layout(location = 1) in vec4 var1;
                            layout(location = 0, component = 0) out vec3  dEQP_FragColor_0_0[2];
                            layout(location = 0, component = 3) out float dEQP_FragColor_0_3;
                            layout(location = 1, component = 3) out float dEQP_FragColor_1_3;
                            void main()
                            {
                                vec4 out0 = var0;
                                out0 /= vec4(255.0);
                                dEQP_FragColor_0_0[0] = out0.xyz;
                                dEQP_FragColor_0_3 = out0.w;

                                vec4 out1 = var1;
                                out1 /= vec4(255.0);
                                dEQP_FragColor_0_0[1] = out1.xyz;
                                dEQP_FragColor_1_3 = out1.w;
                            }
                        ""
                    end
                    case as_vec2_vec2-2_vec2
                        version 440 core
                        desc "Write fragment output 0 as two vec2, output 1 as two vec2."
                        output_color vec4

                        values
                        {
                            input vec4 in0	= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
                            output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
                            output vec4 out1	= [ vec4(52.0, 8.0, 44.0, 4.0) | vec4(16.0, 52.0, 32.0, 12.0) | vec4(28.0, 20.0, 4.0, 48.0) | vec4(56.0, 60.0, 44.0, 4.0) ];
                        }
                        vertex ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 dEQP_Position;
                            layout(location = 1) in vec4 in0;
                            layout(location = 0) out vec4 var0;
                            layout(location = 1) out vec4 var1;

                            void main()
                            {
                                var0 = in0 + in0;
                                var1 = in0 + in0 + in0 + in0;
                                ${VERTEX_OUTPUT}
                            }
                        ""
                        fragment ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 var0;
                            layout(location = 1) in vec4 var1;
                            layout(location = 0, component = 0) out vec2 dEQP_FragColor_0_0;
                            layout(location = 0, component = 2) out vec2 dEQP_FragColor_0_2[2];
                            layout(location = 1, component = 0) out vec2 dEQP_FragColor_1_0;
                            void main()
                            {
                                vec4 out0 = var0;
                                out0 /= vec4(255.0);
                                dEQP_FragColor_0_0 = out0.xy;
                                dEQP_FragColor_0_2[0] = out0.zw;

                                vec4 out1 = var1;
                                out1 /= vec4(255.0);
                                dEQP_FragColor_1_0 = out1.xy;
                                dEQP_FragColor_0_2[1] = out1.zw;
                            }
                        ""
                    end
                    case as_vec2-2_vec2_vec2
                        version 440 core
                        desc "Write fragment output 0 as two vec2, output 1 as two vec2."
                        output_color vec4

                        values
                        {
                            input vec4 in0	= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
                            output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
                            output vec4 out1	= [ vec4(52.0, 8.0, 44.0, 4.0) | vec4(16.0, 52.0, 32.0, 12.0) | vec4(28.0, 20.0, 4.0, 48.0) | vec4(56.0, 60.0, 44.0, 4.0) ];
                        }
                        vertex ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 dEQP_Position;
                            layout(location = 1) in vec4 in0;
                            layout(location = 0) out vec4 var0;
                            layout(location = 1) out vec4 var1;

                            void main()
                            {
                                var0 = in0 + in0;
                                var1 = in0 + in0 + in0 + in0;
                                ${VERTEX_OUTPUT}
                            }
                        ""
                        fragment ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 var0;
                            layout(location = 1) in vec4 var1;
                            layout(location = 0, component = 0) out vec2 dEQP_FragColor_0_0[2];
                            layout(location = 0, component = 2) out vec2 dEQP_FragColor_0_2;
                            layout(location = 1, component = 2) out vec2 dEQP_FragColor_1_2;
                            void main()
                            {
                                vec4 out0 = var0;
                                out0 /= vec4(255.0);
                                dEQP_FragColor_0_0[0] = out0.xy;
                                dEQP_FragColor_0_2 = out0.zw;

                                vec4 out1 = var1;
                                out1 /= vec4(255.0);
                                dEQP_FragColor_0_0[1] = out1.xy;
                                dEQP_FragColor_1_2 = out1.zw;
                            }
                        ""
                    end
                    case as_float_float-2_vec2-2_float
                        version 440 core
                        desc "Write fragment output 0 as two floats and vec2, output 1 as two floats and vec2."
                        output_color vec4

                        values
                        {
                            input vec4 in0	= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
                            output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
                            output vec4 out1	= [ vec4(52.0, 8.0, 44.0, 4.0) | vec4(16.0, 52.0, 32.0, 12.0) | vec4(28.0, 20.0, 4.0, 48.0) | vec4(56.0, 60.0, 44.0, 4.0) ];
                        }
                        vertex ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 dEQP_Position;
                            layout(location = 1) in vec4 in0;
                            layout(location = 0) out vec4 var0;
                            layout(location = 1) out vec4 var1;

                            void main()
                            {
                                var0 = in0 + in0;
                                var1 = in0 + in0 + in0 + in0;
                                ${VERTEX_OUTPUT}
                            }
                        ""
                        fragment ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 var0;
                            layout(location = 1) in vec4 var1;
                            layout(location = 0, component = 0) out float dEQP_FragColor_0_0;
                            layout(location = 0, component = 1) out float dEQP_FragColor_0_1[2];
                            layout(location = 0, component = 2) out vec2  dEQP_FragColor_0_2[2];
                            layout(location = 1, component = 0) out float dEQP_FragColor_1_0;
                            void main()
                            {
                                vec4 out0 = var0;
                                out0 /= vec4(255.0);
                                dEQP_FragColor_0_0 = out0.x;
                                dEQP_FragColor_0_1[0] = out0.y;
                                dEQP_FragColor_0_2[0] = out0.zw;

                                vec4 out1 = var1;
                                out1 /= vec4(255.0);
                                dEQP_FragColor_1_0 = out1.x;
                                dEQP_FragColor_0_1[1] = out1.y;
                                dEQP_FragColor_0_2[1] = out1.zw;
                            }
                        ""
                    end
                    case as_float-2_float-2_float-2_float-2_float-2
                        version 440 core
                        desc "Write fragment output 0 as four floats, output 1 as four floats."
                        output_color vec4

                        values
                        {
                            input vec4 in0	= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
                            output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
                            output vec4 out1	= [ vec4(52.0, 8.0, 44.0, 4.0) | vec4(16.0, 52.0, 32.0, 12.0) | vec4(28.0, 20.0, 4.0, 48.0) | vec4(56.0, 60.0, 44.0, 4.0) ];
                        }
                        vertex ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 dEQP_Position;
                            layout(location = 1) in vec4 in0;
                            layout(location = 0) out vec4 var0;
                            layout(location = 1) out vec4 var1;

                            void main()
                            {
                                var0 = in0 + in0;
                                var1 = in0 + in0 + in0 + in0;
                                ${VERTEX_OUTPUT}
                            }
                        ""
                        fragment ""
                            #version 440 core
                            precision highp float;
                            precision highp int;
                            layout(location = 0) in vec4 var0;
                            layout(location = 1) in vec4 var1;
                            layout(location = 0, component = 0) out float dEQP_FragColor_0_0[2];
                            layout(location = 0, component = 1) out float dEQP_FragColor_0_1[2];
                            layout(location = 0, component = 2) out float dEQP_FragColor_0_2[2];
                            layout(location = 0, component = 3) out float dEQP_FragColor_0_3[2];
                            void main()
                            {
                                vec4 out0 = var0;
                                out0 /= vec4(255.0);
                                dEQP_FragColor_0_0[0] = out0.x;
                                dEQP_FragColor_0_1[0] = out0.y;
                                dEQP_FragColor_0_2[0] = out0.z;
                                dEQP_FragColor_0_3[0] = out0.w;

                                vec4 out1 = var1;
                                out1 /= vec4(255.0);
                                dEQP_FragColor_0_0[1] = out1.x;
                                dEQP_FragColor_0_1[1] = out1.y;
                                dEQP_FragColor_0_2[1] = out1.z;
                                dEQP_FragColor_0_3[1] = out1.w;
                            }
                        ""
                    end
                end
            end
			group vec4 "vec4"
				case as_float_float_float_float
					version 440 core
					desc "Write fragment output (vec4) as float float float float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0) out vec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0, component = 0) out float dEQP_FragColor_0;
						layout(location = 0, component = 1) out float dEQP_FragColor_1;
						layout(location = 0, component = 2) out float dEQP_FragColor_2;
						layout(location = 0, component = 3) out float dEQP_FragColor_3;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.y;
							dEQP_FragColor_2 = out0.z;
							dEQP_FragColor_3 = out0.w;
						}
					""
				end
				case as_float_float_vec2
					version 440 core
					desc "Write fragment output (vec4) as float float vec2."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0) out vec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0, component = 0) out float dEQP_FragColor_0;
						layout(location = 0, component = 1) out float dEQP_FragColor_1;
						layout(location = 0, component = 2) out vec2 dEQP_FragColor_2;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.y;
							dEQP_FragColor_2 = out0.zw;
						}
					""
				end
				case as_float_vec2_float
					version 440 core
					desc "Write fragment output (vec4) as float vec2 float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0) out vec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0, component = 0) out float dEQP_FragColor_0;
						layout(location = 0, component = 1) out vec2 dEQP_FragColor_1;
						layout(location = 0, component = 3) out float dEQP_FragColor_2;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.yz;
							dEQP_FragColor_2 = out0.w;
						}
					""
				end
				case as_float_vec3
					version 440 core
					desc "Write fragment output (vec4) as float vec3."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0) out vec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0, component = 0) out float dEQP_FragColor_0;
						layout(location = 0, component = 1) out vec3 dEQP_FragColor_1;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.yzw;
						}
					""
				end
				case as_vec2_float_float
					version 440 core
					desc "Write fragment output (vec4) as vec2 float float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0) out vec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0, component = 0) out vec2 dEQP_FragColor_0;
						layout(location = 0, component = 2) out float dEQP_FragColor_1;
						layout(location = 0, component = 3) out float dEQP_FragColor_2;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor_0 = out0.xy;
							dEQP_FragColor_1 = out0.z;
							dEQP_FragColor_2 = out0.w;
						}
					""
				end
				case as_vec2_vec2
					version 440 core
					desc "Write fragment output (vec4) as vec2 vec2."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0) out vec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0, component = 0) out vec2 dEQP_FragColor_0;
						layout(location = 0, component = 2) out vec2 dEQP_FragColor_1;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor_0 = out0.xy;
							dEQP_FragColor_1 = out0.zw;
						}
					""
				end
				case as_vec3_float
					version 440 core
					desc "Write fragment output (vec4) as vec3 float."
					output_color vec4
					values
					{
						input vec4 in0		= [ vec4(13.0, 2.0, 11.0, 1.0) | vec4(4.0, 13.0, 8.0, 3.0) | vec4(7.0, 5.0, 1.0, 12.0) | vec4(14.0, 15.0, 11.0, 1.0) ];
						output vec4 out0	= [ vec4(26.0, 4.0, 22.0, 2.0) | vec4(8.0, 26.0, 16.0, 6.0) | vec4(14.0, 10.0, 2.0, 24.0) | vec4(28.0, 30.0, 22.0, 2.0) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in vec4 in0;
						layout(location = 0) out vec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 var0;
						layout(location = 0, component = 0) out vec3 dEQP_FragColor_0;
						layout(location = 0, component = 3) out float dEQP_FragColor_1;

						void main()
						{
							vec4 out0 = var0;
							out0 /= vec4(255.0);
							dEQP_FragColor_0 = out0.xyz;
							dEQP_FragColor_1 = out0.w;
						}
					""
				end
			end
			group ivec2 "ivec2"
				case as_int_int
					version 440 core
					desc "Write fragment output (ivec2) as int int."
					output_color ivec2
					values
					{
						input ivec2 in0		= [ ivec2(7, 13) | ivec2(9, 7) | ivec2(13, 1) | ivec2(15, 11) ];
						output ivec2 out0	= [ ivec2(14, 26) | ivec2(18, 14) | ivec2(26, 2) | ivec2(30, 22) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec2 in0;
						layout(location = 0) out ivec2 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec2 var0;
						layout(location = 0, component = 0) out int dEQP_FragColor_0;
						layout(location = 0, component = 1) out int dEQP_FragColor_1;

						void main()
						{
							ivec2 out0 = var0;
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.y;
						}
					""
				end
			end
			group ivec4 "ivec4"
				case as_int_int_int_int
					version 440 core
					desc "Write fragment output (ivec4) as int int int int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0, component = 0) out int dEQP_FragColor_0;
						layout(location = 0, component = 1) out int dEQP_FragColor_1;
						layout(location = 0, component = 2) out int dEQP_FragColor_2;
						layout(location = 0, component = 3) out int dEQP_FragColor_3;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.y;
							dEQP_FragColor_2 = out0.z;
							dEQP_FragColor_3 = out0.w;
						}
					""
				end
				case as_int_int_ivec2
					version 440 core
					desc "Write fragment output (ivec4) as int int ivec2."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0, component = 0) out int dEQP_FragColor_0;
						layout(location = 0, component = 1) out int dEQP_FragColor_1;
						layout(location = 0, component = 2) out ivec2 dEQP_FragColor_2;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.y;
							dEQP_FragColor_2 = out0.zw;
						}
					""
				end
				case as_int_ivec2_int
					version 440 core
					desc "Write fragment output (ivec4) as int ivec2 int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0, component = 0) out int dEQP_FragColor_0;
						layout(location = 0, component = 1) out ivec2 dEQP_FragColor_1;
						layout(location = 0, component = 3) out int dEQP_FragColor_2;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.yz;
							dEQP_FragColor_2 = out0.w;
						}
					""
				end
				case as_int_ivec3
					version 440 core
					desc "Write fragment output (ivec4) as int ivec3."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0, component = 0) out int dEQP_FragColor_0;
						layout(location = 0, component = 1) out ivec3 dEQP_FragColor_1;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor_0 = out0.x;
							dEQP_FragColor_1 = out0.yzw;
						}
					""
				end
				case as_ivec2_int_int
					version 440 core
					desc "Write fragment output (ivec4) as ivec2 int int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0, component = 0) out ivec2 dEQP_FragColor_0;
						layout(location = 0, component = 2) out int dEQP_FragColor_1;
						layout(location = 0, component = 3) out int dEQP_FragColor_2;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor_0 = out0.xy;
							dEQP_FragColor_1 = out0.z;
							dEQP_FragColor_2 = out0.w;
						}
					""
				end
				case as_ivec2_ivec2
					version 440 core
					desc "Write fragment output (ivec4) as ivec2 ivec2."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0, component = 0) out ivec2 dEQP_FragColor_0;
						layout(location = 0, component = 2) out ivec2 dEQP_FragColor_1;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor_0 = out0.xy;
							dEQP_FragColor_1 = out0.zw;
						}
					""
				end
				case as_ivec3_int
					version 440 core
					desc "Write fragment output (ivec4) as ivec3 int."
					output_color ivec4
					values
					{
						input ivec4 in0		= [ ivec4(2, 4, 13, 12) | ivec4(7, 3, 2, 11) | ivec4(6, 2, 9, 5) | ivec4(10, 15, 1, 9) ];
						output ivec4 out0	= [ ivec4(4, 8, 26, 24) | ivec4(14, 6, 4, 22) | ivec4(12, 4, 18, 10) | ivec4(20, 30, 2, 18) ];
					}
					vertex ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) in vec4 dEQP_Position;
						layout(location = 1) in ivec4 in0;
						layout(location = 0) out ivec4 var0;

						void main()
						{
							var0 = in0 + in0;
							${VERTEX_OUTPUT}
						}
					""
					fragment ""
						#version 440 core
						precision highp float;
						precision highp int;
						layout(location = 0) flat in ivec4 var0;
						layout(location = 0, component = 0) out ivec3 dEQP_FragColor_0;
						layout(location = 0, component = 3) out int dEQP_FragColor_1;

						void main()
						{
							ivec4 out0 = var0;
							dEQP_FragColor_0 = out0.xyz;
							dEQP_FragColor_1 = out0.w;
						}
					""
				end
			end
		end
	end
end
