
group varying "Default block varying matching"

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

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 es
				${FRAGMENT_DECLARATIONS}
				in mediump float v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

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

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Variable type mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 es
				${FRAGMENT_DECLARATIONS}
				in mediump vec4 v_val;
				void main()
				{
					${FRAG_COLOR} = v_val;
				}
			""
		end
	end

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

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 es
				${FRAGMENT_DECLARATIONS}
				in highp float v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

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

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Variable precision mismatch, explicit varying locations"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Variable location mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Variable location mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Variable location mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Variable location mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 es
				${FRAGMENT_DECLARATIONS}
				layout(location = 3) in mediump float v_val;
				void main()
				{
					${FRAG_COLOR} = vec4(v_val);
				}
			""
		end
	end

	case mismatch_different_struct_names
		version 310 es
		desc "Variable struct names different but otherwise identical"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Struct member name mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Struct member type mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Struct member precision mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Struct member order mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Array element type mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Array length mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Array length mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Interpolation qualifier mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 es
				${FRAGMENT_DECLARATIONS}
				in highp vec4 v_val;
				void main()
				{
					${FRAG_COLOR} = v_val;
				}
			""
		end
	end

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

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Interpolation qualifier mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Interpolation qualifier mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Interpolation qualifier mismatch"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			vertex ""
				#version 310 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 310 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 310 es
		desc "Missing input block"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					mediump float v_val;
				};
				void main()
				{
					v_val = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				void main()
				{
					${FRAG_COLOR} = vec4(1.0);
				}
			""
		end
	end

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

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

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

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 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}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				in IOBlockName
				{
					mediump float v_valA;
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_valA);
				}
			""
		end
	end

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

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 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}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 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 310 es
		desc "IO-blocks do not match due to mismatch with member types"
		expect validation_fail

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

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

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

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

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

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

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 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}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 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 310 es
		desc "IO-blocks do not match due to mismatch with member array size"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 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}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				in IOBlockName
				{
					mediump float v_val_arr[1];
				};
				void main()
				{
					${FRAG_COLOR} = vec4(v_val_arr[0]);
				}
			""
		end
	end

	case mismatch_different_member_struct_names
		version 310 es
		desc "IO-blocks match with structs with different names"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 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}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 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 310 es
		desc "IO-blocks do not match due to mismatch with member structs"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 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}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 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 310 es
		desc "IO-blocks do not match due to mismatch with member structs"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 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}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 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 310 es
		desc "IO-blocks do not match due to mismatch with member structs"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 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}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 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 310 es
		desc "IO-blocks do not match due to mismatch with member structs"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 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}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 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 310 es
		desc "IO-blocks do not match due to mismatch with array sizes"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 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}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 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 310 es
		desc "IO-block does not match with variable"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				out IOBlockName
				{
					mediump float v_val;
				};

				void main()
				{
					v_val = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 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 310 es
		desc "IO-block does not match with variable"
		expect validation_fail

		pipeline_program
			active_stages {vertex}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex }
			vertex ""
				#version 310 es
				${VERTEX_DECLARATIONS}
				out VariableAndBlockName
				{
					mediump float v_val;
				};

				void main()
				{
					v_val = 1.0;
					${VERTEX_OUTPUT}
				}
			""
		end
		pipeline_program
			active_stages {fragment}
			require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment }
			fragment ""
				#version 310 es
				${FRAGMENT_DECLARATIONS}
				in mediump float VariableAndBlockName;
				void main()
				{
					${FRAG_COLOR} = vec4(VariableAndBlockName);
				}
			""
		end
	end
end
