13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# not declared in vertex shader, declared in fragment shader
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_1
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying declared in fragment shader, no reference in vertex shader"
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values { output float out0 = 1.0; }
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = 1.0;
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# declared in vertex shader, no reference in frag shader
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_2
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying declared in vertex shader, no reference in fragment shader"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl_FragColor = vec4(1.0);
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# declared in vertex shader, declared in frag shader
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_3
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying declared in both vertex and fragment shader, but not used"
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl_FragColor = vec4(1.0);
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# declared in vertex shader, static use in frag shader
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_4
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying declared in both shaders, statically used in fragment shader"
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values { uniform bool u_false = false; }
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform bool u_false;
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (u_false)
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl_FragColor = vec4(var);
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl_FragColor = vec4(1.0);
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# static use in vertex shader, no reference in fragment shader
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_5
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying declared and statically used in vertex shader, no reference in fragment shader"
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values { uniform bool u_false = false; }
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (u_false)
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				var = 1.0;
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl_FragColor = vec4(1.0);
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# static use in vertex shader, declared in fragment shader
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_6
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying declared and statically used in vertex shader, only declared in fragment shader"
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values { uniform bool u_false = false; }
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (u_false)
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				var = 1.0;
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl_FragColor = vec4(1.0);
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# static use in vertex shader, used in fragment shader
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_7
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying statically used in both vertex and fragment shader"
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values { uniform bool u_false = false; }
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (u_false)
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				var = 1.0;
1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (u_false)
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl_FragColor = vec4(var);
1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl_FragColor = vec4(1.0);
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_float
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying of type float"
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = in0;
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying float var;
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var;
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_vec2
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying of type vec2"
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump vec2 var;
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = in0;
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying vec2 var;
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var;
2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_vec3
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying of type vec3"
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values
2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump vec3 var;
2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = in0;
2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying vec3 var;
2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var;
2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_vec4
2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying of type vec4"
2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values
2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump vec4 var;
2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = in0;
2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying vec4 var;
2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var;
2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_mat2
2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying of type mat2"
2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values
2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump mat2 var;
2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = in0;
2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mat2 var;
2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var;
2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_mat3
3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying of type mat3"
3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values
3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump mat3 var;
3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = in0;
3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mat3 var;
3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var;
3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_mat4
3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying of type mat4"
3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values
3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		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) ];
3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump mat4 var;
3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = in0;
3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mat4 var;
3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var;
3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# differing precision tests
3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_differing_precision_1
3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying declared as highp in vertex shader, but mediump in fragment shader"
3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values
3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		input float in0		= [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0	= [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying highp float var;
3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = in0;
3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var;
3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# differing precision tests
3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_differing_precision_2
3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying declared as highp in vertex shader, but lowp in fragment shader"
3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values
3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		input float in0		= [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0	= [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying highp vec2 var;
3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = vec2(in0, 2.0*in0);
4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying lowp vec2 var;
4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var.y - var.x;
4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# differing precision tests
4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_differing_precision_3
4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying declared as lowp in vertex shader, but mediump in fragment shader"
4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values
4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		input float in0		= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0	= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying lowp vec4 var;
4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = vec4(in0, 2.0*in0, -in0, -in0);
4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump vec4 var;
4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var.x + var.y + var.z + var.w;
4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# mismatched type, static use but no runtime use in the fragment shader
4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_mismatch_1
4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying type mismatch (float vs. vec2), static use but no runtime use in the fragment shader"
4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect link_fail
4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = 2.0;
4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump vec2 var;
4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (false)
4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				gl_FragColor = vec4(var.y);
4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				${FRAG_COLOR} = vec4(1.0);
4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# mismatched type, varyings used
4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_mismatch_2
4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying type mismatch (float vs. vec2)"
4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect link_fail
4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var = 2.0;
4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump vec2 var;
4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl_FragColor = var.xyyx;
4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# no declaration in vertex shader, but static use in fragment
4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_illegal_usage_1
4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "varying not declared in vertex shader, but statically used in fragment shader"
5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect link_fail
5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float var;
5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl_FragColor = vec4(var);
5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# integer varyings not allowed
5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase invalid_varying_type_int
5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "integer varying used"
5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect compile_fail
5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump int var;
5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump int var;
5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl_FragColor = vec4(1.0);
5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# bool varyings not allowed
5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase invalid_varying_type_bool
5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "boolean varying used"
5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect compile_fail
5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying bool var;
5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying bool var;
5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl_FragColor = vec4(1.0);
5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# struct varyings not allowed
5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase invalid_varying_type_struct
5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "struct varying used"
5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect compile_fail
5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying struct { mediump float foo; } var;
5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying struct { mediump float foo; } var;
5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			gl_FragColor = vec4(1.0);
5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_readback_1
5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "read back (an already written) varying in the vertex shader"
5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values
5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		input float in0		= [ 1.0 | 0.0 | -2.0 | 10.0 ];
5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0	= [ 3.0 | 0.0 | -6.0 | 30.0 ];
5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying float var1;
5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying float var2;
5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var1 = in0;
5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var2 = var1 + in0;
5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying float var1;
6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying float var2;
6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var1 + var2;
6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_writeback_1
6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "write back a varying in the fragment shader"
6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect compile_fail
6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying float var1;
6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying float var2;
6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var1 = in0;
6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var2 = var1 + in0;
6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		precision mediump float;
6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying float var1;
6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying float var2;
6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			var2 = var1;
6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = var1;
6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# Struct linkage handling
6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct
6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Same uniform struct in both shaders"
6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.a = 1.0;
6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.b = 2.0;
6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a; mediump float b;};
6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float dummy;
6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			dummy = val.a + val.b;
6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a; mediump float b;};
6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float dummy;
6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.b + val.a;
6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = out0 + dummy;
6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = out0 - dummy;
6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vertex_only
6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used only in vertex."
6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.a = 1.0;
6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.b = 2.0;
6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a; mediump float b;};
6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a + val.b;
6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a; mediump float b;};
7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res;
7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_fragment_only
7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used only in fragment."
7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.a = 1.0;
7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.b = 2.0;
7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a; mediump float b;};
7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a; mediump float b;};
7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.a + val.b;
7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial
7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both."
7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.a = 1.0;
7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.b = 2.0;
7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a; mediump float b;};
7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a;
7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a; mediump float b;};
7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.b;
7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vec4
7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Same uniform struct in both shaders. Datatype vec4"
7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec4 b;};
7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float dummy;
7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			dummy = val.a.x + val.b.y;
7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec4 b;};
7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float dummy;
7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.b.y + val.a.x;
8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = out0 + dummy;
8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = out0 - dummy;
8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vertex_only_vec4
8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used only in vertex. Datatype vec4	"
8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec4 b;};
8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a.x + val.b.y;
8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec4 b;};
8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res;
8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_fragment_only_vec4
8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used only in fragment. Datatype vec4"
8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec4 b;};
8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec4 b;};
8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.a.x + val.b.y;
8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec4
8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both. Datatype vec4"
8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec4 b;};
8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a.x;
8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec4 b;};
8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.b.y;
8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vec4_vec3
9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Same uniform struct in both shaders. Datatype vec4 and vec3"
9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec3 b;};
9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float dummy;
9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			dummy = val.a.x + val.b.y;
9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec3 b;};
9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float dummy;
9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.b.y + val.a.x;
9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = out0 + dummy;
9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = out0 - dummy;
9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vertex_only_vec4_vec3
9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and vec3"
9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec3 b;};
9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a.x + val.b.y;
9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec3 b;};
9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res;
9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_fragment_only_vec4_vec3
9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and vec3"
9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec3 b;};
9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec3 b;};
9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.a.x + val.b.y;
9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec4_vec3
9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and vec3"
9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec3 b;};
10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a.x;
10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump vec3 b;};
10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.b.y;
10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vec4_float
10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Same uniform struct in both shaders. Datatype vec4 and float"
10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.b = 2.0;
10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump float b;};
10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float dummy;
10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			dummy = val.a.x + val.b;
10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump float b;};
10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float dummy;
10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.b + val.a.x;
10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = out0 + dummy;
10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = out0 - dummy;
10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vertex_only_vec4_float
10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and float"
10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.b = 2.0;
10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump float b;};
10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a.x + val.b;
10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump float b;};
10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res;
10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_fragment_only_vec4_float
10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and float"
10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.b = 2.0;
10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump float b;};
11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump float b;};
11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.a.x + val.b;
11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec4_float
11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and float"
11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.b = 2.0;
11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump float b;};
11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a.x;
11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; mediump float b;};
11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.b;
11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec4_struct
11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec4"
11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.b.c = vec4(1.0, 2.0, 3.0, 4.0);
11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Inner {mediump vec4 c;};
11643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; Inner b;};
11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
11673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a.x;
11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
11713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
11753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Inner {mediump vec4 c;};
11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; Inner b;};
11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
11793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
11823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.b.c.y;
11833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
11843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
11873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec4_vec3_struct
11913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec3"
11923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec3 val.b.c = vec3(1.0, 2.0, 3.0);
11953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
11973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Inner {mediump vec3 c;};
12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; Inner b;};
12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
12023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
12033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
12053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a.x;
12063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
12103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
12113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Inner {mediump vec3 c;};
12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a; Inner b;};
12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
12183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.b.c.y;
12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
12203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
12213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
12223c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
12233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12243c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec2_vec3
12253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both. Datatype vec2 and vec3"
12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec2 val.a = vec2(1.0, 2.0);
12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec2 a; mediump vec3 b;};
12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
12373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
12383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a.x;
12393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
12403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
12413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
12423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
12433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
12443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec2 a; mediump vec3 b;};
12453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
12463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
12473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
12483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
12493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.b.y;
12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
12533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
12553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec2_int
12573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both. Datatype vec2 and int"
12583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
12593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec2 val.a = vec2(1.0, 2.0);
12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform int val.b = 2;
12613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
12623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
12633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
12643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
12653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec2 a; mediump int b;};
12663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
12693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a.x;
12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
12753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
12763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec2 a; mediump int b;};
12773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
12783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
12793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
12803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
12813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
12823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + float(val.b);
12833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
12843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
12853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
12863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
12873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_int_float
12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both. Datatype int and float"
12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.a = 1.0;
12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform int val.b = 2;
12933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
12943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
12953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
12963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a; mediump int b;};
12983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
12993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
13003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
13013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
13023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a;
13033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
13043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
13053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
13063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
13073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
13083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a; mediump int b;};
13093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
13103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
13113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
13123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
13133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
13143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + float(val.b);
13153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
13163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
13173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
13183c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
13193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13203c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_bvec2_vec2
13213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both. Datatype bvec2 and vec2"
13223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
13233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform bvec2 val.a = bvec2(true, true);
13243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec2 val.b = vec2(1.0, 2.0);
13253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
13263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
13273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
13283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
13293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {bvec2 a; mediump vec2 b;};
13303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
13313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
13323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
13333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
13343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = float(val.a.x);
13353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
13363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
13373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
13383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
13393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
13403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {bvec2 a; mediump vec2 b;};
13413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
13423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
13433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
13443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
13453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
13463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.b.y;
13473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
13483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
13493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
13503c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
13513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13523c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_ivec2_vec2
13533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and vec2"
13543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
13553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform ivec2 val.a = ivec2(1, 2);
13563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform vec2 val.b = vec2(1.0, 2.0);
13573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
13583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
13593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
13603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
13613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump ivec2 a; mediump vec2 b;};
13623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
13633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
13643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
13653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
13663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = vec2(val.a).x;
13673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
13683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
13693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
13703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
13713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
13723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump ivec2 a; mediump vec2 b;};
13733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
13743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
13753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
13763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
13773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
13783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.b.y;
13793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
13803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
13813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
13823c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
13833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13843c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_ivec2_ivec2
13853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and ivec2"
13863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
13873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform ivec2 val.a = ivec2(1, 2);
13883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform ivec2 val.b = ivec2(1, 2);
13893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		output float out0 = 3.0;
13903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
13913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
13923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
13933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump ivec2 a; mediump ivec2 b;};
13943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
13953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
13963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
13973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
13983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = vec2(val.a).x;
13993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
14003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
14013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
14023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
14033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
14043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump ivec2 a; mediump ivec2 b;};
14053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
14063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
14073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
14083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
14093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
14103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + vec2(val.b).y;
14113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
14123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
14133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
14143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
14153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14163c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_type_conflict_1
14173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Fragment struct has one less member than fragment version"
14183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect link_fail
14193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {output float out0 = 3.0;}
14203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
14213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
14223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a; mediump float b;};
14233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
14243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
14253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
14263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
14273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a;
14283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
14293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
14303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
14313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
14323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
14333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a;};
14343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
14353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
14363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
14373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
14383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
14393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.a;
14403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
14413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
14423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
14433c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
14443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14453c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_type_conflict_2
14463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Vertex struct has int, fragment struct has float."
14473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect link_fail
14483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {output float out0 = 3.0;}
14493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
14503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
14513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump int a;};
14523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
14533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
14543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
14553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
14563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = float(val.a);
14573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
14583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
14593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
14603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
14613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
14623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a;};
14633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
14643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
14653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
14663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
14673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
14683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.a;
14693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
14703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
14713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
14723c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
14733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
14743c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_type_conflict_3
14753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Vertex struct has vec3, fragment struct has vec4."
14763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect link_fail
14773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {output float out0 = 3.0;}
14783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
14793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
14803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec3 a;};
14813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
14823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
14833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
14843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
14853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = float(val.a.x);
14863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
14873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
14883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
14893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
14903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
14913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump vec4 a;};
14923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
14933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
14943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
14953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
14963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
14973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.a.x;
14983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
14993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
15003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
15013c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
15023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15033c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_precision_conflict_1
15043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Vertex side struct has highp, fragment side struct mediump."
15053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect link_fail
15063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {output float out0 = 3.0;}
15073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
15083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
15093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {highp float a;};
15103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
15113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
15123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
15133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
15143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a;
15153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
15163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
15173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
15183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
15193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
15203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a;};
15213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
15223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
15233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
15243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
15253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
15263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.a;
15273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
15283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
15293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
15303c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
15313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15323c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_precision_conflict_2
15333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Vertex side struct has mediump, fragment side struct lowp."
15343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect link_fail
15353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {output float out0 = 3.0;}
15363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
15373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
15383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a;};
15393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
15403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
15413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
15423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
15433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a;
15443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
15453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
15463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
15473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
15483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
15493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {lowp float a;};
15503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
15513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
15523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
15533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
15543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
15553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.a;
15563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
15573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
15583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
15593c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
15603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15613c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_precision_conflict_3
15623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Vertex side struct has lowp, fragment side struct mediump."
15633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect link_fail
15643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {output float out0 = 3.0;}
15653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
15663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
15673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {lowp float a;};
15683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
15693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
15703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
15713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
15723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a;
15733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
15743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
15753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
15763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
15773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
15783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {mediump float a;};
15793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
15803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
15813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
15823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
15833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
15843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.a;
15853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
15863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
15873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
15883c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
15893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
15903c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_precision_conflict_4
15913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Vertex side struct has lowp, fragment side struct implicit mediump."
15923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	expect link_fail
15933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {output float out0 = 3.0;}
15943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
15953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
15963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {lowp float a;};
15973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
15983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
15993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
16003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
16013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.a;
16023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
16033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
16043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
16053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
16063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    precision mediump float;
16073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {float a;};
16083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Struct val;
16093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
16103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
16113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
16123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
16133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = val.a;
16143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
16153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
16163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
16173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
16183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16193c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_use_case_rip
16203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Complex Light struct from use case tests."
16213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
16223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.constantAttenuation = 1.0;
16233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.quadraticAttenuation = 1.0;   
16243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    output float out0 = 2.0;
16253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry    }
16263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
16273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry   		 struct Light
16283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry   		 {
16293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		     mediump vec3	color;
16303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 highp vec4		position;
16313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 highp vec3		direction;
16323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	constantAttenuation;
16333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	linearAttenuation;
16343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	quadraticAttenuation;
16353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    };
16363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
16373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Light val;
16383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
16393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
16403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
16413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.constantAttenuation;
16423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
16433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
16443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
16453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
16463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	     precision mediump float;
16473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry   		 struct Light
16483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry   		 {
16493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		     mediump vec3	color;
16503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 highp vec4		position;
16513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 highp vec3		direction;
16523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	constantAttenuation;
16533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	linearAttenuation;
16543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	quadraticAttenuation;
16553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    };
16563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {float a;};
16573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Light val;
16583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
16593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
16603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
16613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
16623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.quadraticAttenuation;
16633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
16643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
16653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
16663c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
16673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
16683c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_use_case_rip_sans_highp
16693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	desc "Complex Light struct from use case tests, without highp usage"
16703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	values {
16713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.constantAttenuation = 1.0;
16723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform float val.quadraticAttenuation = 1.0;   
16733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    output float out0 = 2.0;
16743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry    }
16753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vertex ""
16763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry   		 struct Light
16773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry   		 {
16783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		     mediump vec3	color;
16793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump vec4	position;
16803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump vec3	direction;
16813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	constantAttenuation;
16823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	linearAttenuation;
16833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	quadraticAttenuation;
16843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    };
16853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${VERTEX_DECLARATIONS}
16863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Light val;
16873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
16883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
16893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
16903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			res = val.constantAttenuation;
16913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${VERTEX_OUTPUT}
16923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
16933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
16943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	fragment ""
16953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	     precision mediump float;
16963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry   		 struct Light
16973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry   		 {
16983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		     mediump vec3	color;
16993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump vec4	position;
17003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump vec3	direction;
17013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	constantAttenuation;
17023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	linearAttenuation;
17033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			 mediump float	quadraticAttenuation;
17043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	    };
17053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		struct Struct {float a;};
17063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		uniform Light val;
17073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		${FRAGMENT_DECLARATIONS}
17083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		varying mediump float res;
17093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void main()
17103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{	 
17113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			out0 = res + val.quadraticAttenuation;
17123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			${FRAGMENT_OUTPUT}
17133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
17143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	""
17153c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend
1716