# 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
