# not declared in vertex shader, declared in fragment shader
case varying_1
	desc "varying declared in fragment shader, no reference in vertex shader"
	values { output float out0 = 1.0; }
	vertex ""
		${VERTEX_DECLARATIONS}
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		precision mediump float;
		varying mediump float var;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = 1.0;
			${FRAGMENT_OUTPUT}
		}
	""
end

# declared in vertex shader, no reference in frag shader
case varying_2
	desc "varying declared in vertex shader, no reference in fragment shader"
	vertex ""
		${VERTEX_DECLARATIONS}
		varying mediump float var;
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		void main()
		{
			gl_FragColor = vec4(1.0);
		}
	""
end

# declared in vertex shader, declared in frag shader
case varying_3
	desc "varying declared in both vertex and fragment shader, but not used"
	vertex ""
		${VERTEX_DECLARATIONS}
		varying mediump float var;
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		varying mediump float var;
		void main()
		{
			gl_FragColor = vec4(1.0);
		}
	""
end

# declared in vertex shader, static use in frag shader
case varying_4
	desc "varying declared in both shaders, statically used in fragment shader"
	values { uniform bool u_false = false; }
	vertex ""
		${VERTEX_DECLARATIONS}
		varying mediump float var;
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		varying mediump float var;
		uniform bool u_false;
		void main()
		{
			if (u_false)
				gl_FragColor = vec4(var);
			else
				gl_FragColor = vec4(1.0);
		}
	""
end

