// Copyright 2023 The Tint Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //////////////////////////////////////////////////////////////////////////////// // File generated by tools/src/cmd/gen // using the template: // src/tint/builtin/function.h.tmpl // // Do not modify this file directly //////////////////////////////////////////////////////////////////////////////// #ifndef SRC_TINT_BUILTIN_FUNCTION_H_ #define SRC_TINT_BUILTIN_FUNCTION_H_ #include #include "src/tint/utils/string_stream.h" // \cond DO_NOT_DOCUMENT namespace tint::builtin { /// Enumerator of all builtin functions enum class Function { kNone = -1, kAbs, kAcos, kAcosh, kAll, kAny, kArrayLength, kAsin, kAsinh, kAtan, kAtan2, kAtanh, kCeil, kClamp, kCos, kCosh, kCountLeadingZeros, kCountOneBits, kCountTrailingZeros, kCross, kDegrees, kDeterminant, kDistance, kDot, kDot4I8Packed, kDot4U8Packed, kDpdx, kDpdxCoarse, kDpdxFine, kDpdy, kDpdyCoarse, kDpdyFine, kExp, kExp2, kExtractBits, kFaceForward, kFirstLeadingBit, kFirstTrailingBit, kFloor, kFma, kFract, kFrexp, kFwidth, kFwidthCoarse, kFwidthFine, kInsertBits, kInverseSqrt, kLdexp, kLength, kLog, kLog2, kMax, kMin, kMix, kModf, kNormalize, kPack2X16Float, kPack2X16Snorm, kPack2X16Unorm, kPack4X8Snorm, kPack4X8Unorm, kPow, kQuantizeToF16, kRadians, kReflect, kRefract, kReverseBits, kRound, kSaturate, kSelect, kSign, kSin, kSinh, kSmoothstep, kSqrt, kStep, kStorageBarrier, kTan, kTanh, kTranspose, kTrunc, kUnpack2X16Float, kUnpack2X16Snorm, kUnpack2X16Unorm, kUnpack4X8Snorm, kUnpack4X8Unorm, kWorkgroupBarrier, kWorkgroupUniformLoad, kTextureDimensions, kTextureGather, kTextureGatherCompare, kTextureNumLayers, kTextureNumLevels, kTextureNumSamples, kTextureSample, kTextureSampleBias, kTextureSampleCompare, kTextureSampleCompareLevel, kTextureSampleGrad, kTextureSampleLevel, kTextureSampleBaseClampToEdge, kTextureStore, kTextureLoad, kAtomicLoad, kAtomicStore, kAtomicAdd, kAtomicSub, kAtomicMax, kAtomicMin, kAtomicAnd, kAtomicOr, kAtomicXor, kAtomicExchange, kAtomicCompareExchangeWeak, kTintMaterialize, }; /// Matches the Function by name /// @param name the builtin name to parse /// @returns the parsed Function, or Function::kNone if `name` did not /// match any builtin function. Function ParseFunction(const std::string& name); /// @returns the name of the builtin function type. The spelling, including /// case, matches the name in the WGSL spec. const char* str(Function i); /// Emits the name of the builtin function type. The spelling, including case, /// matches the name in the WGSL spec. utils::StringStream& operator<<(utils::StringStream& out, Function i); /// All builtin functions constexpr Function kFunctions[] = { Function::kAbs, Function::kAcos, Function::kAcosh, Function::kAll, Function::kAny, Function::kArrayLength, Function::kAsin, Function::kAsinh, Function::kAtan, Function::kAtan2, Function::kAtanh, Function::kCeil, Function::kClamp, Function::kCos, Function::kCosh, Function::kCountLeadingZeros, Function::kCountOneBits, Function::kCountTrailingZeros, Function::kCross, Function::kDegrees, Function::kDeterminant, Function::kDistance, Function::kDot, Function::kDot4I8Packed, Function::kDot4U8Packed, Function::kDpdx, Function::kDpdxCoarse, Function::kDpdxFine, Function::kDpdy, Function::kDpdyCoarse, Function::kDpdyFine, Function::kExp, Function::kExp2, Function::kExtractBits, Function::kFaceForward, Function::kFirstLeadingBit, Function::kFirstTrailingBit, Function::kFloor, Function::kFma, Function::kFract, Function::kFrexp, Function::kFwidth, Function::kFwidthCoarse, Function::kFwidthFine, Function::kInsertBits, Function::kInverseSqrt, Function::kLdexp, Function::kLength, Function::kLog, Function::kLog2, Function::kMax, Function::kMin, Function::kMix, Function::kModf, Function::kNormalize, Function::kPack2X16Float, Function::kPack2X16Snorm, Function::kPack2X16Unorm, Function::kPack4X8Snorm, Function::kPack4X8Unorm, Function::kPow, Function::kQuantizeToF16, Function::kRadians, Function::kReflect, Function::kRefract, Function::kReverseBits, Function::kRound, Function::kSaturate, Function::kSelect, Function::kSign, Function::kSin, Function::kSinh, Function::kSmoothstep, Function::kSqrt, Function::kStep, Function::kStorageBarrier, Function::kTan, Function::kTanh, Function::kTranspose, Function::kTrunc, Function::kUnpack2X16Float, Function::kUnpack2X16Snorm, Function::kUnpack2X16Unorm, Function::kUnpack4X8Snorm, Function::kUnpack4X8Unorm, Function::kWorkgroupBarrier, Function::kWorkgroupUniformLoad, Function::kTextureDimensions, Function::kTextureGather, Function::kTextureGatherCompare, Function::kTextureNumLayers, Function::kTextureNumLevels, Function::kTextureNumSamples, Function::kTextureSample, Function::kTextureSampleBias, Function::kTextureSampleCompare, Function::kTextureSampleCompareLevel, Function::kTextureSampleGrad, Function::kTextureSampleLevel, Function::kTextureSampleBaseClampToEdge, Function::kTextureStore, Function::kTextureLoad, Function::kAtomicLoad, Function::kAtomicStore, Function::kAtomicAdd, Function::kAtomicSub, Function::kAtomicMax, Function::kAtomicMin, Function::kAtomicAnd, Function::kAtomicOr, Function::kAtomicXor, Function::kAtomicExchange, Function::kAtomicCompareExchangeWeak, Function::kTintMaterialize, }; /// All builtin function names constexpr const char* kFunctionStrings[] = { "abs", "acos", "acosh", "all", "any", "arrayLength", "asin", "asinh", "atan", "atan2", "atanh", "ceil", "clamp", "cos", "cosh", "countLeadingZeros", "countOneBits", "countTrailingZeros", "cross", "degrees", "determinant", "distance", "dot", "dot4I8Packed", "dot4U8Packed", "dpdx", "dpdxCoarse", "dpdxFine", "dpdy", "dpdyCoarse", "dpdyFine", "exp", "exp2", "extractBits", "faceForward", "firstLeadingBit", "firstTrailingBit", "floor", "fma", "fract", "frexp", "fwidth", "fwidthCoarse", "fwidthFine", "insertBits", "inverseSqrt", "ldexp", "length", "log", "log2", "max", "min", "mix", "modf", "normalize", "pack2x16float", "pack2x16snorm", "pack2x16unorm", "pack4x8snorm", "pack4x8unorm", "pow", "quantizeToF16", "radians", "reflect", "refract", "reverseBits", "round", "saturate", "select", "sign", "sin", "sinh", "smoothstep", "sqrt", "step", "storageBarrier", "tan", "tanh", "transpose", "trunc", "unpack2x16float", "unpack2x16snorm", "unpack2x16unorm", "unpack4x8snorm", "unpack4x8unorm", "workgroupBarrier", "workgroupUniformLoad", "textureDimensions", "textureGather", "textureGatherCompare", "textureNumLayers", "textureNumLevels", "textureNumSamples", "textureSample", "textureSampleBias", "textureSampleCompare", "textureSampleCompareLevel", "textureSampleGrad", "textureSampleLevel", "textureSampleBaseClampToEdge", "textureStore", "textureLoad", "atomicLoad", "atomicStore", "atomicAdd", "atomicSub", "atomicMax", "atomicMin", "atomicAnd", "atomicOr", "atomicXor", "atomicExchange", "atomicCompareExchangeWeak", "_tint_materialize", }; } // namespace tint::builtin // \endcond #endif // SRC_TINT_BUILTIN_FUNCTION_H_