
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 match_different_struct_names
		version 310 es
		desc "Variable struct names different but otherwise identical"
		expect pass

		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 match_different_member_struct_names
		version 310 es
		desc "IO-blocks match with structs with different names"
		expect pass

		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
