Edit

kc3-lang/angle/src/compiler/translator/builtin_function_declarations.txt

Branch :

  • Show log

    Commit

  • Author : Clemen Deng
    Date : 2019-08-01 17:09:53
    Hash : 56db3789
    Message : Use flat arrays instead of switches for function lookups Current implementation of built in function lookup uses autogenerated switch statements. Instead, use the perfect hash mapping to have the lookup use arrays instead. This will improve runtime performance. Bug: angleproject:3805 Change-Id: I6d0ba62d79abd53a7fe818fe675282800781f256 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1756883 Commit-Queue: Clemen Deng <clemendeng@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • src/compiler/translator/builtin_function_declarations.txt
  • // The format of this file:
    //   C++ style single-line comments are supported.
    //   Leading whitespace is only for formatting and doesn't have semantic meaning.
    //
    //   Grouping:
    //   Groups of functions are denoted by "GROUP BEGIN" and "GROUP END". Groups can be nested.
    //   Groups can have metadata related to the group itself. This is given at the end of the GROUP
    //   BEGIN line in JSON object format.
    //   Example:
    //     GROUP BEGIN <group name> {"shader_type": "FRAGMENT"}
    //     GROUP END <group name>
    //
    //   Defaults:
    //   Default metadata for functions can be set with "DEFAULT METADATA" followed by metadata in JSON
    //   object format. The metadata is applied to all following functions regardless of grouping until
    //   another "DEFAULT METADATA" line is encountered, or until the end of a top-level group.
    //   Example:
    //     DEFAULT METADATA {"op": "CallBuiltInFunction"}
    //
    //   Supported function metadata properties are:
    //     "essl_level"
    //         string, one of COMMON_BUILTINS, ESSL1_BUILTINS, ESSL3_BUILTINS and ESSL3_1_BUILTINS.
    //     "glsl_level"
    //         string, one of COMMON_BUILTINS, COMMON_BUILTINS, GLSL1_2_BUILTINS, GLSL1_3_BUILTINS,
    //         GLSL1_4_BUILTINS, GLSL1_5_BUILTINS, GLSL3_3_BUILTINS, GLSL4_BUILTINS, GLSL4_1_BUILTINS,
    //         GLSL4_2_BUILTINS, GLSL4_3_BUILTINS, GLSL4_4_BUILTINS, GLSL4_5_BUILTINS, and
    //         GLSL4_6_BUILTINS.
    //     "op"
    //         string, either EOp code or "auto", in which case the op is derived from the function
    //         name.
    //     "suffix"
    //         string, suffix that is used to disambiguate C++ variable names created based on the
    //         function name from C++ keywords, or disambiguate two functions with the same name.
    //     "essl_extension"
    //         string, ESSL extension where the function is defined.
    //     "glsl_extension"
    //         string, GLSL extension where the function is defined.
    //     "hasSideEffects"
    //         boolean, can be used to mark a function as having side effects even if it has op other
    //         than CallBuiltInFunction and it doesn't have out parameters. In case the op is
    //         CallBuiltInFunction or the function has out parameters it is automatically treated as
    //         having side effects.
    //
    //   Function declarations:
    //   Lines that declare functions are in a similar format as in the GLSL spec:
    //     <return type> <function name>(<param type>, ...);
    //   Parameter types can have "out" or "inout" qualifiers.
    
    GROUP BEGIN Trigonometric
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType radians(genType);
        genType degrees(genType);
        genType sin(genType);
        genType cos(genType);
        genType tan(genType);
        genType asin(genType);
        genType acos(genType);
        genType atan(genType, genType);
        genType atan(genType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genType sinh(genType);
        genType cosh(genType);
        genType tanh(genType);
        genType asinh(genType);
        genType acosh(genType);
        genType atanh(genType);
    GROUP END Trigonometric
    
    GROUP BEGIN Exponential
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType pow(genType, genType);
        genType exp(genType);
        genType log(genType);
        genType exp2(genType);
        genType log2(genType);
        genType sqrt(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType sqrt(genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType inversesqrt(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType inversesqrt(genDType);
    GROUP END Exponential
    
    GROUP BEGIN Common
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType abs(genType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genIType abs(genIType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType abs(genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType sign(genType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genIType sign(genIType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType sign(genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType floor(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType floor(genDType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genType trunc(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType trunc(genDType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genType round(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType round(genDType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genType roundEven(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType roundEven(genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType ceil(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType ceil(genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType fract(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType fract(genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType mod(genType, float);
        genType mod(genType, genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType mod(genDType, double);
        genDType mod(genDType, genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType min(genType, float);
        genType min(genType, genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType min(genDType, genDType);
        genDType min(genDType, double);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genIType min(genIType, genIType);
        genIType min(genIType, int);
        genUType min(genUType, genUType);
        genUType min(genUType, uint);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType max(genType, float);
        genType max(genType, genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType max(genDType, genDType);
        genDType max(genDType, double);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genIType max(genIType, genIType);
        genIType max(genIType, int);
        genUType max(genUType, genUType);
        genUType max(genUType, uint);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType clamp(genType, float, float);
        genType clamp(genType, genType, genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType clamp(genDType, double, double);
        genDType clamp(genDType, genDType, genDType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genIType clamp(genIType, int, int);
        genIType clamp(genIType, genIType, genIType);
        genUType clamp(genUType, uint, uint);
        genUType clamp(genUType, genUType, genUType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType mix(genType, genType, float);
        genType mix(genType, genType, genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType mix(genDType, genDType, double);
        genDType mix(genDType, genDType, genDType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genType mix(genType, genType, genBType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType mix(genDType, genDType, genBType);
      DEFAULT METADATA {"glsl_level": "GLSL4_5_BUILTINS", "op": "auto"}
        genIType mix(genIType, genIType, genBType);
        genUType mix(genUType, genUType, genBType);
        genBType mix(genBType, genBType, genBType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType step(genType, genType);
        genType step(float, genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType step(genDType, genDType);
        genDType step(double, genDType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType smoothstep(genDType, genDType, genDType);
        genDType smoothstep(double, double, genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType smoothstep(genType, genType, genType);
        genType smoothstep(float, float, genType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genType modf(genType, out genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType modf(genDType, out genDType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genBType isnan(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genBType isnan(genDType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "auto"}
        genBType isinf(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genBType isinf(genDType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL3_3_BUILTINS", "op": "auto"}
        genIType floatBitsToInt(genType);
        genUType floatBitsToUint(genType);
        genType intBitsToFloat(genIType);
        genType uintBitsToFloat(genUType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genType fma(genType, genType, genType);
        genType fma(genDType, genDType, genDType);
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genType frexp(genType, out genIType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType frexp(genDType, out genIType);
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genType ldexp(genType, genIType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType ldexp(genDType, genIType);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL4_2_BUILTINS", "op": "auto"}
        uint packSnorm2x16(vec2);
        uint packHalf2x16(vec2);
        vec2 unpackSnorm2x16(uint);
        vec2 unpackHalf2x16(uint);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        uint packUnorm2x16(vec2);
        vec2 unpackUnorm2x16(uint);
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        uint packUnorm4x8(vec4);
        uint packSnorm4x8(vec4);
        vec4 unpackUnorm4x8(uint);
        vec4 unpackSnorm4x8(uint);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        double packDouble2x32(uvec2);
        uvec2 unpackDouble2x32(double);
    GROUP END Common
    
    GROUP BEGIN Geometric
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        float length(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        double length(genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        float distance(genType, genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        double distance(genDType, genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        float dot(genType, genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        double dot(genDType, genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        vec3 cross(vec3, vec3);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        dvec3 cross(dvec3, dvec3);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType normalize(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType normalize(genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType faceforward(genType, genType, genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType faceforward(genDType, genDType, genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType reflect(genType, genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType reflect(genDType, genDType);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        genType refract(genType, genType, float);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genDType refract(genDType, genDType, float);
    GROUP END Geometric
    
    GROUP BEGIN GeometricVS {"shader_type": "VERTEX"}
      DEFAULT METADATA {"glsl_level": "COMMON_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 ftransform();
    GROUP END GeometricVS
    
    GROUP BEGIN Matrix
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "MulMatrixComponentWise"}
        mat2 matrixCompMult(mat2, mat2);
        mat3 matrixCompMult(mat3, mat3);
        mat4 matrixCompMult(mat4, mat4);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "op": "MulMatrixComponentWise"}
        mat2x3 matrixCompMult(mat2x3, mat2x3);
        mat3x2 matrixCompMult(mat3x2, mat3x2);
        mat2x4 matrixCompMult(mat2x4, mat2x4);
        mat4x2 matrixCompMult(mat4x2, mat4x2);
        mat3x4 matrixCompMult(mat3x4, mat3x4);
        mat4x3 matrixCompMult(mat4x3, mat4x3);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_2_BUILTINS", "op": "auto"}
        mat2 outerProduct(vec2, vec2);
        mat3 outerProduct(vec3, vec3);
        mat4 outerProduct(vec4, vec4);
        mat2x3 outerProduct(vec3, vec2);
        mat3x2 outerProduct(vec2, vec3);
        mat2x4 outerProduct(vec4, vec2);
        mat4x2 outerProduct(vec2, vec4);
        mat3x4 outerProduct(vec4, vec3);
        mat4x3 outerProduct(vec3, vec4);
        mat2 transpose(mat2);
        mat3 transpose(mat3);
        mat4 transpose(mat4);
        mat2x3 transpose(mat3x2);
        mat3x2 transpose(mat2x3);
        mat2x4 transpose(mat4x2);
        mat4x2 transpose(mat2x4);
        mat3x4 transpose(mat4x3);
        mat4x3 transpose(mat3x4);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "op": "auto"}
        float determinant(mat2);
        float determinant(mat3);
        float determinant(mat4);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_4_BUILTINS", "op": "auto"}
        mat2 inverse(mat2);
        mat3 inverse(mat3);
        mat4 inverse(mat4);
    GROUP END Matrix
    
    GROUP BEGIN Vector
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "LessThanComponentWise"}
        bvec lessThan(vec, vec);
        bvec lessThan(ivec, ivec);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "LessThanComponentWise"}
        bvec lessThan(uvec, uvec);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "LessThanEqualComponentWise"}
        bvec lessThanEqual(vec, vec);
        bvec lessThanEqual(ivec, ivec);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "LessThanEqualComponentWise"}
        bvec lessThanEqual(uvec, uvec);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "GreaterThanComponentWise"}
        bvec greaterThan(vec, vec);
        bvec greaterThan(ivec, ivec);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "GreaterThanComponentWise"}
        bvec greaterThan(uvec, uvec);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "GreaterThanEqualComponentWise"}
        bvec greaterThanEqual(vec, vec);
        bvec greaterThanEqual(ivec, ivec);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "GreaterThanEqualComponentWise"}
        bvec greaterThanEqual(uvec, uvec);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "EqualComponentWise"}
        bvec equal(vec, vec);
        bvec equal(ivec, ivec);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "EqualComponentWise"}
        bvec equal(uvec, uvec);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "EqualComponentWise"}
        bvec equal(bvec, bvec);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "NotEqualComponentWise"}
        bvec notEqual(vec, vec);
        bvec notEqual(ivec, ivec);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "NotEqualComponentWise"}
        bvec notEqual(uvec, uvec);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "NotEqualComponentWise"}
        bvec notEqual(bvec, bvec);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto"}
        bool any(bvec);
        bool all(bvec);
      DEFAULT METADATA {"essl_level": "COMMON_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "LogicalNotComponentWise", "suffix": "Func"}
        bvec not(bvec);
    GROUP END Vector
    
    GROUP BEGIN Integer
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "op": "auto"}
        genIType bitfieldExtract(genIType, int, int);
        genUType bitfieldExtract(genUType, int, int);
        genIType bitfieldInsert(genIType, genIType, int, int);
        genUType bitfieldInsert(genUType, genUType, int, int);
        genIType bitfieldReverse(genIType);
        genUType bitfieldReverse(genUType);
        genIType bitCount(genIType);
        genIType bitCount(genUType);
        genIType findLSB(genIType);
        genIType findLSB(genUType);
        genIType findMSB(genIType);
        genIType findMSB(genUType);
        genUType uaddCarry(genUType, genUType, out genUType);
        genUType usubBorrow(genUType, genUType, out genUType);
        void umulExtended(genUType, genUType, out genUType, out genUType);
        void imulExtended(genIType, genIType, out genIType, out genIType);
    GROUP END Integer
    
    GROUP BEGIN TextureFirstVersions
      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 texture2D(sampler2D, vec2);
        vec4 texture2DProj(sampler2D, vec3);
        vec4 texture2DProj(sampler2D, vec4);
        vec4 textureCube(samplerCube, vec3);
      DEFAULT METADATA {"glsl_level": "COMMON_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 texture1D(sampler1D, float);
        vec4 texture1DProj(sampler1D, vec2);
        vec4 texture1DProj(sampler1D, vec4);
        vec4 texture3D(sampler3D, vec3);
        vec4 texture3DProj(sampler3D, vec4);
        vec4 shadow1D(sampler1DShadow, vec3);
        vec4 shadow1DProj(sampler1DShadow, vec4);
        vec4 shadow2D(sampler2DShadow, vec3);
        vec4 shadow2DProj(sampler2DShadow, vec4);
    GROUP END TextureFirstVersions
    
    // These are extension functions from OES_EGL_image_external and
    // NV_EGL_stream_consumer_external. We don't have a way to mark a built-in with two alternative
    // extensions, so these are marked with none. This is fine, since these functions overload core
    // function names and the functions require a samplerExternalOES parameter, which can only be
    // created if one of the extensions is enabled.
    // TODO(oetuaho): Consider implementing a cleaner solution.
    GROUP BEGIN EGL_image_external
      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 texture2D(samplerExternalOES, vec2);
        vec4 texture2DProj(samplerExternalOES, vec3);
        vec4 texture2DProj(samplerExternalOES, vec4);
    GROUP END EGL_image_external
    
    GROUP BEGIN ARB_texture_rectangle
      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "ARB_texture_rectangle"}
        vec4 texture2DRect(sampler2DRect, vec2);
        vec4 texture2DRectProj(sampler2DRect, vec3);
        vec4 texture2DRectProj(sampler2DRect, vec4);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "ARB_texture_rectangle"}
        // We don't have a rectangle texture essl_extension for OpenGL ES however based on the behavior of
        // rectangle texture in desktop OpenGL, they should be sampled with a "texture" overload in
        // GLSL version that have such an overload. This is the case for ESSL3 and above.
        vec4 texture(sampler2DRect, vec2);
        vec4 textureProj(sampler2DRect, vec3);
        vec4 textureProj(sampler2DRect, vec4);
    GROUP END ARB_texture_rectangle
    
    // The *Grad* variants are new to both vertex and fragment shaders; the fragment
    // shader specific pieces are added separately below.
    GROUP BEGIN EXT_shader_texture_lod
      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "EXT_shader_texture_lod"}
        vec4 texture2DGradEXT(sampler2D, vec2, vec2, vec2);
        vec4 texture2DProjGradEXT(sampler2D, vec3, vec2, vec2);
        vec4 texture2DProjGradEXT(sampler2D, vec4, vec2, vec2);
        vec4 textureCubeGradEXT(samplerCube, vec3, vec3, vec3);
    GROUP END EXT_shader_texture_lod
    
    GROUP BEGIN TextureFirstVersionsFS {"shader_type": "FRAGMENT"}
      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 texture2D(sampler2D, vec2, float);
        vec4 texture2DProj(sampler2D, vec3, float);
        vec4 texture2DProj(sampler2D, vec4, float);
        vec4 textureCube(samplerCube, vec3, float);
      DEFAULT METADATA {"glsl_level": "COMMON_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 texture3D(sampler3D, vec3, float);
        vec4 texture3DProj(sampler3D, vec4, float);
        vec4 texture3DLod(sampler3D, vec3, float);
        vec4 texture3DProjLod(sampler3D, vec4, float);
        vec4 texture1D(sampler1D, float, float);
        vec4 texture1DProj(sampler1D, vec2, float);
        vec4 texture1DProj(sampler1D, vec4, float);
        vec4 shadow1D(sampler1DShadow, vec3, float);
        vec4 shadow1DProj(sampler1DShadow, vec4, float);
        vec4 shadow2D(sampler2DShadow, vec3, float);
        vec4 shadow2DProj(sampler2DShadow, vec4, float);
    GROUP END TextureFirstVersionsFS
    
    GROUP BEGIN TextureFirstVersionsFSExt {"shader_type": "FRAGMENT"}
      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "op": "auto", "essl_extension": "OES_standard_derivatives", "hasSideEffects": "true", "suffix": "Ext"}
        genType dFdx(genType);
        genType dFdy(genType);
        genType fwidth(genType);
      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "EXT_shader_texture_lod"}
        vec4 texture2DLodEXT(sampler2D, vec2, float);
        vec4 texture2DProjLodEXT(sampler2D, vec3, float);
        vec4 texture2DProjLodEXT(sampler2D, vec4, float);
        vec4 textureCubeLodEXT(samplerCube, vec3, float);
      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "OES_texture_3D"}
        vec4 texture3D(sampler3D, vec3);
        vec4 texture3DProj(sampler3D, vec4);
      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "OES_texture_3D"}
        vec4 texture3D(sampler3D, vec3, float);
        vec4 texture3DProj(sampler3D, vec4, float);
      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "OES_texture_3D"}
        vec4 texture3DLod(sampler3D, vec3, float);
        vec4 texture3DProjLod(sampler3D, vec4, float);
    GROUP END TextureFirstVersionsFSExt
    
    GROUP BEGIN TextureFirstVersionsVS {"shader_type": "VERTEX"}
      DEFAULT METADATA {"essl_level": "ESSL1_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 texture2DLod(sampler2D, vec2, float);
        vec4 texture2DProjLod(sampler2D, vec3, float);
        vec4 texture2DProjLod(sampler2D, vec4, float);
        vec4 textureCubeLod(samplerCube, vec3, float);
      DEFAULT METADATA {"glsl_level": "COMMON_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 texture1DLod(sampler1D, float, float);
        vec4 texture1DProjLod(sampler1D, vec2, float);
        vec4 texture1DProjLod(sampler1D, vec4, float);
        vec4 shadow1DLod(sampler1DShadow, vec3, float);
        vec4 shadow1DProjLod(sampler1DShadow, vec4, float);
        vec4 shadow2DLod(sampler2DShadow, vec3, float);
        vec4 shadow2DProjLod(sampler2DShadow, vec4, float);
    GROUP END TextureFirstVersionsVS
    
    GROUP BEGIN TextureNoBias
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texture(gsampler2D, vec2);
        gvec4 texture(gsampler3D, vec3);
        gvec4 texture(gsamplerCube, vec3);
        gvec4 texture(gsampler2DArray, vec3);
        float texture(sampler2DShadow, vec3);
        float texture(samplerCubeShadow, vec4);
        float texture(sampler2DArrayShadow, vec4);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texture(gsampler1D, float);
        float texture(sampler1DShadow, vec3);
        gvec4 texture(gsampler1DArray, vec3);
        float texture(sampler1DArrayShadow, vec3);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texture(gsampler2DRect, vec2);
        float texture(sampler2DRectShadow, vec3);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        float texture(samplerCubeArrayShadow, vec4, float);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProj(gsampler2D, vec3);
        gvec4 textureProj(gsampler2D, vec4);
        gvec4 textureProj(gsampler3D, vec4);
        float textureProj(sampler2DShadow, vec4);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProj(gsampler1D, vec2);
        gvec4 textureProj(gsampler1D, vec4);
        float textureProj(sampler1DShadow, vec4);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProj(gsampler2DRect, vec3);
        gvec4 textureProj(gsampler2DRect, vec4);
        float textureProj(sampler2DRectShadow, vec4);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureLod(gsampler2D, vec2, float);
        gvec4 textureLod(gsampler3D, vec3, float);
        gvec4 textureLod(gsamplerCube, vec3, float);
        gvec4 textureLod(gsampler2DArray, vec3, float);
        float textureLod(sampler2DShadow, vec3, float);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureLod(gsampler1D, float, float);
        float textureLod(sampler1DShadow, vec3, float);
        gvec4 textureLod(gsampler1DArray, vec2, float);
        float textureLod(sampler1DArrayShadow, vec3, float);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureLod(gsamplerCubeArray, vec4, float);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        ivec2 textureSize(gsampler2D, int);
        ivec3 textureSize(gsampler3D, int);
        ivec2 textureSize(gsamplerCube, int);
        ivec3 textureSize(gsampler2DArray, int);
        ivec2 textureSize(sampler2DShadow, int);
        ivec2 textureSize(samplerCubeShadow, int);
        ivec3 textureSize(sampler2DArrayShadow, int);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        int textureSize(gsampler1D, int);
        int textureSize(sampler1DShadow, int);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        ivec3 textureSize(gsamplerCubeArray, int);
        ivec3 textureSize(samplerCubeArrayShadow, int);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        ivec2 textureSize(gsampler2DRect);
        ivec2 textureSize(sampler2DRectShadow);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        ivec2 textureSize(gsampler1DArray, int);
        ivec2 textureSize(sampler1DArrayShadow, int);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        int textureSize(gsamplerBuffer);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjLod(gsampler2D, vec3, float);
        gvec4 textureProjLod(gsampler2D, vec4, float);
        gvec4 textureProjLod(gsampler3D, vec4, float);
        float textureProjLod(sampler2DShadow, vec4, float);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjLod(gsampler1D, vec2, float);
        gvec4 textureProjLod(gsampler1D, vec4, float);
        float textureProjLod(sampler1DShadow, vec4, float);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texelFetch(gsampler2D, ivec2, int);
        gvec4 texelFetch(gsampler3D, ivec3, int);
        gvec4 texelFetch(gsampler2DArray, ivec3, int);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texelFetch(gsampler1D, int, int);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texelFetch(gsampler2DRect, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texelFetch(gsampler1DArray, ivec2, int);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texelFetch(gsamplerBuffer, int);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureGrad(gsampler2D, vec2, vec2, vec2);
        gvec4 textureGrad(gsampler3D, vec3, vec3, vec3);
        gvec4 textureGrad(gsamplerCube, vec3, vec3, vec3);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureGrad(gsampler2D, float, float, float);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureGrad(gsampler2DRect, vec2, vec2, vec2);
        gvec4 textureGrad(sampler2DRectShadow, vec3, vec2, vec2);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        float textureGrad(sampler2DShadow, vec3, vec2, vec2);
        float textureGrad(samplerCubeShadow, vec4, vec3, vec3);
        gvec4 textureGrad(gsampler2DArray, vec3, vec2, vec2);
        float textureGrad(sampler2DArrayShadow, vec4, vec2, vec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        float textureGrad(sampler1DShadow, vec3, float, float);
        gvec4 textureGrad(gsampler1DArray, vec2, float, float);
        float textureGrad(sampler1DArrayShadow, vec3, float, float);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureGrad(gsamplerCubeArray, vec4, vec3, vec3);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjGrad(gsampler2D, vec3, vec2, vec2);
        gvec4 textureProjGrad(gsampler2D, vec4, vec2, vec2);
        gvec4 textureProjGrad(gsampler3D, vec4, vec3, vec3);
        float textureProjGrad(sampler2DShadow, vec4, vec2, vec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjGrad(gsampler1D, vec2, float, float);
        gvec4 textureProjGrad(gsampler1D, vec4, float, float);
        float textureProjGrad(sampler1DShadow, vec4, float, float);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjGrad(gsampler2DRect, vec3, vec2, vec2);
        gvec4 textureProjGrad(gsampler2DRect, vec4, vec2, vec2);
        float textureProjGrad(sampler2DRectShadow, vec4, vec2, vec2);
      DEFAULT METADATA {"glsl_level": "GLSL4_3_BUILTINS", "op": "CallBuiltInFunction"}
        int textureQueryLevels(gsampler1D);
        int textureQueryLevels(gsampler2D);
        int textureQueryLevels(gsampler3D);
        int textureQueryLevels(gsamplerCube);
        int textureQueryLevels(gsampler1DArray);
        int textureQueryLevels(gsampler2DArray);
        int textureQueryLevels(gsamplerCubeArray);
        int textureQueryLevels(sampler1DShadow);
        int textureQueryLevels(sampler2DShadow);
        int textureQueryLevels(samplerCubeShadow);
        int textureQueryLevels(sampler1DArrayShadow);
        int textureQueryLevels(sampler2DArrayShadow);
        int textureQueryLevels(samplerCubeArrayShadow);
      DEFAULT METADATA {"glsl_level": "GLSL4_5_BUILTINS", "op": "CallBuiltInFunction"}
        int textureSamples(gsampler2DMS);
        int textureSamples(gsampler2DMSArray);
    GROUP END TextureNoBias
    
    GROUP BEGIN TextureSizeMS
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL1_5_BUILTINS", "op": "CallBuiltInFunction"}
        ivec2 textureSize(gsampler2DMS);
    GROUP END TextureSizeMS
    
    GROUP BEGIN TextureSizeMSExt
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "ANGLE_texture_multisample", "suffix": "Ext"}
        ivec2 textureSize(gsampler2DMS);
    GROUP END TextureSizeMSExt
    
    GROUP BEGIN TextureSizeMSArray
      DEFAULT METADATA {"glsl_level": "GLSL1_5_BUILTINS", "op": "CallBuiltInFunction"}
        ivec3 textureSize(gsampler2DMSArray);
    GROUP END TextureSizeMSArray
    
    GROUP BEGIN TextureSizeMSArrayExt
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "OES_texture_storage_multisample_2d_array", "suffix": "Ext"}
        ivec3 textureSize(gsampler2DMSArray);
    GROUP END TextureSizeMSArrayExt
    
    GROUP BEGIN TexelFetchMS
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL1_5_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texelFetch(gsampler2DMS, ivec2, int);
    GROUP END TexelFetchMS
    
    GROUP BEGIN TexelFetchMSExt
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "ANGLE_texture_multisample", "suffix": "Ext"}
        gvec4 texelFetch(gsampler2DMS, ivec2, int);
    GROUP END TexelFetchMSExt
    
    GROUP BEGIN TexelFetchMSArray
      DEFAULT METADATA {"glsl_level": "GLSL1_5_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texelFetch(gsampler2DMSArray, ivec3, int);
    GROUP END TexelFetchMSArray
    
    GROUP BEGIN TexelFetchMSArrayExt
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "OES_texture_storage_multisample_2d_array", "suffix": "Ext"}
        gvec4 texelFetch(gsampler2DMSArray, ivec3, int);
    GROUP END TexelFetchMSArrayExt
    
    GROUP BEGIN TextureBias {"shader_type": "FRAGMENT"}
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texture(gsampler2D, vec2, float);
        gvec4 texture(gsampler3D, vec3, float);
        gvec4 texture(gsamplerCube, vec3, float);
        gvec4 texture(gsampler2DArray, vec3, float);
        gvec4 textureProj(gsampler2D, vec3, float);
        gvec4 textureProj(gsampler2D, vec4, float);
        gvec4 textureProj(gsampler3D, vec4, float);
        float texture(sampler2DShadow, vec3, float);
        float texture(samplerCubeShadow, vec4, float);
        float textureProj(sampler2DShadow, vec4, float);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texture(gsampler1D, float, float);
        float texture(sampler1DShadow, vec3, float);
        gvec4 texture(gsampler1DArray, vec3, float);
        float texture(sampler1DArrayShadow, vec3, float);
        float texture(sampler2DArrayShadow, vec4, float);
        gvec4 textureProj(gsampler1D, vec2, float);
        gvec4 textureProj(gsampler1D, vec4, float);
        float textureProj(sampler1DShadow, vec4, float);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "OES_EGL_image_external_essl3"}
        vec4 texture(samplerExternalOES, vec2, float);
        vec4 textureProj(samplerExternalOES, vec3, float);
        vec4 textureProj(samplerExternalOES, vec4, float);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "EXT_YUV_target"}
        vec4 texture(samplerExternal2DY2YEXT, vec2, float);
        vec4 textureProj(samplerExternal2DY2YEXT, vec3, float);
        vec4 textureProj(samplerExternal2DY2YEXT, vec4, float);
    GROUP END TextureBias
    
    GROUP BEGIN TextureQueryLod {"shader_type": "FRAGMENT"}
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        vec2 textureQueryLod(gsampler1D, float);
        vec2 textureQueryLod(gsampler2D, vec2);
        vec2 textureQueryLod(gsampler3D, vec3);
        vec2 textureQueryLod(gsamplerCube, vec3);
        vec2 textureQueryLod(gsampler1DArray, float);
        vec2 textureQueryLod(gsampler2DArray, vec2);
        vec2 textureQueryLod(gsamplerCubeArray, vec3);
        vec2 textureQueryLod(sampler1DShadow, float);
        vec2 textureQueryLod(sampler2DShadow, vec2);
        vec2 textureQueryLod(samplerCubeShadow, vec3);
        vec2 textureQueryLod(sampler1DArrayShadow, float);
        vec2 textureQueryLod(sampler2DArrayShadow, vec2);
        vec2 textureQueryLod(samplerCubeArrayShadow, vec3);
    GROUP END TextureQueryLod
    
    GROUP BEGIN TextureOffsetNoBias {"queryFunction": true}
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureOffset(gsampler2D, vec2, ivec2);
        gvec4 textureOffset(gsampler3D, vec3, ivec3);
        float textureOffset(sampler2DShadow, vec3, ivec2);
        gvec4 textureOffset(gsampler2DArray, vec3, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureOffset(gsampler1D, float, int);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureOffset(gsampler2DRect, vec2, ivec2);
        float textureOffset(sampler2DRectShadow, vec3, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        float textureOffset(sampler1DShadow, vec3, int);
        gvec4 textureOffset(gsampler1DArray, vec2, int);
        float textureOffset(sampler1DArrayShadow, vec3, int);
      DEFAULT METADATA {"glsl_level": "GLSL4_3_BUILTINS", "op": "CallBuiltInFunction"}
        float textureOffset(sampler2DArrayShadow, vec4, ivec2);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjOffset(gsampler2D, vec3, ivec2);
        gvec4 textureProjOffset(gsampler2D, vec4, ivec2);
        gvec4 textureProjOffset(gsampler3D, vec4, ivec3);
        float textureProjOffset(sampler2DShadow, vec4, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjOffset(gsampler1D, vec2, int);
        gvec4 textureProjOffset(gsampler1D, vec4, int);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjOffset(gsampler2DRect, vec3, ivec2);
        gvec4 textureProjOffset(gsampler2DRect, vec4, ivec2);
        float textureProjOffset(sampler2DRectShadow, vec4, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        float textureProjOffset(sampler1DShadow, vec4, int);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureLodOffset(gsampler2D, vec2, float, ivec2);
        gvec4 textureLodOffset(gsampler3D, vec3, float, ivec3);
        float textureLodOffset(sampler2DShadow, vec3, float, ivec2);
        gvec4 textureLodOffset(gsampler2DArray, vec3, float, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureLodOffset(gsampler1D, float, float, int);
        float textureLodOffset(sampler1DShadow, vec3, float, int);
        gvec4 textureLodOffset(gsampler1DArray, vec2, float, int);
        float textureLodOffset(sampler1DArrayShadow, vec3, float, int);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjLodOffset(gsampler2D, vec3, float, ivec2);
        gvec4 textureProjLodOffset(gsampler2D, vec4, float, ivec2);
        gvec4 textureProjLodOffset(gsampler3D, vec4, float, ivec3);
        float textureProjLodOffset(sampler2DShadow, vec4, float, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjLodOffset(gsampler1D, vec2, float, int);
        gvec4 textureProjLodOffset(gsampler1D, vec4, float, int);
        float textureProjLodOffset(sampler1DShadow, vec4, float, int);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texelFetchOffset(gsampler2D, ivec2, int, ivec2);
        gvec4 texelFetchOffset(gsampler3D, ivec3, int, ivec3);
        gvec4 texelFetchOffset(gsampler2DArray, ivec3, int, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texelFetchOffset(gsampler1D, int, int, int);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texelFetchOffset(gsampler2DRect, ivec2, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 texelFetchOffset(gsampler1DArray, ivec2, int, int);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureGradOffset(gsampler2D, vec2, vec2, vec2, ivec2);
        gvec4 textureGradOffset(gsampler3D, vec3, vec3, vec3, ivec3);
        float textureGradOffset(sampler2DShadow, vec3, vec2, vec2, ivec2);
        gvec4 textureGradOffset(gsampler2DArray, vec3, vec2, vec2, ivec2);
        float textureGradOffset(sampler2DArrayShadow, vec4, vec2, vec2, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureGradOffset(gsampler1D, float, float, float, int);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureGradOffset(gsampler2DRect, vec2, vec2, vec2, ivec2);
        float textureGradOffset(sampler2DRectShadow, vec3, vec2, vec2, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        float textureGradOffset(sampler1DShadow, vec3, float, float, int);
        gvec4 textureGradOffset(gsampler1DArray, vec2, float, float, int);
        float textureGradOffset(sampler1DArrayShadow, vec3, float, float, int);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjGradOffset(gsampler2D, vec3, vec2, vec2, ivec2);
        gvec4 textureProjGradOffset(gsampler2D, vec4, vec2, vec2, ivec2);
        gvec4 textureProjGradOffset(gsampler3D, vec4, vec3, vec3, ivec3);
        float textureProjGradOffset(sampler2DShadow, vec4, vec2, vec2, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjGradOffset(gsampler1D, vec2, float, float, int);
        gvec4 textureProjGradOffset(gsampler1D, vec4, float, float, int);
      DEFAULT METADATA {"glsl_level": "GLSL1_4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjGradOffset(gsampler2DRect, vec3, vec2, vec2, ivec2);
        gvec4 textureProjGradOffset(gsampler2DRect, vec4, vec2, vec2, ivec2);
        float textureProjGradOffset(sampler2DRectShadow, vec4, vec2, vec2, ivec2);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        float textureProjGradOffset(sampler1DShadow, vec4, float, float, int);
    GROUP END TextureOffsetNoBias
    
    GROUP BEGIN TextureOffsetBias {"queryFunction": true, "shader_type": "FRAGMENT"}
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureOffset(gsampler2D, vec2, ivec2, float);
        gvec4 textureOffset(gsampler3D, vec3, ivec3, float);
        float textureOffset(sampler2DShadow, vec3, ivec2, float);
        gvec4 textureOffset(gsampler2DArray, vec3, ivec2, float);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureOffset(gsampler1D, float, int, float);
        float textureOffset(sampler1DShadow, vec3, int, float);
        gvec4 textureOffset(gsampler1DArray, vec2, int, float);
        float textureOffset(sampler1DArrayShadow, vec3, int, float);
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjOffset(gsampler2D, vec3, ivec2, float);
        gvec4 textureProjOffset(gsampler2D, vec4, ivec2, float);
        gvec4 textureProjOffset(gsampler3D, vec4, ivec3, float);
        float textureProjOffset(sampler2DShadow, vec4, ivec2, float);
      DEFAULT METADATA {"glsl_level": "GLSL1_3_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureProjOffset(gsampler1D, vec2, int, float);
        gvec4 textureProjOffset(gsampler1D, vec4, int, float);
        float textureProjOffset(sampler1DShadow, vec4, int, float);
    GROUP END TextureOffsetBias
    
    GROUP BEGIN EGL_image_external_essl3
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "OES_EGL_image_external_essl3"}
        vec4 texture(samplerExternalOES, vec2);
        vec4 textureProj(samplerExternalOES, vec3);
        vec4 textureProj(samplerExternalOES, vec4);
        ivec2 textureSize(samplerExternalOES, int);
        vec4 texelFetch(samplerExternalOES, ivec2, int);
    GROUP END EGL_image_external_essl3
    
    GROUP BEGIN EXT_yuv_target
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "op": "CallBuiltInFunction", "essl_extension": "EXT_YUV_target"}
        vec4 texture(samplerExternal2DY2YEXT, vec2);
        vec4 textureProj(samplerExternal2DY2YEXT, vec3);
        vec4 textureProj(samplerExternal2DY2YEXT, vec4);
        vec3 rgb_2_yuv(vec3, yuvCscStandardEXT);
        vec3 yuv_2_rgb(vec3, yuvCscStandardEXT);
        ivec2 textureSize(samplerExternal2DY2YEXT, int);
        vec4 texelFetch(samplerExternal2DY2YEXT, ivec2, int);
    GROUP END EXT_yuv_target
    
    GROUP BEGIN TextureGather {"queryFunction": true}
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureGather(gsampler2D, vec2);
        gvec4 textureGather(gsampler2D, vec2, int);
        gvec4 textureGather(gsampler2DArray, vec3);
        gvec4 textureGather(gsampler2DArray, vec3, int);
        gvec4 textureGather(gsamplerCube, vec3);
        gvec4 textureGather(gsamplerCube, vec3, int);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        gvec4 textureGather(gsamplerCubeArray, vec4);
        gvec4 textureGather(gsamplerCubeArray, vec4, int);
        gvec4 textureGather(gsampler2DRect, vec3);
        gvec4 textureGather(gsampler2DRect, vec3, int);
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 textureGather(sampler2DShadow, vec2);
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 textureGather(sampler2DShadow, vec2, float);
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 textureGather(sampler2DArrayShadow, vec3);
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 textureGather(sampler2DArrayShadow, vec3, float);
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 textureGather(samplerCubeShadow, vec3);
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 textureGather(samplerCubeShadow, vec3, float);
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        vec4 textureGather(samplerCubeArrayShadow, vec4, float);
        vec4 textureGather(sampler2DRectShadow, vec2, float);
    
        GROUP BEGIN Offset {"queryFunction": true}
          DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
            gvec4 textureGatherOffset(gsampler2D, vec2, ivec2);
            gvec4 textureGatherOffset(gsampler2D, vec2, ivec2, int);
            gvec4 textureGatherOffset(gsampler2DArray, vec3, ivec2);
            gvec4 textureGatherOffset(gsampler2DArray, vec3, ivec2, int);
            vec4 textureGatherOffset(sampler2DShadow, vec2, float, ivec2);
            vec4 textureGatherOffset(sampler2DArrayShadow, vec3, float, ivec2);
          DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
            gvec4 textureGatherOffset(gsampler2DRect, vec2, ivec2);
            gvec4 textureGatherOffset(gsampler2DRect, vec2, ivec2, int);
            vec4 textureGatherOffset(sampler2DRectShadow, vec2, float, ivec2);
            gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4]);
            gvec4 textureGatherOffsets(gsampler2D, vec2, ivec2[4], int);
            gvec4 textureGatherOffsets(gsampler2DArray, vec3, ivec2[4]);
            gvec4 textureGatherOffsets(gsampler2DArray, vec3, ivec2[4], int);
            gvec4 textureGatherOffsets(gsampler2DRect, vec2, ivec2[4]);
            gvec4 textureGatherOffsets(gsampler2DRect, vec2, ivec2[4], int);
            vec4 textureGatherOffsets(sampler2DShadow, vec2, float, ivec2[4]);
            vec4 textureGatherOffsets(sampler2DArrayShadow, vec3, float, ivec2[4]);
            vec4 textureGatherOffsets(sampler2DRectShadow, vec2, float, ivec2[4]);
        GROUP END Offset
    GROUP END TextureGather
    
    GROUP BEGIN DerivativesFS {"shader_type": "FRAGMENT"}
      DEFAULT METADATA {"essl_level": "ESSL3_BUILTINS", "glsl_level": "COMMON_BUILTINS", "op": "auto", "hasSideEffects": "true"}
        genType dFdx(genType);
        genType dFdy(genType);
        genType fwidth(genType);
      DEFAULT METADATA {"glsl_level": "GLSL4_5_BUILTINS", "op": "CallBuiltInFunction", "hasSideEffects": "true"}
        genType dFdxFine(genType);
        genType dFdyFine(genType);
        genType dFdxCoarse(genType);
        genType dFdyCoarse(genType);
        genType fwidthFine(genType);
        genType fwidthCoarse(genType);
    GROUP END DerivativesFS
    
    GROUP BEGIN InterpolationFS {"shader_type": "FRAGMENT"}
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction"}
        float interpolateAtCentroid(float);
        vec2 interpolateAtCentroid(vec2);
        vec3 interpolateAtCentroid(vec3);
        vec4 interpolateAtCentroid(vec4);
        float interpolateAtSample(float, int);
        vec2 interpolateAtSample(vec2, int);
        vec3 interpolateAtSample(vec3, int);
        vec4 interpolateAtSample(vec4, int);
        float interpolateAtOffset(float, vec2);
        vec2 interpolateAtOffset(vec2, vec2);
        vec3 interpolateAtOffset(vec3, vec2);
        vec4 interpolateAtOffset(vec4, vec2);
    GROUP END InterpolationFS
    
    GROUP BEGIN AtomicCounter
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_2_BUILTINS", "op": "CallBuiltInFunction"}
        uint atomicCounter(atomic_uint);
        uint atomicCounterIncrement(atomic_uint);
        uint atomicCounterDecrement(atomic_uint);
      DEFAULT METADATA {"glsl_level": "GLSL4_6_BUILTINS", "op": "CallBuiltInFunction"}
        uint atomicCounterAdd(atomic_uint, uint);
        uint atomicCounterSubtract(atomic_uint, uint);
        uint atomicCounterMin(atomic_uint, uint);
        uint atomicCounterMax(atomic_uint, uint);
        uint atomicCounterAnd(atomic_uint, uint);
        uint atomicCounterOr(atomic_uint, uint);
        uint atomicCounterXor(atomic_uint, uint);
        uint atomicCounterExchange(atomic_uint, uint);
        uint atomicCounterCompSwap(atomic_uint, uint, uint);
    GROUP END AtomicCounter
    
    GROUP BEGIN AtomicMemory {"queryFunction": true}
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_3_BUILTINS", "op": "auto"}
        uint atomicAdd(inout uint, uint);
        int atomicAdd(inout int, int);
        uint atomicMin(inout uint, uint);
        int atomicMin(inout int, int);
        uint atomicMax(inout uint, uint);
        int atomicMax(inout int, int);
        uint atomicAnd(inout uint, uint);
        int atomicAnd(inout int, int);
        uint atomicOr(inout uint, uint);
        int atomicOr(inout int, int);
        uint atomicXor(inout uint, uint);
        int atomicXor(inout int, int);
        uint atomicExchange(inout uint, uint);
        int atomicExchange(inout int, int);
        uint atomicCompSwap(inout uint, uint, uint);
        int atomicCompSwap(inout int, int, int);
    GROUP END AtomicMemory
    
    GROUP BEGIN Image {"queryFunction": true}
        GROUP BEGIN Store {"queryFunction": true}
          DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
            void imageStore(gimage2D, ivec2, gvec4);
            void imageStore(gimage3D, ivec3, gvec4);
            void imageStore(gimage2DArray, ivec3, gvec4);
            void imageStore(gimageCube, ivec3, gvec4);
          DEFAULT METADATA {"glsl_level": "GLSL4_2_BUILTINS", "op": "CallBuiltInFunction"}
            void imageStore(writeonly IMAGE_PARAMS, gvec4);
        GROUP END Store
        GROUP BEGIN Load {"queryFunction": true}
          DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
            gvec4 imageLoad(gimage2D, ivec2);
            gvec4 imageLoad(gimage3D, ivec3);
            gvec4 imageLoad(gimage2DArray, ivec3);
            gvec4 imageLoad(gimageCube, ivec3);
          DEFAULT METADATA {"glsl_level": "GLSL4_2_BUILTINS", "op": "CallBuiltInFunction"}
            gvec4 imageLoad(readonly IMAGE_PARAMS);
        GROUP END Load
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
        ivec2 imageSize(gimage2D);
        ivec3 imageSize(gimage3D);
        ivec3 imageSize(gimage2DArray);
        ivec2 imageSize(gimageCube);
      DEFAULT METADATA {"glsl_level": "GLSL4_3_BUILTINS", "op": "CallBuiltInFunction"}
        int imageSize(readonly writeonly gimage1D);
        ivec2 imageSize(readonly writeonly gimage2D);
        ivec3 imageSize(readonly writeonly gimage3D);
        ivec2 imageSize(readonly writeonly gimageCube);
        ivec3 imageSize(readonly writeonly gimageCubeArray);
        ivec2 imageSize(readonly writeonly gimageRect);
        ivec2 imageSize(readonly writeonly gimage1DArray);
        ivec3 imageSize(readonly writeonly gimage2DArray);
        int imageSize(readonly writeonly gimageBuffer);
        ivec2 imageSize(readonly writeonly gimage2DMS);
        ivec3 imageSize(readonly writeonly gimage2DMSArray);
      DEFAULT METADATA {"glsl_level": "GLSL4_5_BUILTINS", "op": "CallBuiltInFunction"}
        int imageSamples(readonly writeonly gimage2DMS);
        int imageSamples(readonly writeonly gimage2DMSArray);
      DEFAULT METADATA {"glsl_level": "GLSL4_2_BUILTINS", "op": "CallBuiltInFunction"}
        uint imageAtomicAdd(IMAGE_PARAMS, uint);
        int imageAtomicAdd(IMAGE_PARAMS, int);
        uint imageAtomicMin(IMAGE_PARAMS, uint);
        int imageAtomicMin(IMAGE_PARAMS, int);
        uint imageAtomicMax(IMAGE_PARAMS, uint);
        int imageAtomicMax(IMAGE_PARAMS, int);
        uint imageAtomicAnd(IMAGE_PARAMS, uint);
        int imageAtomicAnd(IMAGE_PARAMS, int);
        uint imageAtomicOr(IMAGE_PARAMS, uint);
        int imageAtomicOr(IMAGE_PARAMS, int);
        uint imageAtomicXor(IMAGE_PARAMS, uint);
        int imageAtomicXor(IMAGE_PARAMS, int);
        uint imageAtomicExchange(IMAGE_PARAMS, uint);
        int imageAtomicExchange(IMAGE_PARAMS, int);
      DEFAULT METADATA {"glsl_level": "GLSL4_5_BUILTINS", "op": "CallBuiltInFunction"}
        int imageAtomicExchange(IMAGE_PARAMS, float);
      DEFAULT METADATA {"glsl_level": "GLSL4_2_BUILTINS", "op": "CallBuiltInFunction"}
        uint imageAtomicCompSwap(IMAGE_PARAMS, uint, uint);
        int imageAtomicCompSwap(IMAGE_PARAMS, int, int);
    GROUP END Image
    
    GROUP BEGIN Noise
      DEFAULT METADATA {"glsl_level": "COMMON_BUILTINS", "op": "CallBuiltInFunction"}
        float noise1(genType);
        vec2 noise2(genType);
        vec3 noise3(genType);
        vec4 noise4(genType);
    GROUP END Noise
    
    GROUP BEGIN Barrier
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_2_BUILTINS", "op": "auto", "hasSideEffects": true}
        void memoryBarrier();
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_3_BUILTINS", "op": "auto", "hasSideEffects": true}
        void memoryBarrierAtomicCounter();
        void memoryBarrierBuffer();
        void memoryBarrierImage();
    GROUP END Barrier
    
    GROUP BEGIN ESSL310CS {"shader_type": "COMPUTE"}
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_BUILTINS", "op": "auto", "hasSideEffects": true}
        void barrier();
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "glsl_level": "GLSL4_3_BUILTINS", "op": "auto", "hasSideEffects": true}
        void memoryBarrierShared();
        void groupMemoryBarrier();
    GROUP END ESSL310CS
    
    GROUP BEGIN ESSL310GS {"shader_type": "GEOMETRY_EXT"}
      DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "auto", "essl_extension": "EXT_geometry_shader", "hasSideEffects": true}
        void EmitVertex();
        void EndPrimitive();
    GROUP END ESSL310GS
    
    GROUP BEGIN GLSLGS {"shader_type": "GEOMETRY"}
      DEFAULT METADATA {"glsl_level": "GLSL4_BUILTINS", "op": "CallBuiltInFunction", "hasSideEffects": "true"}
        void EmitStreamVertex(int);
        void EndStreamPrimitive(int);
      DEFAULT METADATA {"glsl_level": "GLSL1_5_BUILTINS", "op": "CallBuiltInFunction", "hasSideEffects": "true"}
        void EmitVertex();
        void EndPrimitive();
    GROUP END GLSLGS
    
    GROUP BEGIN SubpassInput
      DEFAULT METADATA {"glsl_level": "GLSL4_6_BUILTINS", "op": "CallBuiltInFunction", "hasSideEffects": true}
        gvec4 subpassLoad(gsubpassInput);
        gvec4 subpassLoad(gsubpassInputMS, int);
    GROUP END SubpassInput
    
    GROUP BEGIN ShaderInvocationGroup
      DEFAULT METADATA {"glsl_level": "GLSL4_6_BUILTINS", "op": "CallBuiltInFunction", "hasSideEffects": true}
        bool anyInvocation(bool);
        bool allInvocations(bool);
        bool allInvocationsEqual(bool);
    GROUP END ShaderInvocationGroup