# 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