# WARNING: This file is auto-generated. Do NOT modify it manually, but rather
# modify the generating script file. Otherwise changes will be lost!

group variables "Order of qualification in variable declarations."

	group valid "Valid orderings."

		case invariant_interp_storage_precision
			expect pass
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant smooth centroid out lowp float x0;

				 flat out mediump float x1;

				 uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				 smooth centroid in lowp float x0;

				 flat in mediump float x1;

				 uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_storage_precision
			expect pass
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth centroid out lowp float x0;

				flat out mediump float x1;

				 uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				smooth centroid in lowp float x0;

				flat in mediump float x1;

				 uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_interp_storage
			expect pass
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant smooth centroid out float x0;

				 flat out float x1;

				 uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				 smooth centroid in float x0;

				 flat in float x1;

				 uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_storage_precision
			expect pass
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant centroid out lowp float x0;

				 out mediump float x1;

				 uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				 centroid in lowp float x0;

				 in mediump float x1;

				 uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_precision
			expect pass
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out lowp float x0;

				out mediump float x1;

				uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in lowp float x0;

				in mediump float x1;

				uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_storage
			expect pass
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth centroid out float x0;

				flat out float x1;

				 uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				smooth centroid in float x0;

				flat in float x1;

				 uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_storage
			expect pass
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant centroid out float x0;

				 out float x1;

				 uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				 centroid in float x0;

				 in float x1;

				 uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end

	end # valid
	group invalid "Invalid orderings."

		case invariant_interp_precision_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant smooth lowp centroid out float x0;

				 flat mediump out float x1;

				 highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				 smooth lowp centroid in float x0;

				 flat mediump in float x1;

				 highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_storage_interp_precision
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant centroid out smooth lowp float x0;

				 out flat mediump float x1;

				 uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				 centroid in smooth lowp float x0;

				 in flat mediump float x1;

				 uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_storage_precision_interp
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant centroid out lowp smooth float x0;

				 out mediump flat float x1;

				 uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				 centroid in lowp smooth float x0;

				 in mediump flat float x1;

				 uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_precision_interp_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant lowp smooth centroid out float x0;

				 mediump flat out float x1;

				 highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				 lowp smooth centroid in float x0;

				 mediump flat in float x1;

				 highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_precision_storage_interp
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant lowp centroid out smooth float x0;

				 mediump out flat float x1;

				 highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				 lowp centroid in smooth float x0;

				 mediump in flat float x1;

				 highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_invariant_storage_precision
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth invariant centroid out lowp float x0;

				flat out mediump float x1;

				 uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				smooth  centroid in lowp float x0;

				flat in mediump float x1;

				 uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_invariant_precision_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth invariant lowp centroid out float x0;

				flat mediump out float x1;

				 highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				smooth  lowp centroid in float x0;

				flat mediump in float x1;

				 highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_storage_invariant_precision
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth centroid out invariant lowp float x0;

				flat out mediump float x1;

				 uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				smooth centroid in  lowp float x0;

				flat in mediump float x1;

				 uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_storage_precision_invariant
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth centroid out lowp invariant float x0;

				flat out mediump float x1;

				 uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				smooth centroid in lowp  float x0;

				flat in mediump float x1;

				 uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_precision_invariant_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth lowp invariant centroid out float x0;

				flat mediump out float x1;

				 highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				smooth lowp  centroid in float x0;

				flat mediump in float x1;

				 highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_precision_storage_invariant
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth lowp centroid out invariant float x0;

				flat mediump out float x1;

				 highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				smooth lowp centroid in  float x0;

				flat mediump in float x1;

				 highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_invariant_interp_precision
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out invariant smooth lowp float x0;

				out flat mediump float x1;

				uniform  highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in  smooth lowp float x0;

				in flat mediump float x1;

				uniform  highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_invariant_precision_interp
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out invariant lowp smooth float x0;

				out mediump flat float x1;

				uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in  lowp smooth float x0;

				in mediump flat float x1;

				uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_interp_invariant_precision
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out smooth invariant lowp float x0;

				out flat mediump float x1;

				uniform  highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in smooth  lowp float x0;

				in flat mediump float x1;

				uniform  highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_interp_precision_invariant
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out smooth lowp invariant float x0;

				out flat mediump float x1;

				uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in smooth lowp  float x0;

				in flat mediump float x1;

				uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_precision_invariant_interp
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out lowp invariant smooth float x0;

				out mediump flat float x1;

				uniform highp  float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in lowp  smooth float x0;

				in mediump flat float x1;

				uniform highp  float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_precision_interp_invariant
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out lowp smooth invariant float x0;

				out mediump flat float x1;

				uniform highp  float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in lowp smooth  float x0;

				in mediump flat float x1;

				uniform highp  float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case precision_invariant_interp_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				lowp invariant smooth centroid out float x0;

				mediump flat out float x1;

				highp  uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				lowp  smooth centroid in float x0;

				mediump flat in float x1;

				highp  uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case precision_invariant_storage_interp
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				lowp invariant centroid out smooth float x0;

				mediump out flat float x1;

				highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				lowp  centroid in smooth float x0;

				mediump in flat float x1;

				highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case precision_interp_invariant_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				lowp smooth invariant centroid out float x0;

				mediump flat out float x1;

				highp  uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				lowp smooth  centroid in float x0;

				mediump flat in float x1;

				highp  uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case precision_interp_storage_invariant
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				lowp smooth centroid out invariant float x0;

				mediump flat out float x1;

				highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				lowp smooth centroid in  float x0;

				mediump flat in float x1;

				highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case precision_storage_invariant_interp
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				lowp centroid out invariant smooth float x0;

				mediump out flat float x1;

				highp uniform  float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				lowp centroid in  smooth float x0;

				mediump in flat float x1;

				highp uniform  float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case precision_storage_interp_invariant
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				lowp centroid out smooth invariant float x0;

				mediump out flat float x1;

				highp uniform  float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				lowp centroid in smooth  float x0;

				mediump in flat float x1;

				highp uniform  float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_precision_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth lowp centroid out float x0;

				flat mediump out float x1;

				 highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				smooth lowp centroid in float x0;

				flat mediump in float x1;

				 highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_interp_precision
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out smooth lowp float x0;

				out flat mediump float x1;

				uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in smooth lowp float x0;

				in flat mediump float x1;

				uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_precision_interp
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out lowp smooth float x0;

				out mediump flat float x1;

				uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in lowp smooth float x0;

				in mediump flat float x1;

				uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case precision_interp_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				lowp smooth centroid out float x0;

				mediump flat out float x1;

				highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				lowp smooth centroid in float x0;

				mediump flat in float x1;

				highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case precision_storage_interp
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				lowp centroid out smooth float x0;

				mediump out flat float x1;

				highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				lowp centroid in smooth float x0;

				mediump in flat float x1;

				highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_storage_interp
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant centroid out smooth float x0;

				 out flat float x1;

				 uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				 centroid in smooth float x0;

				 in flat float x1;

				 uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_invariant_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth invariant centroid out float x0;

				flat out float x1;

				 uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				smooth  centroid in float x0;

				flat in float x1;

				 uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_storage_invariant
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth centroid out invariant float x0;

				flat out float x1;

				 uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				smooth centroid in  float x0;

				flat in float x1;

				 uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_invariant_interp
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out invariant smooth float x0;

				out flat float x1;

				uniform  float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in  smooth float x0;

				in flat float x1;

				uniform  float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_interp_invariant
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out smooth invariant float x0;

				out flat float x1;

				uniform  float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in smooth  float x0;

				in flat float x1;

				uniform  float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_precision_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant lowp centroid out float x0;

				 mediump out float x1;

				 highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				 lowp centroid in float x0;

				 mediump in float x1;

				 highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_invariant_precision
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out invariant lowp float x0;

				out mediump float x1;

				uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in  lowp float x0;

				in mediump float x1;

				uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_precision_invariant
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out lowp invariant float x0;

				out mediump float x1;

				uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in lowp  float x0;

				in mediump float x1;

				uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case precision_invariant_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				lowp invariant centroid out float x0;

				mediump out float x1;

				highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				lowp  centroid in float x0;

				mediump in float x1;

				highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case precision_storage_invariant
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				lowp centroid out invariant float x0;

				mediump out float x1;

				highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				lowp centroid in  float x0;

				mediump in float x1;

				highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case precision_storage
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				lowp centroid out float x0;

				mediump out float x1;

				highp uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				lowp centroid in float x0;

				mediump in float x1;

				highp uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_interp
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out smooth float x0;

				out flat float x1;

				uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in smooth float x0;

				in flat float x1;

				uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_invariant
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out invariant float x0;

				out float x1;

				uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				centroid in  float x0;

				in float x1;

				uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_interp_storage_precision_invariant_input
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant smooth centroid out lowp float x0;

				 flat out mediump float x1;

				 uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				invariant  smooth centroid in lowp float x0;

				 flat in mediump float x1;

				 uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_storage_precision_invariant_input
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth centroid out lowp float x0;

				flat out mediump float x1;

				 uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				invariant smooth centroid in lowp float x0;

				flat in mediump float x1;

				 uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_interp_storage_invariant_input
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant smooth centroid out float x0;

				 flat out float x1;

				 uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				invariant  smooth centroid in float x0;

				 flat in float x1;

				 uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_storage_precision_invariant_input
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant centroid out lowp float x0;

				 out mediump float x1;

				 uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				invariant  centroid in lowp float x0;

				 in mediump float x1;

				 uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case storage_precision_invariant_input
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				centroid out lowp float x0;

				out mediump float x1;

				uniform highp float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				invariant centroid in lowp float x0;

				in mediump float x1;

				uniform highp float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case interp_storage_invariant_input
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				smooth centroid out float x0;

				flat out float x1;

				 uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				invariant smooth centroid in float x0;

				flat in float x1;

				 uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end
		case invariant_storage_invariant_input
			expect compile_fail
			values {}

			vertex ""
				#version 300 es
				precision mediump float;
				in highp vec4 dEQP_Position;

				invariant centroid out float x0;

				 out float x1;

				 uniform float x2;

				void main()
				{
					x0 = 1.0;
					x1 = 2.0;
					gl_Position = dEQP_Position;
				}
			""

			fragment ""
				#version 300 es
				precision mediump float;
				layout(location = 0) out mediump vec4 dEQP_FragColor;

				invariant  centroid in float x0;

				 in float x1;

				 uniform float x2;

				void main()
				{
					float result = (x0 + x1 + x2) / 3.0;
					dEQP_FragColor = vec4(result, result, result, 1.0);
				}
			""
		end

	end # invalid

