/*
 * Copyright 2021 Google LLC
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SKSL_INTRINSIC_LIST_DEFINED
#define SKSL_INTRINSIC_LIST_DEFINED

#include "include/private/SkTHash.h"

#include <cstdint>
#include <initializer_list>
#include <string_view>

// A list of every intrinsic supported by SkSL.
// Using an X-Macro (https://en.wikipedia.org/wiki/X_Macro) to manage the list.
#define SKSL_INTRINSIC_LIST            \
    SKSL_INTRINSIC(abs)                \
    SKSL_INTRINSIC(acosh)              \
    SKSL_INTRINSIC(acos)               \
    SKSL_INTRINSIC(all)                \
    SKSL_INTRINSIC(any)                \
    SKSL_INTRINSIC(asinh)              \
    SKSL_INTRINSIC(asin)               \
    SKSL_INTRINSIC(atanh)              \
    SKSL_INTRINSIC(atan)               \
    SKSL_INTRINSIC(bitCount)           \
    SKSL_INTRINSIC(ceil)               \
    SKSL_INTRINSIC(clamp)              \
    SKSL_INTRINSIC(cosh)               \
    SKSL_INTRINSIC(cos)                \
    SKSL_INTRINSIC(cross)              \
    SKSL_INTRINSIC(degrees)            \
    SKSL_INTRINSIC(determinant)        \
    SKSL_INTRINSIC(dFdx)               \
    SKSL_INTRINSIC(dFdy)               \
    SKSL_INTRINSIC(distance)           \
    SKSL_INTRINSIC(dot)                \
    SKSL_INTRINSIC(equal)              \
    SKSL_INTRINSIC(eval)               \
    SKSL_INTRINSIC(exp2)               \
    SKSL_INTRINSIC(exp)                \
    SKSL_INTRINSIC(faceforward)        \
    SKSL_INTRINSIC(findLSB)            \
    SKSL_INTRINSIC(findMSB)            \
    SKSL_INTRINSIC(floatBitsToInt)     \
    SKSL_INTRINSIC(floatBitsToUint)    \
    SKSL_INTRINSIC(floor)              \
    SKSL_INTRINSIC(fma)                \
    SKSL_INTRINSIC(fract)              \
    SKSL_INTRINSIC(frexp)              \
    SKSL_INTRINSIC(fromLinearSrgb)     \
    SKSL_INTRINSIC(fwidth)             \
    SKSL_INTRINSIC(greaterThanEqual)   \
    SKSL_INTRINSIC(greaterThan)        \
    SKSL_INTRINSIC(height)             \
    SKSL_INTRINSIC(intBitsToFloat)     \
    SKSL_INTRINSIC(inversesqrt)        \
    SKSL_INTRINSIC(inverse)            \
    SKSL_INTRINSIC(isinf)              \
    SKSL_INTRINSIC(isnan)              \
    SKSL_INTRINSIC(ldexp)              \
    SKSL_INTRINSIC(length)             \
    SKSL_INTRINSIC(lessThanEqual)      \
    SKSL_INTRINSIC(lessThan)           \
    SKSL_INTRINSIC(log2)               \
    SKSL_INTRINSIC(log)                \
    SKSL_INTRINSIC(makeSampler2D)      \
    SKSL_INTRINSIC(matrixCompMult)     \
    SKSL_INTRINSIC(matrixInverse)      \
    SKSL_INTRINSIC(max)                \
    SKSL_INTRINSIC(min)                \
    SKSL_INTRINSIC(mix)                \
    SKSL_INTRINSIC(modf)               \
    SKSL_INTRINSIC(mod)                \
    SKSL_INTRINSIC(normalize)          \
    SKSL_INTRINSIC(notEqual)           \
    SKSL_INTRINSIC(not)                \
    SKSL_INTRINSIC(outerProduct)       \
    SKSL_INTRINSIC(packDouble2x32)     \
    SKSL_INTRINSIC(packHalf2x16)       \
    SKSL_INTRINSIC(packSnorm2x16)      \
    SKSL_INTRINSIC(packSnorm4x8)       \
    SKSL_INTRINSIC(packUnorm2x16)      \
    SKSL_INTRINSIC(packUnorm4x8)       \
    SKSL_INTRINSIC(pow)                \
    SKSL_INTRINSIC(radians)            \
    SKSL_INTRINSIC(read)               \
    SKSL_INTRINSIC(reflect)            \
    SKSL_INTRINSIC(refract)            \
    SKSL_INTRINSIC(roundEven)          \
    SKSL_INTRINSIC(round)              \
    SKSL_INTRINSIC(sample)             \
    SKSL_INTRINSIC(saturate)           \
    SKSL_INTRINSIC(sign)               \
    SKSL_INTRINSIC(sinh)               \
    SKSL_INTRINSIC(sin)                \
    SKSL_INTRINSIC(smoothstep)         \
    SKSL_INTRINSIC(sqrt)               \
    SKSL_INTRINSIC(step)               \
    SKSL_INTRINSIC(subpassLoad)        \
    SKSL_INTRINSIC(tanh)               \
    SKSL_INTRINSIC(tan)                \
    SKSL_INTRINSIC(threadgroupBarrier) \
    SKSL_INTRINSIC(toLinearSrgb)       \
    SKSL_INTRINSIC(transpose)          \
    SKSL_INTRINSIC(trunc)              \
    SKSL_INTRINSIC(uintBitsToFloat)    \
    SKSL_INTRINSIC(unpackDouble2x32)   \
    SKSL_INTRINSIC(unpackHalf2x16)     \
    SKSL_INTRINSIC(unpackSnorm2x16)    \
    SKSL_INTRINSIC(unpackSnorm4x8)     \
    SKSL_INTRINSIC(unpackUnorm2x16)    \
    SKSL_INTRINSIC(unpackUnorm4x8)     \
    SKSL_INTRINSIC(width)              \
    SKSL_INTRINSIC(write)

namespace SkSL {

// The `IntrinsicKind` enum holds every intrinsic supported by SkSL.
#define SKSL_INTRINSIC(name) k_##name##_IntrinsicKind,
enum IntrinsicKind : int8_t {
    kNotIntrinsic = -1,
    SKSL_INTRINSIC_LIST
};
#undef SKSL_INTRINSIC

// Returns a map which allows IntrinsicKind values to be looked up by name.
using IntrinsicMap = SkTHashMap<std::string_view, IntrinsicKind>;
const IntrinsicMap& GetIntrinsicMap();

// Looks up intrinsic functions by name.
IntrinsicKind FindIntrinsicKind(std::string_view functionName);

}

#endif
