
# Varying tests
group varying "Varying linkage"

	# Linking rules
	group rules "Varying linking rules"
		# declared in vertex shader, no reference in frag shader
		case vertex_declare
			version 310 es
			desc "varying declared in vertex shader, no reference in fragment shader"
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump float var;
				void main()
				{
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				void main()
				{
					${FRAG_COLOR} = vec4(1.0);
				}
			""
		end

		# declared in vertex shader, declared in frag shader
		case both_declare
			version 310 es
			desc "varying declared in both vertex and fragment shader, but not used"
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump float var;
				void main()
				{
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				layout(location = 0) in mediump float var;
				${FRAGMENT_DECLARATIONS}
				void main()
				{
					${FRAG_COLOR} = vec4(1.0);
				}
			""
		end

		# declared in vertex shader, static use in frag shader
		case vertex_declare_fragment_use
			version 310 es
			desc "varying declared in both shaders, statically used in fragment shader"
			values { uniform bool u_false = false; }
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump float var;
				void main()
				{
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				layout(location = 0) in mediump float var;
				${FRAGMENT_DECLARATIONS}
				void main()
				{
					if (u_false)
						${FRAG_COLOR} = vec4(var);
					else
						${FRAG_COLOR} = vec4(1.0);
				}
			""
		end

		# static use in vertex shader, no reference in fragment shader
		case vertex_use_fragment_declare
			version 310 es
			desc "varying declared and statically used in vertex shader, no reference in fragment shader"
			values { uniform bool u_false = false; }
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump float var;
				void main()
				{
					if (u_false)
						var = 1.0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				void main()
				{
					${FRAG_COLOR} = vec4(1.0);
				}
			""
		end

		# static use in vertex shader, declared in fragment shader
		case vertex_use_declare_fragment
			version 310 es
			desc "varying declared and statically used in vertex shader, only declared in fragment shader"
			values { uniform bool u_false = false; }
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump float var;
				void main()
				{
					if (u_false)
						var = 1.0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				layout(location = 0) in mediump float var;
				${FRAGMENT_DECLARATIONS}
				void main()
				{
					${FRAG_COLOR} = vec4(1.0);
				}
			""
		end

		# static use in vertex shader, used in fragment shader
		case vertex_use_fragment_use
			version 310 es
			desc "varying statically used in both vertex and fragment shader"
			values { uniform bool u_false = false; }
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump float var;
				void main()
				{
					if (u_false)
						var = 1.0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mediump float var;
				void main()
				{
					if (u_false)
						${FRAG_COLOR} = vec4(var);
					else
						${FRAG_COLOR} = vec4(1.0);
				}
			""
		end

		# differing precision tests
		case differing_precision_1
			version 310 es
			desc "varying declared as highp in vertex shader, but mediump in fragment shader"
			values
			{
				input float in0		= [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
				output float out0	= [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
			}

			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out highp float var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mediump float var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		# differing precision tests
		case differing_precision_2
			version 310 es
			desc "varying declared as highp in vertex shader, but lowp in fragment shader"
			values
			{
				input float in0		= [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
				output float out0	= [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
			}

			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out highp vec2 var;
				void main()
				{
					var = vec2(in0, 2.0*in0);
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in lowp vec2 var;
				void main()
				{
					out0 = var.y - var.x;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		# differing precision tests
		case differing_precision_3
			version 310 es
			desc "varying declared as lowp in vertex shader, but mediump in fragment shader"
			values
			{
				input float in0		= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
				output float out0	= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
			}

			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out lowp vec4 var;
				void main()
				{
					var = vec4(in0, 2.0*in0, -in0, -in0);
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mediump vec4 var;
				void main()
				{
					out0 = var.x + var.y + var.z + var.w;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		# different interpolation
		case differing_interpolation_2
			version 310 es
			desc "varying interpolation different (smooth vs. centroid)"
			values
			{
				input float in0		= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
				output float out0	= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
			}

			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) smooth out mediump float var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) centroid in mediump float var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		# differing name (linking is done by location only in SPIR-V)
		case differing_name_1
			version 310 es
			desc "varying declared with matching location but different name"
			values
			{
				input float in0		= [ 2.0 | 5.0 | -3.0 | 4.0 ];
				input float in1		= [ 4.0 | 1.0 | -0.5 | 2.0 ];
				output float out0	= [ -2.0 | 4.0 | -2.5 | 2.0 ];
			}

			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out highp float vtxVarB;
				layout(location = 2) out highp float vtxVarA;
				void main()
				{
					vtxVarA = in0;
					vtxVarB = in1;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 2) in highp float fragVarA;
				layout(location = 0) in highp float fragVarB;
				void main()
				{
					out0 = fragVarA - fragVarB;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		# differing name (linking is done by location only in SPIR-V)
		case differing_name_2
			version 310 es
			desc "varying declared with matching location but different name"
			values
			{
				input float in0		= [ 2.0 | 5.0 | -3.0 | 4.0 ];
				input float in1		= [ 4.0 | 1.0 | -0.5 | 2.0 ];
				output float out0	= [ -2.0 | 4.0 | -2.5 | 2.0 ];
			}

			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out highp float varA;
				layout(location = 2) out highp float varB;
				void main()
				{
					varA = in0;
					varB = in1;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 2) in highp float varA;
				layout(location = 0) in highp float varB;
				void main()
				{
					out0 = varB - varA;
					${FRAGMENT_OUTPUT}
				}
			""
		end
	end

	group basic_types "Basic varying types"
		case float
			version 310 es
			desc "varying of type float"
			values
			{
				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump float var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in float var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case vec2
			version 310 es
			desc "varying of type vec2"
			values
			{
				input vec2 in0		= [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
				output vec2 out0	= [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump vec2 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in vec2 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case vec3
			version 310 es
			desc "varying of type vec3"
			values
			{
				input vec3 in0		= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
				output vec3 out0	= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump vec3 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in vec3 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case vec4
			version 310 es
			desc "varying of type vec4"
			values
			{
				input vec4 in0		= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
				output vec4 out0	= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump vec4 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in vec4 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat2
			version 310 es
			desc "varying of type mat2"
			values
			{
				input mat2 in0		= [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
				output mat2 out0	= [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump mat2 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mat2 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat2x3
			version 310 es
			desc "varying of type mat2x3"
			values
			{
				input mat2x3 in0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
				output mat2x3 out0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump mat2x3 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mat2x3 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat2x4
			version 310 es
			desc "varying of type mat2x4"
			values
			{
				input mat2x4 in0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
				output mat2x4 out0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump mat2x4 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mat2x4 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat3x2
			version 310 es
			desc "varying of type mat3x2"
			values
			{
				input mat3x2 in0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
				output mat3x2 out0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump mat3x2 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mat3x2 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat3
			version 310 es
			desc "varying of type mat3"
			values
			{
				input mat3 in0		= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
				output mat3 out0	= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump mat3 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mat3 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat3x4
			version 310 es
			desc "varying of type mat3x4"
			values
			{
				input mat3x4 in0	= [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
				output mat3x4 out0	= [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump mat3x4 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mat3x4 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat4x2
			version 310 es
			desc "varying of type mat4x2"
			values
			{
				input mat4x2 in0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
				output mat4x2 out0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump mat4x2 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mat4x2 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat4x3
			version 310 es
			desc "varying of type mat4x3"
			values
			{
				input mat4x3 in0	= [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
				output mat4x3 out0	= [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump mat4x3 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mat4x3 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat4
			version 310 es
			desc "varying of type mat4"
			values
			{
				input mat4 in0		= [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
				output mat4 out0	= [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) out mediump mat4 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in mat4 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case int
			version 310 es
			desc "varying of type int"
			values
			{
				input int in0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
				output int out0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) flat out mediump int var;
				void main()
				{
					${VERTEX_SETUP}
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) flat in int var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case ivec2
			version 310 es
			desc "varying of type ivec2"
			values
			{
				input ivec2 in0		= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
				output ivec2 out0	= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) flat out mediump ivec2 var;
				void main()
				{
					${VERTEX_SETUP}
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) flat in ivec2 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case ivec3
			version 310 es
			desc "varying of type ivec3"
			values
			{
				input ivec3 in0		= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
				output ivec3 out0	= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) flat out mediump ivec3 var;
				void main()
				{
					${VERTEX_SETUP}
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) flat in ivec3 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case ivec4
			version 310 es
			desc "varying of type ivec4"
			values
			{
				input ivec4 in0		= [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
				output ivec4 out0	= [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) flat out mediump ivec4 var;
				void main()
				{
					${VERTEX_SETUP}
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) flat in ivec4 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case uint
			version 310 es
			desc "varying of type int"
			values
			{
				input uint in0			= [ 1 | 2 | 3 | 16 ];
				output uint out0		= [ 1 | 2 | 3 | 16 ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) flat out mediump uint var;
				void main()
				{
					${VERTEX_SETUP}
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) flat in uint var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case uvec2
			version 310 es
			desc "varying of type uvec2"
			values
			{
				input uvec2 in0		= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
				output uvec2 out0	= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) flat out mediump uvec2 var;
				void main()
				{
					${VERTEX_SETUP}
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) flat in uvec2 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case uvec3
			version 310 es
			desc "varying of type uvec3"
			values
			{
				input uvec3 in0		= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
				output uvec3 out0	= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) flat out mediump uvec3 var;
				void main()
				{
					${VERTEX_SETUP}
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) flat in uvec3 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case uvec4
			version 310 es
			desc "varying of type uvec4"
			values
			{
				input uvec4 in0		= [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
				output uvec4 out0	= [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) flat out mediump uvec4 var;
				void main()
				{
					${VERTEX_SETUP}
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) flat in uvec4 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end
	end

	group struct "Structure varyings"
		case float
			version 310 es
			desc "varying of type float inside struct"
			values
			{
				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump float a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump float a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case vec2
			version 310 es
			desc "varying of type vec2 inside struct"
			values
			{
				input vec2 in0		= [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
				output vec2 out0	= [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump vec2 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump vec2 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case vec3
			version 310 es
			desc "varying of type vec3 inside struct"
			values
			{
				input vec3 in0		= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
				output vec3 out0	= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump vec3 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump vec3 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case vec4
			version 310 es
			desc "varying of type vec4 inside struct"
			values
			{
				input vec4 in0		= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
				output vec4 out0	= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump vec4 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump vec4 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat2
			version 310 es
			desc "varying of type mat2 inside struct"
			values
			{
				input mat2 in0		= [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
				output mat2 out0	= [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump mat2 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump mat2 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat2x3
			version 310 es
			desc "varying of type mat2x3 inside struct"
			values
			{
				input mat2x3 in0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
				output mat2x3 out0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump mat2x3 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump mat2x3 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat2x4
			version 310 es
			desc "varying of type mat2x4 inside struct"
			values
			{
				input mat2x4 in0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
				output mat2x4 out0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump mat2x4 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump mat2x4 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat3x2
			version 310 es
			desc "varying of type mat3x2 inside struct"
			values
			{
				input mat3x2 in0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
				output mat3x2 out0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump mat3x2 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump mat3x2 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat3
			version 310 es
			desc "varying of type mat3 inside struct"
			values
			{
				input mat3 in0		= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
				output mat3 out0	= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump mat3 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump mat3 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat3x4
			version 310 es
			desc "varying of type mat3x4 inside struct"
			values
			{
				input mat3x4 in0	= [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
				output mat3x4 out0	= [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump mat3x4 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump mat3x4 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat4x2
			version 310 es
			desc "varying of type mat4x2 inside struct"
			values
			{
				input mat4x2 in0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
				output mat4x2 out0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump mat4x2 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump mat4x2 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat4x3
			version 310 es
			desc "varying of type mat4x3 inside struct"
			values
			{
				input mat4x3 in0	= [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
				output mat4x3 out0	= [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump mat4x3 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump mat4x3 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case mat4
			version 310 es
			desc "varying of type mat4 inside struct"
			values
			{
				input mat4 in0		= [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
				output mat4 out0	= [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump mat4 a; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump mat4 a; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case int
			version 310 es
			desc "varying of type int inside struct"
			values
			{
				input int in0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
				output int out0		= [ -1 | -25 | 1 | 2 | 3 | 16 ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump int a; };
				layout(location = 0) flat out S var;
				void main()
				{
					${VERTEX_SETUP}
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				struct S { mediump int a; };
				layout(location = 0) flat in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case ivec2
			version 310 es
			desc "varying of type ivec2 inside struct"
			values
			{
				input ivec2 in0		= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
				output ivec2 out0	= [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump ivec2 a; };
				layout(location = 0) flat out S var;
				void main()
				{
					${VERTEX_SETUP}
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				struct S { mediump ivec2 a; };
				layout(location = 0) flat in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case ivec3
			version 310 es
			desc "varying of type ivec3 inside struct"
			values
			{
				input ivec3 in0		= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
				output ivec3 out0	= [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump ivec3 a; };
				layout(location = 0) flat out S var;
				void main()
				{
					${VERTEX_SETUP}
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				struct S { mediump ivec3 a; };
				layout(location = 0) flat in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case ivec4
			version 310 es
			desc "varying of type ivec4 inside struct"
			values
			{
				input ivec4 in0		= [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
				output ivec4 out0	= [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump ivec4 a; };
				layout(location = 0) flat out S var;
				void main()
				{
					${VERTEX_SETUP}
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				struct S { mediump ivec4 a; };
				layout(location = 0) flat in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case uint
			version 310 es
			desc "varying of type uint in struct"
			values
			{
				input uint in0			= [ 1 | 2 | 3 | 16 ];
				output uint out0		= [ 1 | 2 | 3 | 16 ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump uint a; };
				layout(location = 0) flat out S var;
				void main()
				{
					${VERTEX_SETUP}
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				struct S { mediump uint a; };
				layout(location = 0) flat in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case uvec2
			version 310 es
			desc "varying of type uvec2 inside struct"
			values
			{
				input uvec2 in0		= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
				output uvec2 out0	= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump uvec2 a; };
				layout(location = 0) flat out S var;
				void main()
				{
					${VERTEX_SETUP}
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				struct S { mediump uvec2 a; };
				layout(location = 0) flat in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case uvec3
			version 310 es
			desc "varying of type uvec3 inside struct"
			values
			{
				input uvec3 in0		= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
				output uvec3 out0	= [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump uvec3 a; };
				layout(location = 0) flat out S var;
				void main()
				{
					${VERTEX_SETUP}
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				struct S { mediump uvec3 a; };
				layout(location = 0) flat in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case uvec4
			version 310 es
			desc "varying of type uvec4 inside struct"
			values
			{
				input uvec4 in0		= [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
				output uvec4 out0	= [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump uvec4 a; };
				layout(location = 0) flat out S var;
				void main()
				{
					${VERTEX_SETUP}
					var.a = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				struct S { mediump uvec4 a; };
				layout(location = 0) flat in S var;
				void main()
				{
					out0 = var.a;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case float_vec3
			version 310 es
			desc "varyings of type float and vec3 inside struct"
			values
			{
				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
				input vec3 in1		= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
				output vec3 out1	= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump float a; highp vec3 b; };
				layout(location = 0) out S var;
				void main()
				{
					var.a = in0;
					var.b = in1;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump float a; highp vec3 b; };
				layout(location = 0) in S var;
				void main()
				{
					out0 = var.a;
					out1 = var.b;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case float_uvec2_vec3
			version 310 es
			desc "varyings of type float and vec3 inside struct"
			values
			{
				input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
				output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
				input uvec2 in1		= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
				output uvec2 out1	= [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ];
				input vec3 in2		= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
				output vec3 out2	= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				struct S { mediump float a; highp uvec2 b; highp vec3 c; };
				layout(location = 0) flat out S var;
				void main()
				{
					${VERTEX_SETUP}
					var.a = in0;
					var.b = in1;
					var.c = in2;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				struct S { mediump float a; highp uvec2 b; highp vec3 c; };
				layout(location = 0) flat in S var;
				void main()
				{
					out0 = var.a;
					out1 = var.b;
					out2 = var.c;
					${FRAGMENT_OUTPUT}
				}
			""
		end
	end

	group interpolation "Varying interpolation modes"
		case smooth
			version 310 es
			desc "varying of type vec4"
			values
			{
				input vec4 in0		= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
				output vec4 out0	= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) smooth out mediump vec4 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) smooth in vec4 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case centroid
			version 310 es
			desc "varying of type vec4"
			values
			{
				input vec4 in0		= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
				output vec4 out0	= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) centroid out mediump vec4 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) centroid in vec4 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end

		case flat
			version 310 es
			desc "varying of type vec4"
			values
			{
				input vec4 in0		= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
				output vec4 out0	= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
			}
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				layout(location = 0) flat out mediump vec4 var;
				void main()
				{
					var = in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) flat in vec4 var;
				void main()
				{
					out0 = var;
					${FRAGMENT_OUTPUT}
				}
			""
		end
	end

	group usage "Varying usage in shaders"
		case readback_1
			version 310 es
			desc "read back (an already written) varying in the vertex shader"
			values
			{
				input float in0		= [ 1.0 | 0.0 | -2.0 | 10.0 ];
				output float out0	= [ 3.0 | 0.0 | -6.0 | 30.0 ];
			}
			vertex ""
				#version 310 es
				precision highp float;
				${VERTEX_DECLARATIONS}
				layout(location = 0) out float var1;
				layout(location = 1) out float var2;

				void main()
				{
					var1 = in0;
					var2 = var1 + in0;
					${VERTEX_OUTPUT}
				}
			""
			fragment ""
				#version 310 es
				precision highp float;
				${FRAGMENT_DECLARATIONS}
				layout(location = 0) in float var1;
				layout(location = 1) in float var2;

				void main()
				{
					out0 = var1 + var2;
					${FRAGMENT_OUTPUT}
				}
			""
		end
	end
end
