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 mediump 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 mediump 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 mediump 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 mediump 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 mediump 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 mediump 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 mediump 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 mediump 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 mediump 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 mediump 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 mediump 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 mediump 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 mediump 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
			${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
			${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
			${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
			${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
			${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
			${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
			${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
			${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
