| /* |
| * 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 "src/core/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(atomicAdd) \ |
| SKSL_INTRINSIC(atomicLoad) \ |
| SKSL_INTRINSIC(atomicStore) \ |
| 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(sampleGrad) \ |
| SKSL_INTRINSIC(sampleLod) \ |
| SKSL_INTRINSIC(saturate) \ |
| SKSL_INTRINSIC(sign) \ |
| SKSL_INTRINSIC(sinh) \ |
| SKSL_INTRINSIC(sin) \ |
| SKSL_INTRINSIC(smoothstep) \ |
| SKSL_INTRINSIC(sqrt) \ |
| SKSL_INTRINSIC(step) \ |
| SKSL_INTRINSIC(storageBarrier) \ |
| SKSL_INTRINSIC(subpassLoad) \ |
| SKSL_INTRINSIC(tanh) \ |
| SKSL_INTRINSIC(tan) \ |
| 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(workgroupBarrier) \ |
| 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 |