/*
** Copyright (c) 2014-2015 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/

//
// Author: John Kessenich, LunarG
//

namespace GLSL_STD_450 {

enum Entrypoints {
    Round = 0,
    RoundEven = 1,
    Trunc = 2,
    Abs = 3,
    Sign = 4,
    Floor = 5,
    Ceil = 6,
    Fract = 7,

    Radians = 8,
    Degrees = 9,
    Sin = 10,
    Cos = 11,
    Tan = 12,
    Asin = 13,
    Acos = 14,
    Atan = 15,
    Sinh = 16,
    Cosh = 17,
    Tanh = 18,
    Asinh = 19,
    Acosh = 20,
    Atanh = 21,
    Atan2 = 22,

    Pow = 23,
    Exp = 24,
    Log = 25,
    Exp2 = 26,
    Log2 = 27,
    Sqrt = 28,
    InverseSqrt = 29,

    Determinant = 30,
    MatrixInverse = 31,

    Modf = 32,            // second argument needs the OpVariable = , not an OpLoad
    Min = 33,
    Max = 34,
    Clamp = 35,
    Mix = 36,
    Step = 37,
    SmoothStep = 38,

    FloatBitsToInt = 39,
    FloatBitsToUint = 40,
    IntBitsToFloat = 41,
    UintBitsToFloat = 42,

    Fma = 43,
    Frexp = 44,
    Ldexp = 45,

    PackSnorm4x8 = 46,
    PackUnorm4x8 = 47,
    PackSnorm2x16 = 48,
    PackUnorm2x16 = 49,
    PackHalf2x16 = 50,
    PackDouble2x32 = 51,
    UnpackSnorm2x16 = 52,
    UnpackUnorm2x16 = 53,
    UnpackHalf2x16 = 54,
    UnpackSnorm4x8 = 55,
    UnpackUnorm4x8 = 56,
    UnpackDouble2x32 = 57,

    Length = 58,
    Distance = 59,
    Cross = 60,
    Normalize = 61,
    Ftransform = 62,
    FaceForward = 63,
    Reflect = 64,
    Refract = 65,

    UaddCarry = 66,
    UsubBorrow = 67,
    UmulExtended = 68,
    ImulExtended = 69,
    BitfieldExtract = 70,
    BitfieldInsert = 71,
    BitfieldReverse = 72,
    BitCount = 73,
    FindLSB = 74,
    FindMSB = 75,

    InterpolateAtCentroid = 76,
    InterpolateAtSample = 77,
    InterpolateAtOffset = 78,

    Count
};

inline void GetDebugNames(const char** names)
{
    for (int i = 0; i < Count; ++i)
        names[i] = "Unknown";

    names[Round]                   = "round";
    names[RoundEven]               = "roundEven";
    names[Trunc]                   = "trunc";
    names[Abs]                     = "abs";
    names[Sign]                    = "sign";
    names[Floor]                   = "floor";
    names[Ceil]                    = "ceil";
    names[Fract]                   = "fract";
    names[Radians]                 = "radians";
    names[Degrees]                 = "degrees";
    names[Sin]                     = "sin";
    names[Cos]                     = "cos";
    names[Tan]                     = "tan";
    names[Asin]                    = "asin";
    names[Acos]                    = "acos";
    names[Atan]                    = "atan";
    names[Sinh]                    = "sinh";
    names[Cosh]                    = "cosh";
    names[Tanh]                    = "tanh";
    names[Asinh]                   = "asinh";
    names[Acosh]                   = "acosh";
    names[Atanh]                   = "atanh";
    names[Atan2]                   = "atan2";
    names[Pow]                     = "pow";
    names[Exp]                     = "exp";
    names[Log]                     = "log";
    names[Exp2]                    = "exp2";
    names[Log2]                    = "log2";
    names[Sqrt]                    = "sqrt";
    names[InverseSqrt]             = "inverseSqrt";
    names[Determinant]             = "determinant";
    names[MatrixInverse]           = "matrixInverse";
    names[Modf]                    = "modf";
    names[Min]                     = "min";
    names[Max]                     = "max";
    names[Clamp]                   = "clamp";
    names[Mix]                     = "mix";
    names[Step]                    = "step";
    names[SmoothStep]              = "smoothStep";
    names[FloatBitsToInt]          = "floatBitsToInt";
    names[FloatBitsToUint]         = "floatBitsToUint";
    names[IntBitsToFloat]          = "intBitsToFloat";
    names[UintBitsToFloat]         = "uintBitsToFloat";
    names[Fma]                     = "fma";
    names[Frexp]                   = "frexp";
    names[Ldexp]                   = "ldexp";
    names[PackSnorm4x8]            = "packSnorm4x8";
    names[PackUnorm4x8]            = "packUnorm4x8";
    names[PackSnorm2x16]           = "packSnorm2x16";
    names[PackUnorm2x16]           = "packUnorm2x16";
    names[PackHalf2x16]            = "packHalf2x16";
    names[PackDouble2x32]          = "packDouble2x32";
    names[UnpackSnorm2x16]         = "unpackSnorm2x16";
    names[UnpackUnorm2x16]         = "unpackUnorm2x16";
    names[UnpackHalf2x16]          = "unpackHalf2x16";
    names[UnpackSnorm4x8]          = "unpackSnorm4x8";
    names[UnpackUnorm4x8]          = "unpackUnorm4x8";
    names[UnpackDouble2x32]        = "unpackDouble2x32";
    names[Length]                  = "length";
    names[Distance]                = "distance";
    names[Cross]                   = "cross";
    names[Normalize]               = "normalize";
    names[Ftransform]              = "ftransform";
    names[FaceForward]             = "faceForward";
    names[Reflect]                 = "reflect";
    names[Refract]                 = "refract";
    names[UaddCarry]               = "uaddCarry";
    names[UsubBorrow]              = "usubBorrow";
    names[UmulExtended]            = "umulExtended";
    names[ImulExtended]            = "imulExtended";
    names[BitfieldExtract]         = "bitfieldExtract";
    names[BitfieldInsert]          = "bitfieldInsert";
    names[BitfieldReverse]         = "bitfieldReverse";
    names[BitCount]                = "bitCount";
    names[FindLSB]                 = "findLSB";
    names[FindMSB]                 = "findMSB";
    names[InterpolateAtCentroid]   = "interpolateAtCentroid";
    names[InterpolateAtSample]     = "interpolateAtSample";
    names[InterpolateAtOffset]     = "interpolateAtOffset";
}

}; // end namespace GLSL_STD_450
