1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SKSL_INTRINSIC_LIST_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SKSL_INTRINSIC_LIST_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkTHash.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint> 14*c8dee2aaSAndroid Build Coastguard Worker #include <initializer_list> 15*c8dee2aaSAndroid Build Coastguard Worker #include <string_view> 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker // A list of every intrinsic supported by SkSL. 18*c8dee2aaSAndroid Build Coastguard Worker // Using an X-Macro (https://en.wikipedia.org/wiki/X_Macro) to manage the list. 19*c8dee2aaSAndroid Build Coastguard Worker #define SKSL_INTRINSIC_LIST \ 20*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(abs) \ 21*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(acosh) \ 22*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(acos) \ 23*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(all) \ 24*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(any) \ 25*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(asinh) \ 26*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(asin) \ 27*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(atanh) \ 28*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(atan) \ 29*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(atomicAdd) \ 30*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(atomicLoad) \ 31*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(atomicStore) \ 32*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(bitCount) \ 33*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(ceil) \ 34*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(clamp) \ 35*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(cosh) \ 36*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(cos) \ 37*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(cross) \ 38*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(degrees) \ 39*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(determinant) \ 40*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(dFdx) \ 41*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(dFdy) \ 42*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(distance) \ 43*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(dot) \ 44*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(equal) \ 45*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(eval) \ 46*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(exp2) \ 47*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(exp) \ 48*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(faceforward) \ 49*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(findLSB) \ 50*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(findMSB) \ 51*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(floatBitsToInt) \ 52*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(floatBitsToUint) \ 53*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(floor) \ 54*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(fma) \ 55*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(fract) \ 56*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(frexp) \ 57*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(fromLinearSrgb) \ 58*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(fwidth) \ 59*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(greaterThanEqual) \ 60*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(greaterThan) \ 61*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(intBitsToFloat) \ 62*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(inversesqrt) \ 63*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(inverse) \ 64*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(isinf) \ 65*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(isnan) \ 66*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(ldexp) \ 67*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(length) \ 68*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(lessThanEqual) \ 69*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(lessThan) \ 70*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(log2) \ 71*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(log) \ 72*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(matrixCompMult) \ 73*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(matrixInverse) \ 74*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(max) \ 75*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(min) \ 76*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(mix) \ 77*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(modf) \ 78*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(mod) \ 79*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(normalize) \ 80*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(notEqual) \ 81*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(not ) \ 82*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(outerProduct) \ 83*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(packHalf2x16) \ 84*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(packSnorm2x16) \ 85*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(packSnorm4x8) \ 86*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(packUnorm2x16) \ 87*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(packUnorm4x8) \ 88*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(pow) \ 89*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(radians) \ 90*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(reflect) \ 91*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(refract) \ 92*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(roundEven) \ 93*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(round) \ 94*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(sample) \ 95*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(sampleGrad) \ 96*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(sampleLod) \ 97*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(saturate) \ 98*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(sign) \ 99*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(sinh) \ 100*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(sin) \ 101*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(smoothstep) \ 102*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(sqrt) \ 103*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(step) \ 104*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(storageBarrier) \ 105*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(subpassLoad) \ 106*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(tanh) \ 107*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(tan) \ 108*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(textureHeight) \ 109*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(textureRead) \ 110*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(textureWidth) \ 111*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(textureWrite) \ 112*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(toLinearSrgb) \ 113*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(transpose) \ 114*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(trunc) \ 115*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(uintBitsToFloat) \ 116*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(unpackHalf2x16) \ 117*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(unpackSnorm2x16) \ 118*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(unpackSnorm4x8) \ 119*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(unpackUnorm2x16) \ 120*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(unpackUnorm4x8) \ 121*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC(workgroupBarrier) 122*c8dee2aaSAndroid Build Coastguard Worker 123*c8dee2aaSAndroid Build Coastguard Worker namespace SkSL { 124*c8dee2aaSAndroid Build Coastguard Worker 125*c8dee2aaSAndroid Build Coastguard Worker // The `IntrinsicKind` enum holds every intrinsic supported by SkSL. 126*c8dee2aaSAndroid Build Coastguard Worker #define SKSL_INTRINSIC(name) k_##name##_IntrinsicKind, 127*c8dee2aaSAndroid Build Coastguard Worker enum IntrinsicKind : int8_t { 128*c8dee2aaSAndroid Build Coastguard Worker kNotIntrinsic = -1, 129*c8dee2aaSAndroid Build Coastguard Worker SKSL_INTRINSIC_LIST 130*c8dee2aaSAndroid Build Coastguard Worker }; 131*c8dee2aaSAndroid Build Coastguard Worker #undef SKSL_INTRINSIC 132*c8dee2aaSAndroid Build Coastguard Worker 133*c8dee2aaSAndroid Build Coastguard Worker // Returns a map which allows IntrinsicKind values to be looked up by name. 134*c8dee2aaSAndroid Build Coastguard Worker using IntrinsicMap = skia_private::THashMap<std::string_view, IntrinsicKind>; 135*c8dee2aaSAndroid Build Coastguard Worker const IntrinsicMap& GetIntrinsicMap(); 136*c8dee2aaSAndroid Build Coastguard Worker 137*c8dee2aaSAndroid Build Coastguard Worker // Looks up intrinsic functions by name. 138*c8dee2aaSAndroid Build Coastguard Worker IntrinsicKind FindIntrinsicKind(std::string_view functionName); 139*c8dee2aaSAndroid Build Coastguard Worker 140*c8dee2aaSAndroid Build Coastguard Worker } 141*c8dee2aaSAndroid Build Coastguard Worker 142*c8dee2aaSAndroid Build Coastguard Worker #endif 143