# -------------------------------------------------
# drawElements Quality Program OpenGL ES 3.2 Module
# -------------------------------------------------
#
# Copyright 2016 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


group varying "Default block varying matching"

	case missing_input
		version 320 es
		desc "Variable has no matching input"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out mediump float v_val;
				out mediump float v_val_no_such_input;
				void main()
				{
					v_val = float(gl_VertexID);
					v_val_no_such_input = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in mediump float v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

	case missing_output
		version 320 es
		desc "Variable has no matching output"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out mediump float v_val;
				void main()
				{
					v_val = float(gl_VertexID);
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in mediump float v_val;
				in mediump float v_val_no_such_output;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val + v_val_no_such_output);
				}
			""
		end
	end

	case mismatch_type
		version 320 es
		desc "Variable type mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out mediump vec3 v_val;
				void main()
				{
					v_val = vec3(float(gl_VertexID));
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in mediump vec4 v_val;
				void main()
				{
					${FRAG_COLOR} = v_val;
				}
			""
		end
	end

	case mismatch_precision
		version 320 es
		desc "Variable precision mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out mediump float v_val;
				void main()
				{
					v_val = float(gl_VertexID);
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in highp float v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

	case mismatch_explicit_location_type
		version 320 es
		desc "Variable type mismatch, explicit varying locations"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				layout(location = 3) out mediump vec4 v_val;
				void main()
				{
					v_val = vec4(float(gl_VertexID));
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 3) in mediump vec2 v_val;
				void main()
				{
					${FRAG_COLOR} = v_val.xxyy;
				}
			""
		end
	end

	case mismatch_explicit_location_precision
		version 320 es
		desc "Variable precision mismatch, explicit varying locations"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				layout(location = 3) out mediump float v_val;
				void main()
				{
					v_val = float(gl_VertexID);
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 3) in highp float v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

	case mismatch_explicit_location
		version 320 es
		desc "Variable location mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				layout(location = 3) out mediump float v_val;
				void main()
				{
					v_val = float(gl_VertexID);
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 4) in mediump float v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

	case mismatch_implicit_explicit_location_1
		version 320 es
		desc "Variable location mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out mediump float v_val;
				void main()
				{
					v_val = float(gl_VertexID);
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 3) in mediump float v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

	case mismatch_implicit_explicit_location_2
		version 320 es
		desc "Variable location mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				layout(location = 3) out mediump float v_val;
				void main()
				{
					v_val = float(gl_VertexID);
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in mediump float v_val;
				layout(location = 3) in mediump float v_val_other_name;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val + v_val_other_name);
				}
			""
		end
	end

	case mismatch_implicit_explicit_location_3
		version 320 es
		desc "Variable location mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out mediump float v_val;
				layout(location = 3) out mediump float v_val_other_name;
				void main()
				{
					v_val = float(gl_VertexID);
					v_val_other_name = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 3) in mediump float v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

	case match_different_struct_names
		version 320 es
		desc "Variable struct names different but otherwise identical"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				struct StructureNameA
				{
					mediump float member;
				};
				out StructureNameA v_val;
				void main()
				{
					v_val.member = float(gl_VertexID);
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				struct StructureNameB
				{
					mediump float member;
				};
				in StructureNameB v_val;
				void main()
				{
					// should always produce white
					${FRAG_COLOR} = (v_val.member > -1.0) ? (vec4(1.0)) : (vec4(0.0));
				}
			""
		end
	end

	case mismatch_struct_member_name
		version 320 es
		desc "Struct member name mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				struct StructureName
				{
					mediump float member;
				};
				out StructureName v_val;
				void main()
				{
					v_val.member = float(gl_VertexID);
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				struct StructureName
				{
					mediump float member_different_name;
				};
				in StructureName v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val.member_different_name);
				}
			""
		end
	end

	case mismatch_struct_member_type
		version 320 es
		desc "Struct member type mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				struct StructureName
				{
					mediump float member;
				};
				out StructureName v_val;
				void main()
				{
					v_val.member = float(gl_VertexID);
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				struct StructureName
				{
					mediump vec2 member;
				};
				in StructureName v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val.member.x);
				}
			""
		end
	end

	case mismatch_struct_member_precision
		version 320 es
		desc "Struct member precision mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				struct StructureName
				{
					mediump float member;
				};
				out StructureName v_val;
				void main()
				{
					v_val.member = float(gl_VertexID);
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				struct StructureName
				{
					highp float member;
				};
				in StructureName v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val.member);
				}
			""
		end
	end

	case mismatch_struct_member_order
		version 320 es
		desc "Struct member order mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				struct StructureName
				{
					mediump float memberA;
					mediump float memberB;
				};
				out StructureName v_val;
				void main()
				{
					v_val.memberA = float(gl_VertexID);
					v_val.memberB = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				struct StructureName
				{
					mediump float memberB;
					mediump float memberA;
				};
				in StructureName v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val.memberA + v_val.memberB);
				}
			""
		end
	end

	case mismatch_array_element_type
		version 320 es
		desc "Array element type mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out mediump float v_val[2];
				void main()
				{
					v_val[0] = 1.0;
					v_val[1] = 2.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in mediump vec2 v_val[2];
				void main()
				{
					${FRAG_COLOR} = vec4(v_val[0].x + v_val[1].y);
				}
			""
		end
	end

	case mismatch_array_length
		version 320 es
		desc "Array length mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out mediump float v_val[2];
				void main()
				{
					v_val[0] = 1.0;
					v_val[1] = 2.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in mediump float v_val[3];
				void main()
				{
					${FRAG_COLOR} = vec4(v_val[0] + v_val[1] + v_val[2]);
				}
			""
		end
	end

	case mismatch_array_precision
		version 320 es
		desc "Array length mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out mediump float v_val[2];
				void main()
				{
					v_val[0] = 1.0;
					v_val[1] = 2.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in highp float v_val[2];
				void main()
				{
					${FRAG_COLOR} = vec4(v_val[0] + v_val[1]);
				}
			""
		end
	end

	case mismatch_qualifier_vertex_flat_fragment_none
		version 320 es
		desc "Interpolation qualifier mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out flat highp vec4 v_val;
				void main()
				{
					v_val = vec4(float(gl_VertexID));
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in highp vec4 v_val;
				void main()
				{
					${FRAG_COLOR} = v_val;
				}
			""
		end
	end

	case mismatch_qualifier_vertex_flat_fragment_smooth
		version 320 es
		desc "Interpolation qualifier mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out flat highp vec4 v_val;
				void main()
				{
					v_val = vec4(float(gl_VertexID));
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in smooth highp vec4 v_val;
				void main()
				{
					${FRAG_COLOR} = v_val;
				}
			""
		end
	end

	case mismatch_qualifier_vertex_flat_fragment_centroid
		version 320 es
		desc "Interpolation qualifier mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out flat highp vec4 v_val;
				void main()
				{
					v_val = vec4(float(gl_VertexID));
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in centroid highp vec4 v_val;
				void main()
				{
					${FRAG_COLOR} = v_val;
				}
			""
		end
	end

	case mismatch_qualifier_vertex_smooth_fragment_flat
		version 320 es
		desc "Interpolation qualifier mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out smooth highp vec4 v_val;
				void main()
				{
					v_val = vec4(float(gl_VertexID));
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in flat highp vec4 v_val;
				void main()
				{
					${FRAG_COLOR} = v_val;
				}
			""
		end
	end

	case mismatch_qualifier_vertex_centroid_fragment_flat
		version 320 es
		desc "Interpolation qualifier mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out centroid highp vec4 v_val;
				void main()
				{
					v_val = vec4(float(gl_VertexID));
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in flat highp vec4 v_val;
				void main()
				{
					${FRAG_COLOR} = v_val;
				}
			""
		end
	end
end

group io_blocks "shader io blocks"

	case missing_input
		version 320 es
		desc "Missing input block"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					mediump float v_val;
				};
				void main()
				{
					v_val = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				void main()
				{
					${FRAG_COLOR} = vec4(1.0);
				}
			""
		end
	end

	case missing_output
		version 320 es
		desc "Missing output block"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				void main()
				{
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in IOBlockName
				{
					mediump float v_val;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

	case mismatch_number_of_declarations
		version 320 es
		desc "IO-blocks do not match due to mismatch in number of declarations"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					mediump float v_valA;
					mediump float v_valB;
				};
				void main()
				{
					v_valA = 1.0;
					v_valB = 2.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in IOBlockName
				{
					mediump float v_valA;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_valA);
				}
			""
		end
	end

	case mismatch_member_order
		version 320 es
		desc "IO-blocks do not match due to mismatch with member declaration order"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					mediump float v_valA;
					mediump float v_valB;
				};
				void main()
				{
					v_valA = 1.0;
					v_valB = 2.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in IOBlockName
				{
					mediump float v_valB;
					mediump float v_valA;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_valA+v_valB);
				}
			""
		end
	end

	case mismatch_member_type
		version 320 es
		desc "IO-blocks do not match due to mismatch with member types"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					mediump float v_valA;
				};
				void main()
				{
					v_valA = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in IOBlockName
				{
					mediump vec2 v_valA;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_valA.xyxy);
				}
			""
		end
	end

	case mismatch_member_name
		version 320 es
		desc "IO-blocks do not match due to mismatch with member names"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					mediump float v_valA;
				};
				void main()
				{
					v_valA = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in IOBlockName
				{
					mediump vec2 v_valB;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_valB.y);
				}
			""
		end
	end

	case mismatch_member_precision
		version 320 es
		desc "IO-blocks do not match due to mismatch with member precisions"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					mediump float v_valA;
				};
				void main()
				{
					v_valA = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in IOBlockName
				{
					highp float v_valA;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_valA);
				}
			""
		end
	end

	case mismatch_different_member_interpolation
		version 320 es
		desc "IO-block members do not match due to different interpolation qualifiers"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					smooth out mediump float v_val;
				};
				void main()
				{
					v_val = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in IOBlockName
				{
					flat in mediump float v_val;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

	case mismatch_member_array_size
		version 320 es
		desc "IO-blocks do not match due to mismatch with member array size"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					mediump float v_val_arr[2];
				};
				void main()
				{
					v_val_arr[0] = 1.0;
					v_val_arr[1] = 2.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in IOBlockName
				{
					mediump float v_val_arr[1];
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_val_arr[0]);
				}
			""
		end
	end

	case match_different_member_struct_names
		version 320 es
		desc "IO-blocks match with structs with different names"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				struct StructNameA
				{
					mediump float v;
				};
				out IOBlockName
				{
					StructNameA v_val;
				};

				void main()
				{
					v_val.v = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				struct StructNameB
				{
					mediump float v;
				};
				in IOBlockName
				{
					StructNameB v_val;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_val.v);
				}
			""
		end
	end

	case mismatch_member_struct_member_name
		version 320 es
		desc "IO-blocks do not match due to mismatch with member structs"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				struct StructName
				{
					mediump float v;
				};
				out IOBlockName
				{
					StructName v_val;
				};

				void main()
				{
					v_val.v = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				struct StructName
				{
					mediump float v_alt_name;
				};
				in IOBlockName
				{
					StructName v_val;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_val.v_alt_name);
				}
			""
		end
	end

	case mismatch_member_struct_member_type
		version 320 es
		desc "IO-blocks do not match due to mismatch with member structs"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				struct StructName
				{
					mediump float v;
				};
				out IOBlockName
				{
					StructName v_val;
				};

				void main()
				{
					v_val.v = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				struct StructName
				{
					mediump vec2 v;
				};
				in IOBlockName
				{
					StructName v_val;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_val.v.x);
				}
			""
		end
	end

	case mismatch_member_struct_member_precision
		version 320 es
		desc "IO-blocks do not match due to mismatch with member structs"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				struct StructName
				{
					mediump float v;
				};
				out IOBlockName
				{
					StructName v_val;
				};

				void main()
				{
					v_val.v = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				struct StructName
				{
					highp float v;
				};
				in IOBlockName
				{
					StructName v_val;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_val.v);
				}
			""
		end
	end

	case mismatch_member_struct_member_order
		version 320 es
		desc "IO-blocks do not match due to mismatch with member structs"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				struct StructName
				{
					mediump float v_a;
					mediump float v_b;
				};
				out IOBlockName
				{
					StructName v_val;
				};

				void main()
				{
					v_val.v_a = 1.0;
					v_val.v_b = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				struct StructName
				{
					mediump float v_b;
					mediump float v_a;
				};
				in IOBlockName
				{
					StructName v_val;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_val.v_a);
				}
			""
		end
	end

	case mismatch_array_size
		version 320 es
		desc "IO-blocks do not match due to mismatch with array sizes"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					mediump float v_val;
				} ioBlock[2];
				void main()
				{
					ioBlock[0].v_val = 1.0;
					ioBlock[1].v_val = 2.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in IOBlockName
				{
					mediump float v_val;
				} ioBlock[1];
				void main()
				{
					${FRAG_COLOR} = vec4(ioBlock[0].v_val);
				}
			""
		end
	end

	case mismatch_variable_and_block_member_1
		version 320 es
		desc "IO-block does not match with variable"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					mediump float v_val;
				};

				void main()
				{
					v_val = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in mediump float v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

	case mismatch_variable_and_block_member_2
		version 320 es
		desc "IO-block does not match with variable"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 320 es
				${VERTEX_DECLARATIONS}
				out VariableAndBlockName
				{
					mediump float v_val;
				};

				void main()
				{
					v_val = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			fragment ""
				#version 320 es
				${FRAGMENT_DECLARATIONS}
				in mediump float VariableAndBlockName;
				void main()
				{
					${FRAG_COLOR} = vec4(VariableAndBlockName);
				}
			""
		end
	end
end
