xref: /third_party/skia/src/sksl/sksl_public.sksl (revision cb93a386)
1cb93a386Sopenharmony_ci// Reduced set of intrinsics that are available to public SkSL (RuntimeEffect and Interpreter)
2cb93a386Sopenharmony_ci
3cb93a386Sopenharmony_ci// See "The OpenGL ES Shading Language, Section 8"
4cb93a386Sopenharmony_ci
5cb93a386Sopenharmony_ci// 8.1 : Angle and Trigonometry Functions
6cb93a386Sopenharmony_ci$genType  radians($genType  degrees);
7cb93a386Sopenharmony_ci$genHType radians($genHType degrees);
8cb93a386Sopenharmony_ci$genType  degrees($genType  radians);
9cb93a386Sopenharmony_ci$genHType degrees($genHType radians);
10cb93a386Sopenharmony_ci
11cb93a386Sopenharmony_ci$genType  sin($genType  angle);
12cb93a386Sopenharmony_ci$genHType sin($genHType angle);
13cb93a386Sopenharmony_ci$genType  cos($genType  angle);
14cb93a386Sopenharmony_ci$genHType cos($genHType angle);
15cb93a386Sopenharmony_ci$genType  tan($genType  angle);
16cb93a386Sopenharmony_ci$genHType tan($genHType angle);
17cb93a386Sopenharmony_ci
18cb93a386Sopenharmony_ci$genType  asin($genType  x);
19cb93a386Sopenharmony_ci$genHType asin($genHType x);
20cb93a386Sopenharmony_ci$genType  acos($genType  x);
21cb93a386Sopenharmony_ci$genHType acos($genHType x);
22cb93a386Sopenharmony_ci$genType  atan($genType  y, $genType  x);
23cb93a386Sopenharmony_ci$genHType atan($genHType y, $genHType x);
24cb93a386Sopenharmony_ci$genType  atan($genType  y_over_x);
25cb93a386Sopenharmony_ci$genHType atan($genHType y_over_x);
26cb93a386Sopenharmony_ci
27cb93a386Sopenharmony_ci// 8.1 : Angle and Trigonometry Functions (GLSL ES 3.0)
28cb93a386Sopenharmony_ci$es3 $genType  sinh($genType x);
29cb93a386Sopenharmony_ci$es3 $genHType sinh($genHType x);
30cb93a386Sopenharmony_ci$es3 $genType  cosh($genType x);
31cb93a386Sopenharmony_ci$es3 $genHType cosh($genHType x);
32cb93a386Sopenharmony_ci$es3 $genType  tanh($genType x);
33cb93a386Sopenharmony_ci$es3 $genHType tanh($genHType x);
34cb93a386Sopenharmony_ci$es3 $genType  asinh($genType x);
35cb93a386Sopenharmony_ci$es3 $genHType asinh($genHType x);
36cb93a386Sopenharmony_ci$es3 $genType  acosh($genType x);
37cb93a386Sopenharmony_ci$es3 $genHType acosh($genHType x);
38cb93a386Sopenharmony_ci$es3 $genType  atanh($genType x);
39cb93a386Sopenharmony_ci$es3 $genHType atanh($genHType x);
40cb93a386Sopenharmony_ci
41cb93a386Sopenharmony_ci// 8.2 : Exponential Functions
42cb93a386Sopenharmony_ci$genType  pow($genType  x, $genType  y);
43cb93a386Sopenharmony_ci$genHType pow($genHType x, $genHType y);
44cb93a386Sopenharmony_ci$genType  exp($genType  x);
45cb93a386Sopenharmony_ci$genHType exp($genHType x);
46cb93a386Sopenharmony_ci$genType  log($genType  x);
47cb93a386Sopenharmony_ci$genHType log($genHType x);
48cb93a386Sopenharmony_ci$genType  exp2($genType  x);
49cb93a386Sopenharmony_ci$genHType exp2($genHType x);
50cb93a386Sopenharmony_ci$genType  log2($genType  x);
51cb93a386Sopenharmony_ci$genHType log2($genHType x);
52cb93a386Sopenharmony_ci
53cb93a386Sopenharmony_ci$genType  sqrt($genType  x);
54cb93a386Sopenharmony_ci$genHType sqrt($genHType x);
55cb93a386Sopenharmony_ci$genType  inversesqrt($genType  x);
56cb93a386Sopenharmony_ci$genHType inversesqrt($genHType x);
57cb93a386Sopenharmony_ci
58cb93a386Sopenharmony_ci// 8.3 : Common Functions
59cb93a386Sopenharmony_ci$genType  abs($genType  x);
60cb93a386Sopenharmony_ci$genHType abs($genHType x);
61cb93a386Sopenharmony_ci$genType  sign($genType  x);
62cb93a386Sopenharmony_ci$genHType sign($genHType x);
63cb93a386Sopenharmony_ci$genType  floor($genType  x);
64cb93a386Sopenharmony_ci$genHType floor($genHType x);
65cb93a386Sopenharmony_ci$genType  ceil($genType  x);
66cb93a386Sopenharmony_ci$genHType ceil($genHType x);
67cb93a386Sopenharmony_ci$genType  fract($genType  x);
68cb93a386Sopenharmony_ci$genHType fract($genHType x);
69cb93a386Sopenharmony_ci$genType  mod($genType  x, float     y);
70cb93a386Sopenharmony_ci$genType  mod($genType  x, $genType  y);
71cb93a386Sopenharmony_ci$genHType mod($genHType x, half      y);
72cb93a386Sopenharmony_ci$genHType mod($genHType x, $genHType y);
73cb93a386Sopenharmony_ci
74cb93a386Sopenharmony_ci$genType  min($genType  x, $genType  y);
75cb93a386Sopenharmony_ci$genType  min($genType  x, float     y);
76cb93a386Sopenharmony_ci$genHType min($genHType x, $genHType y);
77cb93a386Sopenharmony_ci$genHType min($genHType x, half      y);
78cb93a386Sopenharmony_ci$genType  max($genType  x, $genType  y);
79cb93a386Sopenharmony_ci$genType  max($genType  x, float     y);
80cb93a386Sopenharmony_ci$genHType max($genHType x, $genHType y);
81cb93a386Sopenharmony_ci$genHType max($genHType x, half      y);
82cb93a386Sopenharmony_ci$genType  clamp($genType  x, $genType  minVal, $genType  maxVal);
83cb93a386Sopenharmony_ci$genType  clamp($genType  x, float     minVal, float     maxVal);
84cb93a386Sopenharmony_ci$genHType clamp($genHType x, $genHType minVal, $genHType maxVal);
85cb93a386Sopenharmony_ci$genHType clamp($genHType x, half      minVal, half      maxVal);
86cb93a386Sopenharmony_ci$genType  saturate($genType  x);  // SkSL extension
87cb93a386Sopenharmony_ci$genHType saturate($genHType x);  // SkSL extension
88cb93a386Sopenharmony_ci$genType  mix($genType  x, $genType  y, $genType a);
89cb93a386Sopenharmony_ci$genType  mix($genType  x, $genType  y, float a);
90cb93a386Sopenharmony_ci$genHType mix($genHType x, $genHType y, $genHType a);
91cb93a386Sopenharmony_ci$genHType mix($genHType x, $genHType y, half a);
92cb93a386Sopenharmony_ci$genType  step($genType  edge, $genType x);
93cb93a386Sopenharmony_ci$genType  step(float     edge, $genType x);
94cb93a386Sopenharmony_ci$genHType step($genHType edge, $genHType x);
95cb93a386Sopenharmony_ci$genHType step(half      edge, $genHType x);
96cb93a386Sopenharmony_ci$genType  smoothstep($genType  edge0, $genType  edge1, $genType  x);
97cb93a386Sopenharmony_ci$genType  smoothstep(float     edge0, float     edge1, $genType  x);
98cb93a386Sopenharmony_ci$genHType smoothstep($genHType edge0, $genHType edge1, $genHType x);
99cb93a386Sopenharmony_ci$genHType smoothstep(half      edge0, half      edge1, $genHType x);
100cb93a386Sopenharmony_ci
101cb93a386Sopenharmony_ci// 8.3 : Common Functions (GLSL ES 3.0)
102cb93a386Sopenharmony_ci$es3 $genIType floatBitsToInt ($genType  value);
103cb93a386Sopenharmony_ci$es3 $genUType floatBitsToUint($genType  value);
104cb93a386Sopenharmony_ci$es3 $genType  intBitsToFloat ($genIType value);
105cb93a386Sopenharmony_ci$es3 $genType  uintBitsToFloat($genUType value);
106cb93a386Sopenharmony_ci$es3 $genType  trunc($genType  x);
107cb93a386Sopenharmony_ci$es3 $genHType trunc($genHType x);
108cb93a386Sopenharmony_ci$es3 $genType  round($genType  x);
109cb93a386Sopenharmony_ci$es3 $genHType round($genHType x);
110cb93a386Sopenharmony_ci$es3 $genType  roundEven($genType  x);
111cb93a386Sopenharmony_ci$es3 $genHType roundEven($genHType x);
112cb93a386Sopenharmony_ci$es3 $genIType min($genIType x, $genIType y);
113cb93a386Sopenharmony_ci$es3 $genIType min($genIType x, int y);
114cb93a386Sopenharmony_ci$es3 $genIType max($genIType x, $genIType y);
115cb93a386Sopenharmony_ci$es3 $genIType max($genIType x, int y);
116cb93a386Sopenharmony_ci$es3 $genIType clamp($genIType x, $genIType minVal, $genIType maxVal);
117cb93a386Sopenharmony_ci$es3 $genIType clamp($genIType x, int minVal, int maxVal);
118cb93a386Sopenharmony_ci$es3 $genUType clamp($genUType x, $genUType minVal, $genUType maxVal);
119cb93a386Sopenharmony_ci$es3 $genUType clamp($genUType x, uint minVal, uint maxVal);
120cb93a386Sopenharmony_ci$es3 $genType  mix($genType  x, $genType  y, $genBType a);
121cb93a386Sopenharmony_ci$es3 $genHType mix($genHType x, $genHType y, $genBType a);
122cb93a386Sopenharmony_ci
123cb93a386Sopenharmony_ci// 8.3 : Common Functions (GLSL ES 3.0) -- cannot be used in constant-expressions
124cb93a386Sopenharmony_ci$es3 $genBType isnan($genType  x);
125cb93a386Sopenharmony_ci$es3 $genBType isnan($genHType x);
126cb93a386Sopenharmony_ci$es3 $genBType isinf($genType  x);
127cb93a386Sopenharmony_ci$es3 $genBType isinf($genHType x);
128cb93a386Sopenharmony_ci$es3 $genType  modf($genType  x, out $genType  i);
129cb93a386Sopenharmony_ci$es3 $genHType modf($genHType x, out $genHType i);
130cb93a386Sopenharmony_ci
131cb93a386Sopenharmony_ci// 8.4 : Floating-Point Pack and Unpack Functions (GLSL ES 3.0)
132cb93a386Sopenharmony_ci$es3 uint packUnorm2x16(float2 v);
133cb93a386Sopenharmony_ci$es3 float2 unpackUnorm2x16(uint p);
134cb93a386Sopenharmony_ci
135cb93a386Sopenharmony_ci// 8.5 : Geometric Functions
136cb93a386Sopenharmony_cifloat length($genType  x);
137cb93a386Sopenharmony_cihalf  length($genHType x);
138cb93a386Sopenharmony_cifloat distance($genType  p0, $genType  p1);
139cb93a386Sopenharmony_cihalf  distance($genHType p0, $genHType p1);
140cb93a386Sopenharmony_cifloat dot($genType  x, $genType  y);
141cb93a386Sopenharmony_cihalf  dot($genHType x, $genHType y);
142cb93a386Sopenharmony_cifloat3 cross(float3 x, float3 y);
143cb93a386Sopenharmony_cihalf3  cross(half3  x, half3  y);
144cb93a386Sopenharmony_ci$genType  normalize($genType  x);
145cb93a386Sopenharmony_ci$genHType normalize($genHType x);
146cb93a386Sopenharmony_ci$genType  faceforward($genType  N, $genType  I, $genType  Nref);
147cb93a386Sopenharmony_ci$genHType faceforward($genHType N, $genHType I, $genHType Nref);
148cb93a386Sopenharmony_ci$genType  reflect($genType  I, $genType  N);
149cb93a386Sopenharmony_ci$genHType reflect($genHType I, $genHType N);
150cb93a386Sopenharmony_ci$genType  refract($genType  I, $genType  N, float eta);
151cb93a386Sopenharmony_ci$genHType refract($genHType I, $genHType N, half eta);
152cb93a386Sopenharmony_ci
153cb93a386Sopenharmony_ci// 8.6 : Matrix Functions
154cb93a386Sopenharmony_ci$squareMat  matrixCompMult($squareMat  x, $squareMat  y);
155cb93a386Sopenharmony_ci$squareHMat matrixCompMult($squareHMat x, $squareHMat y);
156cb93a386Sopenharmony_ci$es3 $mat   matrixCompMult($mat x, $mat y);
157cb93a386Sopenharmony_ci$es3 $hmat  matrixCompMult($hmat x, $hmat y);
158cb93a386Sopenharmony_ci
159cb93a386Sopenharmony_ci// 8.6 : Matrix Functions (GLSL 1.4, poly-filled by SkSL as needed)
160cb93a386Sopenharmony_ci$squareMat  inverse($squareMat  m);
161cb93a386Sopenharmony_ci$squareHMat inverse($squareHMat m);
162cb93a386Sopenharmony_ci
163cb93a386Sopenharmony_ci// 8.6 : Matrix Functions (GLSL ES 3.0)
164cb93a386Sopenharmony_ci$es3 float       determinant($squareMat m);
165cb93a386Sopenharmony_ci$es3 half        determinant($squareHMat m);
166cb93a386Sopenharmony_ci$es3 $squareMat  transpose($squareMat  m);
167cb93a386Sopenharmony_ci$es3 $squareHMat transpose($squareHMat m);
168cb93a386Sopenharmony_ci$es3 float2x3    transpose(float3x2 m);
169cb93a386Sopenharmony_ci$es3 half2x3     transpose(half3x2  m);
170cb93a386Sopenharmony_ci$es3 float2x4    transpose(float4x2 m);
171cb93a386Sopenharmony_ci$es3 half2x4     transpose(half4x2  m);
172cb93a386Sopenharmony_ci$es3 float3x2    transpose(float2x3 m);
173cb93a386Sopenharmony_ci$es3 half3x2     transpose(half2x3  m);
174cb93a386Sopenharmony_ci$es3 float3x4    transpose(float4x3 m);
175cb93a386Sopenharmony_ci$es3 half3x4     transpose(half4x3  m);
176cb93a386Sopenharmony_ci$es3 float4x2    transpose(float2x4 m);
177cb93a386Sopenharmony_ci$es3 half4x2     transpose(half2x4  m);
178cb93a386Sopenharmony_ci$es3 float4x3    transpose(float3x4 m);
179cb93a386Sopenharmony_ci$es3 half4x3     transpose(half3x4  m);
180cb93a386Sopenharmony_ci$es3 $squareMat  outerProduct($vec   c, $vec   r);
181cb93a386Sopenharmony_ci$es3 $squareHMat outerProduct($hvec  c, $hvec  r);
182cb93a386Sopenharmony_ci$es3 float2x3    outerProduct(float3 c, float2 r);
183cb93a386Sopenharmony_ci$es3 half2x3     outerProduct(half3  c, half2  r);
184cb93a386Sopenharmony_ci$es3 float3x2    outerProduct(float2 c, float3 r);
185cb93a386Sopenharmony_ci$es3 half3x2     outerProduct(half2  c, half3  r);
186cb93a386Sopenharmony_ci$es3 float2x4    outerProduct(float4 c, float2 r);
187cb93a386Sopenharmony_ci$es3 half2x4     outerProduct(half4  c, half2  r);
188cb93a386Sopenharmony_ci$es3 float4x2    outerProduct(float2 c, float4 r);
189cb93a386Sopenharmony_ci$es3 half4x2     outerProduct(half2  c, half4  r);
190cb93a386Sopenharmony_ci$es3 float3x4    outerProduct(float4 c, float3 r);
191cb93a386Sopenharmony_ci$es3 half3x4     outerProduct(half4  c, half3  r);
192cb93a386Sopenharmony_ci$es3 float4x3    outerProduct(float3 c, float4 r);
193cb93a386Sopenharmony_ci$es3 half4x3     outerProduct(half3  c, half4  r);
194cb93a386Sopenharmony_ci
195cb93a386Sopenharmony_ci// 8.7 : Vector Relational Functions
196cb93a386Sopenharmony_ci$bvec lessThan($vec  x, $vec  y);
197cb93a386Sopenharmony_ci$bvec lessThan($hvec x, $hvec y);
198cb93a386Sopenharmony_ci$bvec lessThan($ivec x, $ivec y);
199cb93a386Sopenharmony_ci$bvec lessThanEqual($vec  x, $vec  y);
200cb93a386Sopenharmony_ci$bvec lessThanEqual($hvec x, $hvec y);
201cb93a386Sopenharmony_ci$bvec lessThanEqual($ivec x, $ivec y);
202cb93a386Sopenharmony_ci$bvec greaterThan($vec  x, $vec  y);
203cb93a386Sopenharmony_ci$bvec greaterThan($hvec x, $hvec y);
204cb93a386Sopenharmony_ci$bvec greaterThan($ivec x, $ivec y);
205cb93a386Sopenharmony_ci$bvec greaterThanEqual($vec  x, $vec  y);
206cb93a386Sopenharmony_ci$bvec greaterThanEqual($hvec x, $hvec y);
207cb93a386Sopenharmony_ci$bvec greaterThanEqual($ivec x, $ivec y);
208cb93a386Sopenharmony_ci$bvec equal($vec  x, $vec  y);
209cb93a386Sopenharmony_ci$bvec equal($hvec x, $hvec y);
210cb93a386Sopenharmony_ci$bvec equal($ivec x, $ivec y);
211cb93a386Sopenharmony_ci$bvec equal($bvec x, $bvec y);
212cb93a386Sopenharmony_ci$bvec notEqual($vec  x, $vec  y);
213cb93a386Sopenharmony_ci$bvec notEqual($hvec x, $hvec y);
214cb93a386Sopenharmony_ci$bvec notEqual($ivec x, $ivec y);
215cb93a386Sopenharmony_ci$bvec notEqual($bvec x, $bvec y);
216cb93a386Sopenharmony_ci
217cb93a386Sopenharmony_cibool  any($bvec x);
218cb93a386Sopenharmony_cibool  all($bvec x);
219cb93a386Sopenharmony_ci$bvec not($bvec x);
220cb93a386Sopenharmony_ci
221cb93a386Sopenharmony_ci// 8.9 : Fragment Processing Functions (GLSL ES 3.0)
222cb93a386Sopenharmony_ci$es3 $genType  dFdx($genType p);
223cb93a386Sopenharmony_ci$es3 $genType  dFdy($genType p);
224cb93a386Sopenharmony_ci$es3 $genHType dFdx($genHType p);
225cb93a386Sopenharmony_ci$es3 $genHType dFdy($genHType p);
226cb93a386Sopenharmony_ci$es3 $genType  fwidth($genType p);
227cb93a386Sopenharmony_ci$es3 $genHType fwidth($genHType p);
228cb93a386Sopenharmony_ci
229cb93a386Sopenharmony_ci
230cb93a386Sopenharmony_ci// SkSL intrinsics that are not part of GLSL:
231cb93a386Sopenharmony_ci// The max() guards against division by zero when the incoming color is transparent black
232cb93a386Sopenharmony_cihalf4  unpremul(half4  color) { return half4 (color.rgb / max(color.a, 0.0001), color.a); }
233cb93a386Sopenharmony_cifloat4 unpremul(float4 color) { return float4(color.rgb / max(color.a, 0.0001), color.a); }
234cb93a386Sopenharmony_ci
235cb93a386Sopenharmony_ci// SkSL intrinsics that reflect Skia's C++ object model:
236cb93a386Sopenharmony_cihalf4 $eval(float2 coords, shader s);
237cb93a386Sopenharmony_cihalf4 $eval(half4 color, colorFilter f);
238cb93a386Sopenharmony_cihalf4 $eval(half4 src, half4 dst, blender b);
239