/*
** Copyright (c) 2014-2016 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.
**
** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
**
** 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.
*/

#ifndef GLSLstd450_HPP
#define GLSLstd450_HPP

namespace spv {

constexpr int GLSLstd450Version = 100;
constexpr int GLSLstd450Revision = 1;

enum class GLSLstd450 {
  kBad = 0,  // Don't use

  kRound = 1,
  kRoundEven = 2,
  kTrunc = 3,
  kFAbs = 4,
  kSAbs = 5,
  kFSign = 6,
  kSSign = 7,
  kFloor = 8,
  kCeil = 9,
  kFract = 10,

  kRadians = 11,
  kDegrees = 12,
  kSin = 13,
  kCos = 14,
  kTan = 15,
  kAsin = 16,
  kAcos = 17,
  kAtan = 18,
  kSinh = 19,
  kCosh = 20,
  kTanh = 21,
  kAsinh = 22,
  kAcosh = 23,
  kAtanh = 24,
  kAtan2 = 25,

  kPow = 26,
  kExp = 27,
  kLog = 28,
  kExp2 = 29,
  kLog2 = 30,
  kSqrt = 31,
  kInverseSqrt = 32,

  kDeterminant = 33,
  kMatrixInverse = 34,

  kModf = 35,        // second operand needs an OpVariable to write to
  kModfStruct = 36,  // no OpVariable operand
  kFMin = 37,
  kUMin = 38,
  kSMin = 39,
  kFMax = 40,
  kUMax = 41,
  kSMax = 42,
  kFClamp = 43,
  kUClamp = 44,
  kSClamp = 45,
  kFMix = 46,
  kIMix = 47,  // Reserved
  kStep = 48,
  kSmoothStep = 49,

  kFma = 50,
  kFrexp = 51,        // second operand needs an OpVariable to write to
  kFrexpStruct = 52,  // no OpVariable operand
  kLdexp = 53,

  kPackSnorm4x8 = 54,
  kPackUnorm4x8 = 55,
  kPackSnorm2x16 = 56,
  kPackUnorm2x16 = 57,
  kPackHalf2x16 = 58,
  kPackDouble2x32 = 59,
  kUnpackSnorm2x16 = 60,
  kUnpackUnorm2x16 = 61,
  kUnpackHalf2x16 = 62,
  kUnpackSnorm4x8 = 63,
  kUnpackUnorm4x8 = 64,
  kUnpackDouble2x32 = 65,

  kLength = 66,
  kDistance = 67,
  kCross = 68,
  kNormalize = 69,
  kFaceForward = 70,
  kReflect = 71,
  kRefract = 72,

  kFindILsb = 73,
  kFindSMsb = 74,
  kFindUMsb = 75,

  kInterpolateAtCentroid = 76,
  kInterpolateAtSample = 77,
  kInterpolateAtOffset = 78,

  kNMin = 79,
  kNMax = 80,
  kNClamp = 81,

  kCount
};

}  // namespace spv

#endif  // #ifndef GLSLstd450_HPP
