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

group valid "Valid uniform interface block syntax tests."

	case repeat_interface_qualifier_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				uniform vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case repeat_interface_qualifier_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				uniform vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case layout_shared_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			layout(shared) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case layout_shared_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			layout(shared) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case layout_packed_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			layout(packed) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case layout_packed_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			layout(packed) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case layout_std140_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			layout(std140) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case layout_std140_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			layout(std140) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case layout_row_major_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			layout(row_major) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case layout_row_major_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			layout(row_major) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case layout_column_major_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			layout(column_major) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case layout_column_major_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			layout(column_major) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case layout_all_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			layout(shared, packed, std140, row_major, column_major) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case layout_all_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			layout(shared, packed, std140, row_major, column_major) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case layout_all_8_times_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			layout(shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case layout_all_8_times_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			layout(shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major) uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case global_layout_shared_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			layout(shared) uniform;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case global_layout_shared_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(shared) uniform;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case global_layout_packed_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			layout(packed) uniform;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case global_layout_packed_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(packed) uniform;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case global_layout_std140_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			layout(std140) uniform;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case global_layout_std140_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(std140) uniform;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case global_layout_row_major_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			layout(row_major) uniform;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case global_layout_row_major_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(row_major) uniform;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case global_layout_column_major_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			layout(column_major) uniform;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case global_layout_column_major_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(column_major) uniform;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case global_layout_all_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			layout(shared, packed, std140, row_major, column_major) uniform;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case global_layout_all_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(shared, packed, std140, row_major, column_major) uniform;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case global_layout_all_8_times_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			layout(shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major) uniform;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case global_layout_all_8_times_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major, shared, packed, std140, row_major, column_major) uniform;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case member_layout_row_major_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				layout(row_major) mat4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember[0];
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_layout_row_major_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				layout(row_major) mat4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember[0];
			}
		""
	end
	case member_layout_column_major_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				layout(column_major) mat4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember[0];
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_layout_column_major_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				layout(column_major) mat4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember[0];
			}
		""
	end
	case member_layout_row_major_vec4_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				layout(row_major) vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_layout_row_major_vec4_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				layout(row_major) vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case member_layout_column_major_vec4_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				layout(column_major) vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_layout_column_major_vec4_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				layout(column_major) vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case member_layout_all_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				layout(row_major, column_major) mat4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember[0];
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_layout_all_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				layout(row_major, column_major) mat4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember[0];
			}
		""
	end
	case member_layout_all_8_times_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				layout(row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major) mat4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember[0];
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_layout_all_8_times_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				layout(row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major) mat4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember[0];
			}
		""
	end
	case no_instance_name_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			};

			void main()
			{
				gl_Position = uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case no_instance_name_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			};

			void main()
			{
				o_color = uniformMember;
			}
		""
	end
	case same_variable_and_block_name_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				vec4 UniformBlock = vec4(0.0);
				gl_Position = UniformBlock + uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case same_variable_and_block_name_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				vec4 UniformBlock = vec4(0.0);
				o_color = UniformBlock + uniformBlock.uniformMember;
			}
		""
	end
	case same_variable_and_instance_name_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				vec4 uniformBlock = vec4(0.0);
				gl_Position = uniformBlock;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case same_variable_and_instance_name_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				vec4 uniformBlock = vec4(0.0);
				o_color = uniformBlock;
			}
		""
	end
	case struct_member_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			struct Struct
			{
				vec4 uniformMember;
			};

			uniform UniformBlock
			{
				Struct st;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.st.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case struct_member_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			struct Struct
			{
				vec4 uniformMember;
			};

			uniform UniformBlock
			{
				Struct st;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.st.uniformMember;
			}
		""
	end
	case struct_member_layout_row_major_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			struct Struct
			{
				vec4 uniformMember;
			};

			uniform UniformBlock
			{
				layout(row_major) Struct st;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.st.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case struct_member_layout_row_major_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			struct Struct
			{
				vec4 uniformMember;
			};

			uniform UniformBlock
			{
				layout(row_major) Struct st;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.st.uniformMember;
			}
		""
	end
	case struct_member_layout_column_major_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			struct Struct
			{
				vec4 uniformMember;
			};

			uniform UniformBlock
			{
				layout(column_major) Struct st;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.st.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case struct_member_layout_column_major_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			struct Struct
			{
				vec4 uniformMember;
			};

			uniform UniformBlock
			{
				layout(column_major) Struct st;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.st.uniformMember;
			}
		""
	end
	case struct_member_layout_all_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			struct Struct
			{
				vec4 uniformMember;
			};

			uniform UniformBlock
			{
				layout(row_major, column_major) Struct st;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.st.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case struct_member_layout_all_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			struct Struct
			{
				vec4 uniformMember;
			};

			uniform UniformBlock
			{
				layout(row_major, column_major) Struct st;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.st.uniformMember;
			}
		""
	end
	case struct_member_layout_all_8_times_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			struct Struct
			{
				vec4 uniformMember;
			};

			uniform UniformBlock
			{
				layout(row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major) Struct st;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.st.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case struct_member_layout_all_8_times_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			struct Struct
			{
				vec4 uniformMember;
			};

			uniform UniformBlock
			{
				layout(row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major, row_major, column_major) Struct st;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.st.uniformMember;
			}
		""
	end
	case long_block_name_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			// Total of 1024 characters
			uniform aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case long_block_name_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			// Total of 1024 characters
			uniform aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case long_instance_name_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
			// Total of 1024 characters

			void main()
			{
				gl_Position = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case long_instance_name_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
			// Total of 1024 characters

			void main()
			{
				o_color = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.uniformMember;
			}
		""
	end
	case underscore_block_name_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform _
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case underscore_block_name_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform _
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case underscore_instance_name_vertex
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} _;

			void main()
			{
				gl_Position = _.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case underscore_instance_name_fragment
		version 300 es
		expect build_successful

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} _;

			void main()
			{
				o_color = _.uniformMember;
			}
		""
	end

end # valid
group invalid "Invalid uniform interface block syntax tests."

	case member_in_interface_qualifier_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				in vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_in_interface_qualifier_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				in vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case member_out_interface_qualifier_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				out vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_out_interface_qualifier_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				out vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case member_buffer_interface_qualifier_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				buffer vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_buffer_interface_qualifier_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				buffer vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case member_attribute_interface_qualifier_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				attribute vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_attribute_interface_qualifier_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				attribute vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case member_varying_interface_qualifier_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				varying vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_varying_interface_qualifier_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				varying vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case conflicting_instance_names_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlockA
			{
				vec4 uniformMember;
			} uniformBlock;

			uniform UniformBlockB
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case conflicting_instance_names_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlockA
			{
				vec4 uniformMember;
			} uniformBlock;

			uniform UniformBlockB
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case conflicting_function_and_instance_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			float uniformBlock (float x)
			{
				return x;
			}

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case conflicting_function_and_instance_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			float uniformBlock (float x)
			{
				return x;
			}

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case conflicting_function_and_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			float UniformBlock (float x)
			{
				return x;
			}

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case conflicting_function_and_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			float UniformBlock (float x)
			{
				return x;
			}

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case conflicting_uniform_and_instance_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			uniform vec4 uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case conflicting_uniform_and_instance_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			uniform vec4 uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case conflicting_in_and_instance_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			in vec4 uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case conflicting_in_and_instance_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			in vec4 uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case conflicting_out_and_instance_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			out vec4 uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case conflicting_out_and_instance_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			out vec4 uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case conflicting_uniform_and_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			uniform vec4 UniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case conflicting_uniform_and_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			uniform vec4 UniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case conflicting_in_and_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			in vec4 UniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case conflicting_in_and_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			in vec4 UniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case conflicting_out_and_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			out vec4 UniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case conflicting_out_and_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			out vec4 UniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case matching_instance_and_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} UniformBlock;

			void main()
			{
				gl_Position = UniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case matching_instance_and_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} UniformBlock;

			void main()
			{
				o_color = UniformBlock.uniformMember;
			}
		""
	end
	case reference_using_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = UniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case reference_using_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = UniformBlock.uniformMember;
			}
		""
	end
	case empty_block_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
			} uniformBlock;

			void main()
			{
				gl_Position = vec4(0.0);
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case empty_block_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
			} uniformBlock;

			void main()
			{
				o_color = vec4(0.0);
			}
		""
	end
	case empty_layout_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			layout() uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case empty_layout_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			layout() uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case empty_member_layout_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				layout() vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case empty_member_layout_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				layout() vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case empty_global_layout_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			layout() uniform;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case empty_global_layout_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout() uniform;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case structure_definition_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				struct A
				{
					vec4 uniformMember;
				} a;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.a.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case structure_definition_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				struct A
				{
					vec4 uniformMember;
				} a;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.a.uniformMember;
			}
		""
	end
	case member_layout_shared_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				layout(shared) vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_layout_shared_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				layout(shared) vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case member_layout_packed_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				layout(packed) vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_layout_packed_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				layout(packed) vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case member_layout_std140_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				layout(std140) vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case member_layout_std140_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				layout(std140) vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case missing_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case missing_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case invalid_number_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform 0UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case invalid_number_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform 0UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case invalid_hash_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform #UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case invalid_hash_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform #UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case invalid_dollar_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform $UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case invalid_dollar_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform $UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case invalid_identifier_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform gl_UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case invalid_identifier_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform gl_UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case too_long_block_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			// Total of 1025 characters
			uniform aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				gl_Position = uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case too_long_block_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			// Total of 1025 characters
			uniform aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
			{
				vec4 uniformMember;
			} uniformBlock;

			void main()
			{
				o_color = uniformBlock.uniformMember;
			}
		""
	end
	case invalid_number_instance_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformInstance
			{
				vec4 uniformMember;
			} 0uniformBlock;

			void main()
			{
				gl_Position = 0uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case invalid_number_instance_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformInstance
			{
				vec4 uniformMember;
			} 0uniformBlock;

			void main()
			{
				o_color = 0uniformBlock.uniformMember;
			}
		""
	end
	case invalid_hash_instance_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformInstance
			{
				vec4 uniformMember;
			} $uniformBlock;

			void main()
			{
				gl_Position = $uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case invalid_hash_instance_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformInstance
			{
				vec4 uniformMember;
			} $uniformBlock;

			void main()
			{
				o_color = $uniformBlock.uniformMember;
			}
		""
	end
	case invalid_dollar_instance_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformInstance
			{
				vec4 uniformMember;
			} $uniformBlock;

			void main()
			{
				gl_Position = $uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case invalid_dollar_instance_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformInstance
			{
				vec4 uniformMember;
			} $uniformBlock;

			void main()
			{
				o_color = $uniformBlock.uniformMember;
			}
		""
	end
	case invalid_identifier_instance_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} gl_uniformBlock;

			void main()
			{
				gl_Position = gl_uniformBlock.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case invalid_identifier_instance_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} gl_uniformBlock;

			void main()
			{
				o_color = gl_uniformBlock.uniformMember;
			}
		""
	end
	case repeated_block_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlockA;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlockB;

			void main()
			{
				gl_Position = uniformBlockA.uniformMember + uniformBlockB.uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case repeated_block_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlockA;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlockB;

			void main()
			{
				o_color = uniformBlockA.uniformMember + uniformBlockB.uniformMember;
			}
		""
	end
	case repeated_block_no_instance_name_vertex
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;



			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			uniform UniformBlock
			{
				vec4 uniformMember;
			};

			void main()
			{
				gl_Position = uniformBlock.uniformMember + uniformMember;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			void main()
			{
				o_color = vec4(1.0);
			}
		""
	end
	case repeated_block_no_instance_name_fragment
		version 300 es
		expect compile_fail

		vertex ""
			#version 300 es
			precision highp float;

			in vec4 a_pos;

			void main()
			{
				gl_Position = a_pos;
			}
		""

		fragment ""
			#version 300 es
			precision highp float;

			layout(location=0) out vec4 o_color;

			uniform UniformBlock
			{
				vec4 uniformMember;
			} uniformBlock;

			uniform UniformBlock
			{
				vec4 uniformMember;
			};

			void main()
			{
				o_color = uniformBlock.uniformMember + uniformMember;
			}
		""
	end

end # invalid