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

group variables "Order of qualification in variable declarations."

    group valid "Valid orderings."

        case invariant_storage_precision
            expect pass
            values {}

            vertex ""
                precision mediump float;
                attribute highp vec4 dEQP_Position;

                invariant varying lowp float x0;

                 uniform mediump float x1;

                 attribute mediump float x2;

                void main()
                {
                    x0 = 1.0;
                    gl_Position = dEQP_Position;
                }
            ""

            fragment ""
                precision mediump float;

                invariant varying lowp float x0;

                 uniform mediump float x1;

                void main()
                {
                    float result = x0 + x1;
                    gl_FragColor = vec4(result, result, result, 1.0);
                }
            ""
        end
        case storage_precision
            expect pass
            values {}

            vertex ""
                precision mediump float;
                attribute highp vec4 dEQP_Position;

                varying lowp float x0;

                uniform mediump float x1;

                attribute mediump float x2;

                void main()
                {
                    x0 = 1.0;
                    gl_Position = dEQP_Position;
                }
            ""

            fragment ""
                precision mediump float;

                varying lowp float x0;

                uniform mediump float x1;

                void main()
                {
                    float result = x0 + x1;
                    gl_FragColor = vec4(result, result, result, 1.0);
                }
            ""
        end
        case invariant_storage
            expect pass
            values {}

            vertex ""
                precision mediump float;
                attribute highp vec4 dEQP_Position;

                invariant varying float x0;

                 uniform float x1;

                 attribute float x2;

                void main()
                {
                    x0 = 1.0;
                    gl_Position = dEQP_Position;
                }
            ""

            fragment ""
                precision mediump float;

                invariant varying float x0;

                 uniform float x1;

                void main()
                {
                    float result = x0 + x1;
                    gl_FragColor = vec4(result, result, result, 1.0);
                }
            ""
        end

    end # valid
    group invalid "Invalid orderings."

        case invariant_precision_storage
            expect compile_fail
            values {}

            vertex ""
                precision mediump float;
                attribute highp vec4 dEQP_Position;

                invariant lowp varying float x0;

                 mediump uniform float x1;

                 mediump attribute float x2;

                void main()
                {
                    x0 = 1.0;
                    gl_Position = dEQP_Position;
                }
            ""

            fragment ""
                precision mediump float;

                invariant lowp varying float x0;

                 mediump uniform float x1;

                void main()
                {
                    float result = x0 + x1;
                    gl_FragColor = vec4(result, result, result, 1.0);
                }
            ""
        end
        case storage_invariant_precision
            expect compile_fail
            values {}

            vertex ""
                precision mediump float;
                attribute highp vec4 dEQP_Position;

                varying invariant lowp float x0;

                uniform mediump float x1;

                attribute mediump float x2;

                void main()
                {
                    x0 = 1.0;
                    gl_Position = dEQP_Position;
                }
            ""

            fragment ""
                precision mediump float;

                varying invariant lowp float x0;

                uniform mediump float x1;

                void main()
                {
                    float result = x0 + x1;
                    gl_FragColor = vec4(result, result, result, 1.0);
                }
            ""
        end
        case storage_precision_invariant
            expect compile_fail
            values {}

            vertex ""
                precision mediump float;
                attribute highp vec4 dEQP_Position;

                varying lowp invariant float x0;

                uniform mediump float x1;

                attribute mediump float x2;

                void main()
                {
                    x0 = 1.0;
                    gl_Position = dEQP_Position;
                }
            ""

            fragment ""
                precision mediump float;

                varying lowp invariant float x0;

                uniform mediump float x1;

                void main()
                {
                    float result = x0 + x1;
                    gl_FragColor = vec4(result, result, result, 1.0);
                }
            ""
        end
        case precision_invariant_storage
            expect compile_fail
            values {}

            vertex ""
                precision mediump float;
                attribute highp vec4 dEQP_Position;

                lowp invariant varying float x0;

                mediump uniform float x1;

                mediump attribute float x2;

                void main()
                {
                    x0 = 1.0;
                    gl_Position = dEQP_Position;
                }
            ""

            fragment ""
                precision mediump float;

                lowp invariant varying float x0;

                mediump uniform float x1;

                void main()
                {
                    float result = x0 + x1;
                    gl_FragColor = vec4(result, result, result, 1.0);
                }
            ""
        end
        case precision_storage_invariant
            expect compile_fail
            values {}

            vertex ""
                precision mediump float;
                attribute highp vec4 dEQP_Position;

                lowp varying invariant float x0;

                mediump uniform float x1;

                mediump attribute float x2;

                void main()
                {
                    x0 = 1.0;
                    gl_Position = dEQP_Position;
                }
            ""

            fragment ""
                precision mediump float;

                lowp varying invariant float x0;

                mediump uniform float x1;

                void main()
                {
                    float result = x0 + x1;
                    gl_FragColor = vec4(result, result, result, 1.0);
                }
            ""
        end
        case precision_storage
            expect compile_fail
            values {}

            vertex ""
                precision mediump float;
                attribute highp vec4 dEQP_Position;

                lowp varying float x0;

                mediump uniform float x1;

                mediump attribute float x2;

                void main()
                {
                    x0 = 1.0;
                    gl_Position = dEQP_Position;
                }
            ""

            fragment ""
                precision mediump float;

                lowp varying float x0;

                mediump uniform float x1;

                void main()
                {
                    float result = x0 + x1;
                    gl_FragColor = vec4(result, result, result, 1.0);
                }
            ""
        end
        case storage_invariant
            expect compile_fail
            values {}

            vertex ""
                precision mediump float;
                attribute highp vec4 dEQP_Position;

                varying invariant float x0;

                uniform float x1;

                attribute float x2;

                void main()
                {
                    x0 = 1.0;
                    gl_Position = dEQP_Position;
                }
            ""

            fragment ""
                precision mediump float;

                varying invariant float x0;

                uniform float x1;

                void main()
                {
                    float result = x0 + x1;
                    gl_FragColor = vec4(result, result, result, 1.0);
                }
            ""
        end

    end # invalid

