xref: /aosp_15_r20/external/skia/src/sksl/SkSLIntrinsicList.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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