
group types "Types"
	case float
		version 310 es
		desc "varying of type float"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump float vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump float vtx_var[];
			out mediump float tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump float tc_out[];
			out mediump float te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in mediump float te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case vec2
		version 310 es
		desc "varying of type vec2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump vec2 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump vec2 vtx_var[];
			out mediump vec2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump vec2 tc_out[];
			out mediump vec2 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in vec2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case vec3
		version 310 es
		desc "varying of type vec3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump vec3 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump vec3 vtx_var[];
			out mediump vec3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump vec3 tc_out[];
			out mediump vec3 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in vec3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case vec4
		version 310 es
		desc "varying of type vec4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump vec4 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump vec4 vtx_var[];
			out mediump vec4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump vec4 tc_out[];
			out mediump vec4 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in vec4 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat2
		version 310 es
		desc "varying of type mat2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump mat2 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump mat2 vtx_var[];
			out mediump mat2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump mat2 tc_out[];
			out mediump mat2 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in mat2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat2x3
		version 310 es
		desc "varying of type mat2x3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump mat2x3 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump mat2x3 vtx_var[];
			out mediump mat2x3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump mat2x3 tc_out[];
			out mediump mat2x3 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in mat2x3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat2x4
		version 310 es
		desc "varying of type mat2x4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump mat2x4 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump mat2x4 vtx_var[];
			out mediump mat2x4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump mat2x4 tc_out[];
			out mediump mat2x4 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in mat2x4 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat3x2
		version 310 es
		desc "varying of type mat3x2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump mat3x2 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump mat3x2 vtx_var[];
			out mediump mat3x2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump mat3x2 tc_out[];
			out mediump mat3x2 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in mat3x2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat3
		version 310 es
		desc "varying of type mat3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump mat3 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump mat3 vtx_var[];
			out mediump mat3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump mat3 tc_out[];
			out mediump mat3 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in mat3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat3x4
		version 310 es
		desc "varying of type mat3x4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump mat3x4 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump mat3x4 vtx_var[];
			out mediump mat3x4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump mat3x4 tc_out[];
			out mediump mat3x4 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in mat3x4 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat4x2
		version 310 es
		desc "varying of type mat4x2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump mat4x2 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump mat4x2 vtx_var[];
			out mediump mat4x2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump mat4x2 tc_out[];
			out mediump mat4x2 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in mat4x2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat4x3
		version 310 es
		desc "varying of type mat4x3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump mat4x3 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump mat4x3 vtx_var[];
			out mediump mat4x3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump mat4x3 tc_out[];
			out mediump mat4x3 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in mat4x3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat4
		version 310 es
		desc "varying of type mat4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			out mediump mat4 vtx_var;
			void main()
			{
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in mediump mat4 vtx_var[];
			out mediump mat4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in mediump mat4 tc_out[];
			out mediump mat4 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in mat4 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case int
		version 310 es
		desc "varying of type int"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			flat out mediump int vtx_var;
			void main()
			{
				${VERTEX_SETUP}
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat in mediump int vtx_var[];
			flat out mediump int tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			flat in mediump int tc_out[];
			flat out mediump int te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			${FRAGMENT_DECLARATIONS}
			flat in int te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case ivec2
		version 310 es
		desc "varying of type ivec2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			flat out mediump ivec2 vtx_var;
			void main()
			{
				${VERTEX_SETUP}
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat in mediump ivec2 vtx_var[];
			flat out mediump ivec2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			flat in mediump ivec2 tc_out[];
			flat out mediump ivec2 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			${FRAGMENT_DECLARATIONS}
			flat in ivec2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case ivec3
		version 310 es
		desc "varying of type ivec3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			flat out mediump ivec3 vtx_var;
			void main()
			{
				${VERTEX_SETUP}
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat in mediump ivec3 vtx_var[];
			flat out mediump ivec3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			flat in mediump ivec3 tc_out[];
			flat out mediump ivec3 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			${FRAGMENT_DECLARATIONS}
			flat in ivec3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case ivec4
		version 310 es
		desc "varying of type ivec4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			flat out mediump ivec4 vtx_var;
			void main()
			{
				${VERTEX_SETUP}
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat in mediump ivec4 vtx_var[];
			flat out mediump ivec4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			flat in mediump ivec4 tc_out[];
			flat out mediump ivec4 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			${FRAGMENT_DECLARATIONS}
			flat in ivec4 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uint
		version 310 es
		desc "varying of type int"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			input uint in0			= [ 1 | 2 | 3 | 16 ];
			output uint out0		= [ 1 | 2 | 3 | 16 ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			flat out mediump uint vtx_var;
			void main()
			{
				${VERTEX_SETUP}
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat in mediump uint vtx_var[];
			flat out mediump uint tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			flat in mediump uint tc_out[];
			flat out mediump uint te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			${FRAGMENT_DECLARATIONS}
			flat in uint te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uvec2
		version 310 es
		desc "varying of type uvec2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			flat out mediump uvec2 vtx_var;
			void main()
			{
				${VERTEX_SETUP}
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat in mediump uvec2 vtx_var[];
			flat out mediump uvec2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			flat in mediump uvec2 tc_out[];
			flat out mediump uvec2 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			${FRAGMENT_DECLARATIONS}
			flat in uvec2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uvec3
		version 310 es
		desc "varying of type uvec3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			flat out mediump uvec3 vtx_var;
			void main()
			{
				${VERTEX_SETUP}
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat in mediump uvec3 vtx_var[];
			flat out mediump uvec3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			flat in mediump uvec3 tc_out[];
			flat out mediump uvec3 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			${FRAGMENT_DECLARATIONS}
			flat in uvec3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uvec4
		version 310 es
		desc "varying of type uvec4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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}
			flat out mediump uvec4 vtx_var;
			void main()
			{
				${VERTEX_SETUP}
				vtx_var = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat in mediump uvec4 vtx_var[];
			flat out mediump uvec4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = vtx_var[gl_InvocationID];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			flat in mediump uvec4 tc_out[];
			flat out mediump uvec4 te_out;
			void main()
			{
				te_out = tc_out[2];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			${FRAGMENT_DECLARATIONS}
			flat in uvec4 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case float_struct
		version 310 es
		desc "varying of struct type containing float"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		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 val; };
			out S vtx_var;
			void main()
			{
				${VERTEX_SETUP}
				vtx_var.val = in0;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			struct S { mediump float val; };
			in S vtx_var[];
			out S tc_out[];
			void main()
			{
				tc_out[gl_InvocationID].val = vtx_var[gl_InvocationID].val;
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			struct S { mediump float val; };
			in S tc_out[];
			out S te_out;
			void main()
			{
				te_out.val = tc_out[2].val;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			struct S { mediump float val; };
			in S te_out;
			void main()
			{
				out0 = te_out.val;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case float_array
		version 310 es
		desc "varying of float array type"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
		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}
			out VtxOutBlockName { mediump float vtx_var[2]; } instanceName;
			void main()
			{
				${VERTEX_SETUP}
				instanceName.vtx_var[0] = in0.x;
				instanceName.vtx_var[1] = in0.y;
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			in VtxOutBlockName { mediump float vtx_var[2]; } inInstanceName[];
			out TCOutBlockName { mediump float vtx_var[2]; } outInstanceName[];
			void main()
			{
				outInstanceName[gl_InvocationID].vtx_var[0] = inInstanceName[gl_InvocationID].vtx_var[0];
				outInstanceName[gl_InvocationID].vtx_var[1] = inInstanceName[gl_InvocationID].vtx_var[1];
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			in TCOutBlockName { mediump float vtx_var[2]; } inInstanceName[];
			out TEOutBlockName { mediump float vtx_var[2]; } outInstanceName;
			void main()
			{
				outInstanceName.vtx_var[0] = inInstanceName[2].vtx_var[0];
				outInstanceName.vtx_var[1] = inInstanceName[2].vtx_var[1];
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in TEOutBlockName { mediump float vtx_var[2]; } inInstanceName;
			void main()
			{
				out0 = vec2(inInstanceName.vtx_var[0], inInstanceName.vtx_var[1]);
				${FRAGMENT_OUTPUT}
			}
		""
	end
end