end # variables
group parameters "Order of qualification in function parameters."

    group valid "Valid orderings."

        case storage_parameter_precision
            expect pass
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (const in lowp float x)
                {
                    return x + 1.0;
                }

                void foo1 ( out mediump float x)
                {
                    x = 1.0;
                }

                float foo2 ( inout mediump float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end
        case storage_parameter
            expect pass
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (const in float x)
                {
                    return x + 1.0;
                }

                void foo1 ( out float x)
                {
                    x = 1.0;
                }

                float foo2 ( inout float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end
        case storage_precision
            expect pass
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (const lowp float x)
                {
                    return x + 1.0;
                }

                void foo1 ( mediump float x)
                {
                    x = 1.0;
                }

                float foo2 ( mediump float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end
        case parameter_precision
            expect pass
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (in lowp float x)
                {
                    return x + 1.0;
                }

                void foo1 (out mediump float x)
                {
                    x = 1.0;
                }

                float foo2 (inout mediump float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end

    end # valid
    group invalid "Invalid orderings."

        case storage_precision_parameter
            expect compile_fail
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (const lowp in float x)
                {
                    return x + 1.0;
                }

                void foo1 ( mediump out float x)
                {
                    x = 1.0;
                }

                float foo2 ( mediump inout float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end
        case parameter_storage_precision
            expect compile_fail
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (in const lowp float x)
                {
                    return x + 1.0;
                }

                void foo1 (out mediump float x)
                {
                    x = 1.0;
                }

                float foo2 (inout mediump float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end
        case parameter_precision_storage
            expect compile_fail
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (in lowp const float x)
                {
                    return x + 1.0;
                }

                void foo1 (out mediump float x)
                {
                    x = 1.0;
                }

                float foo2 (inout mediump float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end
        case precision_storage_parameter
            expect compile_fail
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (lowp const in float x)
                {
                    return x + 1.0;
                }

                void foo1 (mediump out float x)
                {
                    x = 1.0;
                }

                float foo2 (mediump inout float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end
        case precision_parameter_storage
            expect compile_fail
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (lowp in const float x)
                {
                    return x + 1.0;
                }

                void foo1 (mediump out float x)
                {
                    x = 1.0;
                }

                float foo2 (mediump inout float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end
        case parameter_storage
            expect compile_fail
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (in const float x)
                {
                    return x + 1.0;
                }

                void foo1 (out float x)
                {
                    x = 1.0;
                }

                float foo2 (inout float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end
        case precision_storage
            expect compile_fail
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (lowp const float x)
                {
                    return x + 1.0;
                }

                void foo1 (mediump float x)
                {
                    x = 1.0;
                }

                float foo2 (mediump float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end
        case precision_parameter
            expect compile_fail
            values {}

            both ""
                precision mediump float;
                ${DECLARATIONS}

                float foo0 (lowp in float x)
                {
                    return x + 1.0;
                }

                void foo1 (mediump out float x)
                {
                    x = 1.0;
                }

                float foo2 (mediump inout float x)
                {
                    return x + 1.0;
                }

                void main()
                {
                    ${SETUP}
                    float result;
                    foo1(result);
                    float x0 = foo0(1.0);
                    foo2(result);
                    ${OUTPUT}
                }
            ""
        end

    end # invalid

end # parameters
