group types "Types"

	case float
		version 310 es
		desc "uniform of type float"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform float val	= -1.25;
			output float out0	= -1.25;
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump float geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mediump float geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case vec2
		version 310 es
		desc "uniform of type vec2"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform vec2 val	= vec2(-1.25, 1.25);
			output vec2 out0	= vec2(-1.25, 1.25);
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump vec2 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in vec2 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case vec3
		version 310 es
		desc "uniform of type vec3"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform vec3 val	= vec3(-25.65, -7.25, 14.21);
			output vec3 out0	= vec3(-25.65, -7.25, 14.21);
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump vec3 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in vec3 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case vec4
		version 310 es
		desc "uniform of type vec4"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform vec4 val	= vec4(-1.25, 1.25, -9.5, -12.2);
			output vec4 out0	= vec4(-1.25, 1.25, -9.5, -12.2);
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump vec4 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in vec4 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat2
		version 310 es
		desc "uniform of type mat2"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform mat2 val	= mat2(-1.25, 1.25, -9.5, -12.2);
			output mat2 out0	= mat2(-1.25, 1.25, -9.5, -12.2);
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump mat2 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat2 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat2x3
		version 310 es
		desc "uniform of type mat2x3"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform mat2x3 val	= [ 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}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump mat2x3 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat2x3 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat2x4
		version 310 es
		desc "uniform of type mat2x4"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform mat2x4 val	= [ 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}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump mat2x4 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat2x4 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat3x2
		version 310 es
		desc "uniform of type mat3x2"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform mat3x2 val	= [ 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}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump mat3x2 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat3x2 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat3
		version 310 es
		desc "uniform of type mat3"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform mat3 val	= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) ];
			output mat3 out0	= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump mat3 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat3 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat3x4
		version 310 es
		desc "uniform of type mat3x4"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform mat3x4 val	= [ 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}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump mat3x4 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat3x4 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat4x2
		version 310 es
		desc "uniform of type mat4x2"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform mat4x2 val	= [ 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}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump mat4x2 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat4x2 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat4x3
		version 310 es
		desc "uniform of type mat4x3"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform mat4x3 val	= [ 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}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump mat4x3 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat4x3 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case mat4
		version 310 es
		desc "uniform of type mat4"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform mat4 val	= [ 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}
			void main()
			{
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			out mediump mat4 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp float;
			${FRAGMENT_DECLARATIONS}
			in mat4 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case int
		version 310 es
		desc "uniform of type int"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform int val		= 3;
			output int out0		= 3;
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			flat out mediump int geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in int geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case ivec2
		version 310 es
		desc "uniform of type ivec2"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform ivec2 val	= [ ivec2(-25, 25) ];
			output ivec2 out0	= [ ivec2(-25, 25) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			flat out mediump ivec2 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in ivec2 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case ivec3
		version 310 es
		desc "uniform of type ivec3"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform ivec3 val	= [ ivec3(-25, 25, -3) ];
			output ivec3 out0	= [ ivec3(-25, 25, -3) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			flat out mediump ivec3 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in ivec3 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case ivec4
		version 310 es
		desc "uniform of type ivec4"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform ivec4 val	= [ ivec4(-25, 25, -3, 3) ];
			output ivec4 out0	= [ ivec4(-25, 25, -3, 3) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			flat out mediump ivec4 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in ivec4 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uint
		version 310 es
		desc "uniform of type int"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform uint val		= [ 3 ];
			output uint out0		= [ 3 ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			flat out mediump uint geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in uint geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uvec2
		version 310 es
		desc "uniform of type uvec2"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform uvec2 val	= [ uvec2(16, 17) ];
			output uvec2 out0	= [ uvec2(16, 17) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			flat out mediump uvec2 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in uvec2 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uvec3
		version 310 es
		desc "uniform of type uvec3"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform uvec3 val	= [ uvec3(16, 17, 18) ];
			output uvec3 out0	= [ uvec3(16, 17, 18) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			flat out mediump uvec3 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in uvec3 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case uvec4
		version 310 es
		desc "uniform of type uvec4"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform uvec4 val	= [ uvec4(16, 17, 18, 19) ];
			output uvec4 out0	= [ uvec4(16, 17, 18, 19) ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			flat out mediump uvec4 geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision highp int;
			${FRAGMENT_DECLARATIONS}
			flat in uvec4 geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end

	case float_struct
		version 310 es
		desc "varying of struct type containing float"
		require extension { "GL_OES_geometry_shader" | "GL_EXT_geometry_shader" } in { geometry }
		values
		{
			uniform float val.val	= [ 2.25 ];
			output float out0		= [ 2.25 ];
		}
		vertex ""
			#version 310 es
			${VERTEX_DECLARATIONS}
			void main()
			{
				${VERTEX_SETUP}
				${VERTEX_OUTPUT}
			}
		""
		geometry ""
			#version 310 es
			${GEOMETRY_DECLARATIONS}
			struct S { mediump float val; };
			uniform S val;
			out mediump float geo_var;
			void main()
			{
				for (int ndx = 0; ndx < gl_in.length(); ++ndx)
				{
					geo_var = val.val;
					gl_Position = gl_in[ndx].gl_Position;
					EmitVertex();
				}
			}
		""
		fragment ""
			#version 310 es
			precision mediump float;
			${FRAGMENT_DECLARATIONS}
			in mediump float geo_var;
			void main()
			{
				out0 = geo_var;
				${FRAGMENT_OUTPUT}
			}
		""
	end
end