end # variables
group parameters "Order of qualification in function parameters."

	group valid "Valid orderings."

		case storage_parameter_precision
			expect pass
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (const in lowp float x)
				{
					return x + 1.0;
				}

				void foo1 ( out mediump float x)
				{
					x = 1.0;
				}

				float foo2 ( inout highp float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end
		case storage_parameter
			expect pass
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (const in float x)
				{
					return x + 1.0;
				}

				void foo1 ( out float x)
				{
					x = 1.0;
				}

				float foo2 ( inout float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end
		case storage_precision
			expect pass
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (const lowp float x)
				{
					return x + 1.0;
				}

				void foo1 ( mediump float x)
				{
					x = 1.0;
				}

				float foo2 ( highp float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end
		case parameter_precision
			expect pass
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (in lowp float x)
				{
					return x + 1.0;
				}

				void foo1 (out mediump float x)
				{
					x = 1.0;
				}

				float foo2 (inout highp float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end

	end # valid
	group invalid "Invalid orderings."

		case storage_precision_parameter
			expect compile_fail
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (const lowp in float x)
				{
					return x + 1.0;
				}

				void foo1 ( mediump out float x)
				{
					x = 1.0;
				}

				float foo2 ( highp inout float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end
		case parameter_storage_precision
			expect compile_fail
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (in const lowp float x)
				{
					return x + 1.0;
				}

				void foo1 (out mediump float x)
				{
					x = 1.0;
				}

				float foo2 (inout highp float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end
		case parameter_precision_storage
			expect compile_fail
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (in lowp const float x)
				{
					return x + 1.0;
				}

				void foo1 (out mediump float x)
				{
					x = 1.0;
				}

				float foo2 (inout highp float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end
		case precision_storage_parameter
			expect compile_fail
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (lowp const in float x)
				{
					return x + 1.0;
				}

				void foo1 (mediump out float x)
				{
					x = 1.0;
				}

				float foo2 (highp inout float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end
		case precision_parameter_storage
			expect compile_fail
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (lowp in const float x)
				{
					return x + 1.0;
				}

				void foo1 (mediump out float x)
				{
					x = 1.0;
				}

				float foo2 (highp inout float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end
		case parameter_storage
			expect compile_fail
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (in const float x)
				{
					return x + 1.0;
				}

				void foo1 (out float x)
				{
					x = 1.0;
				}

				float foo2 (inout float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end
		case precision_storage
			expect compile_fail
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (lowp const float x)
				{
					return x + 1.0;
				}

				void foo1 (mediump float x)
				{
					x = 1.0;
				}

				float foo2 (highp float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end
		case precision_parameter
			expect compile_fail
			version 300 es
			values {}

			both ""
				#version 300 es
				precision mediump float;
				${DECLARATIONS}

				float foo0 (lowp in float x)
				{
					return x + 1.0;
				}

				void foo1 (mediump out float x)
				{
					x = 1.0;
				}

				float foo2 (highp inout float x)
				{
					return x + 1.0;
				}

				void main()
				{
					${SETUP}
					float result;
					foo1(result);
					float x0 = foo0(1.0);
					foo2(result);
					${OUTPUT}
				}
			""
		end

	end # invalid

end # parameters
