
group types "Types"
	case float
		version 310 es
		desc "uniform of type float"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform float val0	= -1.25;
			uniform float val1	= 1.0;
			output float out0	= 0.75;
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump float tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mediump float te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case vec2
		version 310 es
		desc "uniform of type vec2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform vec2 val0	= [ vec2(-1.25, 1.25) ];
			uniform vec2 val1	= [ vec2(1.0, 1.5) ];
			output vec2 out0	= [ vec2(0.75, 4.25) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump vec2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in vec2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case vec3
		version 310 es
		desc "uniform of type vec3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform vec3 val0	= [ vec3(-1.25, 1.25, -9.5) ];
			uniform vec3 val1	= [ vec3( 1.0, 1.5, 2.5) ];
			output vec3 out0	= [ vec3(0.75, 4.25, -4.5) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump vec3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in vec3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case vec4
		version 310 es
		desc "uniform of type vec4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform vec4 val0	= [ vec4(-1.25, 1.25, -9.5, -12.2) ];
			uniform vec4 val1	= [ vec4(1.0, 1.5, 2.5, -1.0) ];
			output vec4 out0	= [ vec4(0.75, 4.25, -4.5, -14.2) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump vec4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in vec4 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat2
		version 310 es
		desc "uniform of type mat2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform mat2 val0	= [ mat2(-1.25, 1.25, -9.5, -12.2) ];
			uniform mat2 val1	= [ mat2(1.0, 1.5, 2.5, -1.0) ];
			output mat2 out0	= [ mat2(0.75, 4.25, -4.5, -14.2) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump mat2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat2x3
		version 310 es
		desc "uniform of type mat2x3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform mat2x3 val0	= [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
			uniform mat2x3 val1	= [ mat2x3(1.0, 1.5, 2.5, -1.0, 2.0, 1.0) ];
			output mat2x3 out0	= [ mat2x3(0.75, 4.25, -4.5, -14.2, -21.65, -5.25) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump mat2x3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat2x3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat2x4
		version 310 es
		desc "uniform of type mat2x4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform mat2x4 val0	= [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
			uniform mat2x4 val1	= [ mat2x4(1.0, 1.5, 2.5, -1.0, 2.0, 1.0, 3.0, 4.0) ];
			output mat2x4 out0	= [ mat2x4(0.75, 4.25, -4.5, -14.2, -21.65, -5.25, 20.21, -69.7) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump mat2x4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat2x4 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat3x2
		version 310 es
		desc "uniform of type mat3x2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform mat3x2 val0	= [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ];
			uniform mat3x2 val1	= [ mat3x2(1.0, 1.5, 2.5, -1.0, 2.0, 1.0) ];
			output mat3x2 out0	= [ mat3x2(0.75, 4.25, -4.5, -14.2, -21.65, -5.25) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump mat3x2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat3x2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat3
		version 310 es
		desc "uniform of type mat3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform mat3 val0	= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) ];
			uniform mat3 val1	= [ mat3(1.0, 1.5, 2.5, -1.0, 2.0, 1.0, 3.0, 4.0, -1.0) ];
			output mat3 out0	= [ mat3(0.75, 4.25, -4.5, -14.2, -21.65, -5.25, 20.21, -69.7, 7.9) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump mat3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat3x4
		version 310 es
		desc "uniform of type mat3x4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform mat3x4 val0	= [ 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) ];
			uniform mat3x4 val1	= [ mat3x4(1.0, 1.5, 2.5, -1.0, 2.0, 1.0, 3.0, 4.0, -1.0, 3.0, 4.5, -1.5) ];
			output mat3x4 out0	= [ mat3x4(0.75, 4.25, -4.5, -14.2, -21.65, -5.25, 20.21, -69.7, -2.0, 7.0, 8.0, -1.0) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump mat3x4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat3x4 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat4x2
		version 310 es
		desc "uniform of type mat4x2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform mat4x2 val0	= [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ];
			uniform mat4x2 val1	= [ mat4x2(1.0, 1.5, 2.5, -1.0, 2.0, 1.0, 3.0, 4.0) ];
			output mat4x2 out0	= [ mat4x2(0.75, 4.25, -4.5, -14.2, -21.65, -5.25, 20.21, -69.7) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump mat4x2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat4x2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat4x3
		version 310 es
		desc "uniform of type mat4x3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform mat4x3 val0	= [ 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) ];
			uniform mat4x3 val1	= [ mat4x3(1.0, 1.5, 2.5, -1.0, 2.0, 1.0, 3.0, 4.0, -1.0, 3.0, 4.5, -1.5) ];
			output mat4x3 out0	= [ mat4x3(0.75, 4.25, -4.5, -14.2, -21.65, -5.25, 20.21, -69.7, -2.0, 7.0, 8.0, -1.0) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump mat4x3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat4x3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat4
		version 310 es
		desc "uniform of type mat4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform mat4 val0	= [ 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) ];
			uniform mat4 val1	= [ mat4(1.0, 1.5, 2.5, -1.0, 2.0, 1.0, 3.0, 4.0, -1.0, 3.0, 4.5, -1.5, 3.5, 2.0, 5.0, 0.5) ];
			output mat4 out0	= [ mat4(0.75, 4.25, -4.5, -14.2, -21.65, -5.25, 20.21, -69.7, -2.0, 7.0, 8.0, -1.0, 9.25, 6.25, 32.5, 226.0) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			out mediump mat4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2.0 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat4 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case int
		version 310 es
		desc "uniform of type int"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform int val0	= [ -1 ];
			uniform int val1	= [ 2 ];
			output int out0		= [ 3 ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat out mediump int tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in int te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case ivec2
		version 310 es
		desc "uniform of type ivec2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform ivec2 val0	= [ ivec2(-1, 1) ];
			uniform ivec2 val1	= [ ivec2(2, 3) ];
			output ivec2 out0	= [ ivec2(3, 7) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat out mediump ivec2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in ivec2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case ivec3
		version 310 es
		desc "uniform of type ivec3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform ivec3 val0	= [ ivec3(-1, 1, -2) ];
			uniform ivec3 val1	= [ ivec3(2, 3, -2) ];
			output ivec3 out0	= [ ivec3(3, 7, -6) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat out mediump ivec3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in ivec3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case ivec4
		version 310 es
		desc "uniform of type ivec4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform ivec4 val0	= [ ivec4(-1, 1, -2, 2) ];
			uniform ivec4 val1	= [ ivec4(2, 3, -2, 1) ];
			output ivec4 out0	= [ ivec4(3, 7, -6, 4) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat out mediump ivec4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2 * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in ivec4 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uint
		version 310 es
		desc "uniform of type int"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform uint val0	= [ 1 ];
			uniform uint val1	= [ 2 ];
			output uint out0	= [ 5 ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat out mediump uint tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2u * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in uint te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uvec2
		version 310 es
		desc "uniform of type uvec2"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform uvec2 val0	= [ uvec2(1, 1) ];
			uniform uvec2 val1	= [ uvec2(2, 3) ];
			output uvec2 out0	= [ uvec2(5, 7) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat out mediump uvec2 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2u * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in uvec2 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uvec3
		version 310 es
		desc "uniform of type uvec3"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform uvec3 val0	= [ uvec3(1, 1, 2) ];
			uniform uvec3 val1	= [ uvec3(2, 3, 4) ];
			output uvec3 out0	= [ uvec3(5, 7, 10) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat out mediump uvec3 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2u * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in uvec3 te_out;
			void main()
			{
				out0 = te_out;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uvec4
		version 310 es
		desc "uniform of type uvec4"
		require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation }
		values
		{
			uniform uvec4 val0	= [ uvec4(1, 1, 2, 2) ];
			uniform uvec4 val1	= [ uvec4(2, 3, 4, 1) ];
			output uvec4 out0	= [ uvec4(5, 7, 10, 4) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			flat out mediump uvec4 tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = val0;
				${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] + 2u * val1;
				${TESSELLATION_EVALUATION_OUTPUT}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${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
		{
			uniform float u_struct.val	= [ 3.0 ];
			output float out0			= [ 6.0 ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		tessellation_control ""
			#version 310 es
			${TESSELLATION_CONTROL_DECLARATIONS}
			struct S { mediump float val; };
			uniform S u_struct;
			out mediump float tc_out[];
			void main()
			{
				tc_out[gl_InvocationID] = u_struct.val;
				${TESSELLATION_CONTROL_OUTPUT}
			}
		""
		tessellation_evaluation ""
			#version 310 es
			${TESSELLATION_EVALUATION_DECLARATIONS}
			struct S { mediump float val; };
			uniform S u_struct;
			in mediump float tc_out[];
			out mediump float te_out;
			void main()
			{
				te_out = tc_out[2] + u_struct.val;
				${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
end