# static use in vertex shader, no reference in fragment shader
case varying_5
	desc "varying declared and statically used in vertex shader, no reference in fragment shader"
	values { uniform bool u_false = false; }
	vertex ""
		${VERTEX_DECLARATIONS}
		varying mediump float var;
		void main()
		{
			if (u_false)
				var = 1.0;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		void main()
		{
			gl_FragColor = vec4(1.0);
		}
	""
end

# static use in vertex shader, declared in fragment shader
case varying_6
	desc "varying declared and statically used in vertex shader, only declared in fragment shader"
	values { uniform bool u_false = false; }
	vertex ""
		${VERTEX_DECLARATIONS}
		varying mediump float var;
		void main()
		{
			if (u_false)
				var = 1.0;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		varying mediump float var;
		void main()
		{
			gl_FragColor = vec4(1.0);
		}
	""
end

# static use in vertex shader, used in fragment shader
case varying_7
	desc "varying statically used in both vertex and fragment shader"
	values { uniform bool u_false = false; }
	vertex ""
		${VERTEX_DECLARATIONS}
		varying mediump float var;
		void main()
		{
			if (u_false)
				var = 1.0;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		${FRAGMENT_DECLARATIONS}
		varying mediump float var;
		void main()
		{
			if (u_false)
				gl_FragColor = vec4(var);
			else
				gl_FragColor = vec4(1.0);
		}
	""
end

case varying_type_float
	desc "varying of type float"
	values
	{
		input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
		output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		varying mediump float var;
		void main()
		{
			var = in0;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		precision mediump float;
		${FRAGMENT_DECLARATIONS}
		varying float var;
		void main()
		{
			out0 = var;
			${FRAGMENT_OUTPUT}
		}
	""
end

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

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

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

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

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

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

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

	vertex ""
		${VERTEX_DECLARATIONS}
		varying highp float var;
		void main()
		{
			var = in0;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		precision mediump float;
		${FRAGMENT_DECLARATIONS}
		varying mediump float var;
		void main()
		{
			out0 = var;
			${FRAGMENT_OUTPUT}
		}
	""
end

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

	vertex ""
		${VERTEX_DECLARATIONS}
		varying highp vec2 var;
		void main()
		{
			var = vec2(in0, 2.0*in0);
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		precision mediump float;
		${FRAGMENT_DECLARATIONS}
		varying lowp vec2 var;
		void main()
		{
			out0 = var.y - var.x;
			${FRAGMENT_OUTPUT}
		}
	""
end

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

	vertex ""
		${VERTEX_DECLARATIONS}
		varying lowp vec4 var;
		void main()
		{
			var = vec4(in0, 2.0*in0, -in0, -in0);
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		precision mediump float;
		${FRAGMENT_DECLARATIONS}
		varying mediump vec4 var;
		void main()
		{
			out0 = var.x + var.y + var.z + var.w;
			${FRAGMENT_OUTPUT}
		}
	""
end

# mismatched type, static use but no runtime use in the fragment shader
case varying_type_mismatch_1
	desc "varying type mismatch (float vs. vec2), static use but no runtime use in the fragment shader"
	expect link_fail
	vertex ""
		${VERTEX_DECLARATIONS}
		varying mediump float var;
		void main()
		{
			var = 2.0;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		varying mediump vec2 var;
		void main()
		{
			if (false)
			{
				gl_FragColor = vec4(var.y);
			}
			else
			{
				${FRAG_COLOR} = vec4(1.0);
			}
		}
	""
end

# mismatched type, varyings used
case varying_type_mismatch_2
	desc "varying type mismatch (float vs. vec2)"
	expect link_fail
	vertex ""
		${VERTEX_DECLARATIONS}
		varying mediump float var;
		void main()
		{
			var = 2.0;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		varying mediump vec2 var;
		void main()
		{
			gl_FragColor = var.xyyx;
		}
	""
end

# no declaration in vertex shader, but static use in fragment
case varying_illegal_usage_1
	desc "varying not declared in vertex shader, but statically used in fragment shader"
	expect link_fail
	vertex ""
		${VERTEX_DECLARATIONS}
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		varying mediump float var;
		void main()
		{
			gl_FragColor = vec4(var);
		}
	""
end

# integer varyings not allowed
case invalid_varying_type_int
	desc "integer varying used"
	expect compile_fail
	vertex ""
		${VERTEX_DECLARATIONS}
		varying mediump int var;
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		varying mediump int var;
		void main()
		{
			gl_FragColor = vec4(1.0);
		}
	""
end

# bool varyings not allowed
case invalid_varying_type_bool
	desc "boolean varying used"
	expect compile_fail
	vertex ""
		${VERTEX_DECLARATIONS}
		varying bool var;
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		varying bool var;
		void main()
		{
			gl_FragColor = vec4(1.0);
		}
	""
end

# struct varyings not allowed
case invalid_varying_type_struct
	desc "struct varying used"
	expect compile_fail
	vertex ""
		${VERTEX_DECLARATIONS}
		varying struct { mediump float foo; } var;
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		varying struct { mediump float foo; } var;
		void main()
		{
			gl_FragColor = vec4(1.0);
		}
	""
end

case varying_readback_1
	desc "read back (an already written) varying in the vertex shader"
	values
	{
		input float in0		= [ 1.0 | 0.0 | -2.0 | 10.0 ];
		output float out0	= [ 3.0 | 0.0 | -6.0 | 30.0 ];
	}
	vertex ""
		precision mediump float;
		${VERTEX_DECLARATIONS}
		varying float var1;
		varying float var2;

		void main()
		{
			var1 = in0;
			var2 = var1 + in0;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		precision mediump float;
		${FRAGMENT_DECLARATIONS}
		varying float var1;
		varying float var2;

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

case varying_writeback_1
	desc "write back a varying in the fragment shader"
	expect compile_fail
	vertex ""
		precision mediump float;
		${VERTEX_DECLARATIONS}
		varying float var1;
		varying float var2;

		void main()
		{
			var1 = in0;
			var2 = var1 + in0;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
		precision mediump float;
		${FRAGMENT_DECLARATIONS}
		varying float var1;
		varying float var2;

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

# Struct linkage handling
case uniform_struct
	desc "Same uniform struct in both shaders"
	values {
		uniform float val.a = 1.0;
		uniform float val.b = 2.0;
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump float a; mediump float b;};
		uniform Struct val;
		varying mediump float dummy;
		void main()
		{
			dummy = val.a + val.b;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump float a; mediump float b;};
		uniform Struct val;
		varying mediump float dummy;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = val.b + val.a;
			out0 = out0 + dummy;
			out0 = out0 - dummy;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_vertex_only
	desc "Uniform struct declared in both, used only in vertex."
	values {
		uniform float val.a = 1.0;
		uniform float val.b = 2.0;
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump float a; mediump float b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a + val.b;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump float a; mediump float b;};
		uniform Struct val;
		varying mediump float res;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = res;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_fragment_only
	desc "Uniform struct declared in both, used only in fragment."
	values {
		uniform float val.a = 1.0;
		uniform float val.b = 2.0;
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump float a; mediump float b;};
		uniform Struct val;
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump float a; mediump float b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = val.a + val.b;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_partial
	desc "Uniform struct declared in both, used partially in both."
	values {
		uniform float val.a = 1.0;
		uniform float val.b = 2.0;
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump float a; mediump float b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump float a; mediump float b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.b;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_vec4
	desc "Same uniform struct in both shaders. Datatype vec4"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump vec4 b;};
		uniform Struct val;
		varying mediump float dummy;
		void main()
		{
			dummy = val.a.x + val.b.y;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump vec4 b;};
		uniform Struct val;
		varying mediump float dummy;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = val.b.y + val.a.x;
			out0 = out0 + dummy;
			out0 = out0 - dummy;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_vertex_only_vec4
	desc "Uniform struct declared in both, used only in vertex. Datatype vec4	"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump vec4 b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a.x + val.b.y;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump vec4 b;};
		uniform Struct val;
		varying mediump float res;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = res;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_fragment_only_vec4
	desc "Uniform struct declared in both, used only in fragment. Datatype vec4"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump vec4 b;};
		uniform Struct val;
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump vec4 b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = val.a.x + val.b.y;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_partial_vec4
	desc "Uniform struct declared in both, used partially in both. Datatype vec4"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump vec4 b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a.x;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump vec4 b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.b.y;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_vec4_vec3
	desc "Same uniform struct in both shaders. Datatype vec4 and vec3"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump vec3 b;};
		uniform Struct val;
		varying mediump float dummy;
		void main()
		{
			dummy = val.a.x + val.b.y;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump vec3 b;};
		uniform Struct val;
		varying mediump float dummy;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = val.b.y + val.a.x;
			out0 = out0 + dummy;
			out0 = out0 - dummy;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_vertex_only_vec4_vec3
	desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and vec3"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump vec3 b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a.x + val.b.y;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump vec3 b;};
		uniform Struct val;
		varying mediump float res;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = res;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_fragment_only_vec4_vec3
	desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and vec3"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump vec3 b;};
		uniform Struct val;
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump vec3 b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = val.a.x + val.b.y;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_partial_vec4_vec3
	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and vec3"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump vec3 b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a.x;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump vec3 b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.b.y;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_vec4_float
	desc "Same uniform struct in both shaders. Datatype vec4 and float"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform float val.b = 2.0;
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump float b;};
		uniform Struct val;
		varying mediump float dummy;
		void main()
		{
			dummy = val.a.x + val.b;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump float b;};
		uniform Struct val;
		varying mediump float dummy;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = val.b + val.a.x;
			out0 = out0 + dummy;
			out0 = out0 - dummy;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_vertex_only_vec4_float
	desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and float"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform float val.b = 2.0;
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump float b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a.x + val.b;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump float b;};
		uniform Struct val;
		varying mediump float res;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = res;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_fragment_only_vec4_float
	desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and float"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform float val.b = 2.0;
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump float b;};
		uniform Struct val;
		void main()
		{
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump float b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		void main()
		{
			out0 = val.a.x + val.b;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_partial_vec4_float
	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and float"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform float val.b = 2.0;
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec4 a; mediump float b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a.x;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a; mediump float b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.b;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_partial_vec4_struct
	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec4"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform vec4 val.b.c = vec4(1.0, 2.0, 3.0, 4.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Inner {mediump vec4 c;};
		struct Struct {mediump vec4 a; Inner b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a.x;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Inner {mediump vec4 c;};
		struct Struct {mediump vec4 a; Inner b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.b.c.y;
			${FRAGMENT_OUTPUT}
		}
	""
end



case uniform_struct_partial_vec4_vec3_struct
	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec3"
	values {
		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
		uniform vec3 val.b.c = vec3(1.0, 2.0, 3.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Inner {mediump vec3 c;};
		struct Struct {mediump vec4 a; Inner b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a.x;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Inner {mediump vec3 c;};
		struct Struct {mediump vec4 a; Inner b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.b.c.y;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_partial_vec2_vec3
	desc "Uniform struct declared in both, used partially in both. Datatype vec2 and vec3"
	values {
		uniform vec2 val.a = vec2(1.0, 2.0);
		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec2 a; mediump vec3 b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a.x;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec2 a; mediump vec3 b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.b.y;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_partial_vec2_int
	desc "Uniform struct declared in both, used partially in both. Datatype vec2 and int"
	values {
		uniform vec2 val.a = vec2(1.0, 2.0);
		uniform int val.b = 2;
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec2 a; mediump int b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a.x;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec2 a; mediump int b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + float(val.b);
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_partial_int_float
	desc "Uniform struct declared in both, used partially in both. Datatype int and float"
	values {
		uniform float val.a = 1.0;
		uniform int val.b = 2;
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump float a; mediump int b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump float a; mediump int b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + float(val.b);
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_partial_bvec2_vec2
	desc "Uniform struct declared in both, used partially in both. Datatype bvec2 and vec2"
	values {
		uniform bvec2 val.a = bvec2(true, true);
		uniform vec2 val.b = vec2(1.0, 2.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {bvec2 a; mediump vec2 b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = float(val.a.x);
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {bvec2 a; mediump vec2 b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.b.y;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_partial_ivec2_vec2
	desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and vec2"
	values {
		uniform ivec2 val.a = ivec2(1, 2);
		uniform vec2 val.b = vec2(1.0, 2.0);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump ivec2 a; mediump vec2 b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = vec2(val.a).x;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump ivec2 a; mediump vec2 b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.b.y;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_partial_ivec2_ivec2
	desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and ivec2"
	values {
		uniform ivec2 val.a = ivec2(1, 2);
		uniform ivec2 val.b = ivec2(1, 2);
		output float out0 = 3.0;
	}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump ivec2 a; mediump ivec2 b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = vec2(val.a).x;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump ivec2 a; mediump ivec2 b;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + vec2(val.b).y;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_type_conflict_1
	desc "Fragment struct has one less member than fragment version"
	expect link_fail
	values {output float out0 = 3.0;}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump float a; mediump float b;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump float a;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.a;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_type_conflict_2
	desc "Vertex struct has int, fragment struct has float."
	expect link_fail
	values {output float out0 = 3.0;}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump int a;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = float(val.a);
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump float a;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = val.a;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_type_conflict_3
	desc "Vertex struct has vec3, fragment struct has vec4."
	expect link_fail
	values {output float out0 = 3.0;}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump vec3 a;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = float(val.a.x);
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump vec4 a;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = val.a.x;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_precision_conflict_1
	desc "Vertex side struct has highp, fragment side struct mediump."
	expect link_fail
	values {output float out0 = 3.0;}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {highp float a;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump float a;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = val.a;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_precision_conflict_2
	desc "Vertex side struct has mediump, fragment side struct lowp."
	expect link_fail
	values {output float out0 = 3.0;}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {mediump float a;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {lowp float a;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = val.a;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_precision_conflict_3
	desc "Vertex side struct has lowp, fragment side struct mediump."
	expect link_fail
	values {output float out0 = 3.0;}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {lowp float a;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {mediump float a;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = val.a;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_precision_conflict_4
	desc "Vertex side struct has lowp, fragment side struct implicit mediump."
	expect link_fail
	values {output float out0 = 3.0;}
	vertex ""
		${VERTEX_DECLARATIONS}
		struct Struct {lowp float a;};
		uniform Struct val;
		varying mediump float res;
		void main()
		{
			res = val.a;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	    precision mediump float;
		struct Struct {float a;};
		uniform Struct val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = val.a;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_use_case_rip
	desc "Complex Light struct from use case tests."
	values {
		uniform float val.constantAttenuation = 1.0;
		uniform float val.quadraticAttenuation = 1.0;
	    output float out0 = 2.0;
    }
	vertex ""
		 struct Light
		 {
		     mediump vec3	color;
			 highp vec4		position;
			 highp vec3		direction;
			 mediump float	constantAttenuation;
			 mediump float	linearAttenuation;
			 mediump float	quadraticAttenuation;
	    };
		${VERTEX_DECLARATIONS}
		uniform Light val;
		varying mediump float res;
		void main()
		{
			res = val.constantAttenuation;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	     precision mediump float;
		 struct Light
		 {
		     mediump vec3	color;
			 highp vec4		position;
			 highp vec3		direction;
			 mediump float	constantAttenuation;
			 mediump float	linearAttenuation;
			 mediump float	quadraticAttenuation;
	    };
		struct Struct {float a;};
		uniform Light val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.quadraticAttenuation;
			${FRAGMENT_OUTPUT}
		}
	""
end

case uniform_struct_use_case_rip_sans_highp
	desc "Complex Light struct from use case tests, without highp usage"
	values {
		uniform float val.constantAttenuation = 1.0;
		uniform float val.quadraticAttenuation = 1.0;
	    output float out0 = 2.0;
    }
	vertex ""
		 struct Light
		 {
		     mediump vec3	color;
			 mediump vec4	position;
			 mediump vec3	direction;
			 mediump float	constantAttenuation;
			 mediump float	linearAttenuation;
			 mediump float	quadraticAttenuation;
	    };
		${VERTEX_DECLARATIONS}
		uniform Light val;
		varying mediump float res;
		void main()
		{
			res = val.constantAttenuation;
			${VERTEX_OUTPUT}
		}
	""
	fragment ""
	     precision mediump float;
		 struct Light
		 {
		     mediump vec3	color;
			 mediump vec4	position;
			 mediump vec3	direction;
			 mediump float	constantAttenuation;
			 mediump float	linearAttenuation;
			 mediump float	quadraticAttenuation;
	    };
		struct Struct {float a;};
		uniform Light val;
		${FRAGMENT_DECLARATIONS}
		varying mediump float res;
		void main()
		{
			out0 = res + val.quadraticAttenuation;
			${FRAGMENT_OUTPUT}
		}
	""
end
