// Reduced set of intrinsics that are available to public SkSL (RuntimeEffect and Interpreter)

// See "The OpenGL ES Shading Language, Section 8"

// 8.1 : Angle and Trigonometry Functions
$genType  radians($genType  degrees);
$genHType radians($genHType degrees);
$genType  degrees($genType  radians);
$genHType degrees($genHType radians);

$genType  sin($genType  angle);
$genHType sin($genHType angle);
$genType  cos($genType  angle);
$genHType cos($genHType angle);
$genType  tan($genType  angle);
$genHType tan($genHType angle);

$genType  asin($genType  x);
$genHType asin($genHType x);
$genType  acos($genType  x);
$genHType acos($genHType x);
$genType  atan($genType  y, $genType  x);
$genHType atan($genHType y, $genHType x);
$genType  atan($genType  y_over_x);
$genHType atan($genHType y_over_x);

// 8.1 : Angle and Trigonometry Functions (GLSL ES 3.0)
$es3 $genType  sinh($genType x);
$es3 $genHType sinh($genHType x);
$es3 $genType  cosh($genType x);
$es3 $genHType cosh($genHType x);
$es3 $genType  tanh($genType x);
$es3 $genHType tanh($genHType x);
$es3 $genType  asinh($genType x);
$es3 $genHType asinh($genHType x);
$es3 $genType  acosh($genType x);
$es3 $genHType acosh($genHType x);
$es3 $genType  atanh($genType x);
$es3 $genHType atanh($genHType x);

// 8.2 : Exponential Functions
$genType  pow($genType  x, $genType  y);
$genHType pow($genHType x, $genHType y);
$genType  exp($genType  x);
$genHType exp($genHType x);
$genType  log($genType  x);
$genHType log($genHType x);
$genType  exp2($genType  x);
$genHType exp2($genHType x);
$genType  log2($genType  x);
$genHType log2($genHType x);

$genType  sqrt($genType  x);
$genHType sqrt($genHType x);
$genType  inversesqrt($genType  x);
$genHType inversesqrt($genHType x);

// 8.3 : Common Functions
$genType  abs($genType  x);
$genHType abs($genHType x);
$genType  sign($genType  x);
$genHType sign($genHType x);
$genType  floor($genType  x);
$genHType floor($genHType x);
$genType  ceil($genType  x);
$genHType ceil($genHType x);
$genType  fract($genType  x);
$genHType fract($genHType x);
$genType  mod($genType  x, float     y);
$genType  mod($genType  x, $genType  y);
$genHType mod($genHType x, half      y);
$genHType mod($genHType x, $genHType y);

$genType  min($genType  x, $genType  y);
$genType  min($genType  x, float     y);
$genHType min($genHType x, $genHType y);
$genHType min($genHType x, half      y);
$genType  max($genType  x, $genType  y);
$genType  max($genType  x, float     y);
$genHType max($genHType x, $genHType y);
$genHType max($genHType x, half      y);
$genType  clamp($genType  x, $genType  minVal, $genType  maxVal);
$genType  clamp($genType  x, float     minVal, float     maxVal);
$genHType clamp($genHType x, $genHType minVal, $genHType maxVal);
$genHType clamp($genHType x, half      minVal, half      maxVal);
$genType  saturate($genType  x);  // SkSL extension
$genHType saturate($genHType x);  // SkSL extension
$genType  mix($genType  x, $genType  y, $genType a);
$genType  mix($genType  x, $genType  y, float a);
$genHType mix($genHType x, $genHType y, $genHType a);
$genHType mix($genHType x, $genHType y, half a);
$genType  step($genType  edge, $genType x);
$genType  step(float     edge, $genType x);
$genHType step($genHType edge, $genHType x);
$genHType step(half      edge, $genHType x);
$genType  smoothstep($genType  edge0, $genType  edge1, $genType  x);
$genType  smoothstep(float     edge0, float     edge1, $genType  x);
$genHType smoothstep($genHType edge0, $genHType edge1, $genHType x);
$genHType smoothstep(half      edge0, half      edge1, $genHType x);

// 8.3 : Common Functions (GLSL ES 3.0)
$es3 $genIType floatBitsToInt ($genType  value);
$es3 $genUType floatBitsToUint($genType  value);
$es3 $genType  intBitsToFloat ($genIType value);
$es3 $genType  uintBitsToFloat($genUType value);
$es3 $genType  trunc($genType  x);
$es3 $genHType trunc($genHType x);
$es3 $genType  round($genType  x);
$es3 $genHType round($genHType x);
$es3 $genType  roundEven($genType  x);
$es3 $genHType roundEven($genHType x);
$es3 $genIType min($genIType x, $genIType y);
$es3 $genIType min($genIType x, int y);
$es3 $genIType max($genIType x, $genIType y);
$es3 $genIType max($genIType x, int y);
$es3 $genIType clamp($genIType x, $genIType minVal, $genIType maxVal);
$es3 $genIType clamp($genIType x, int minVal, int maxVal);
$es3 $genUType clamp($genUType x, $genUType minVal, $genUType maxVal);
$es3 $genUType clamp($genUType x, uint minVal, uint maxVal);
$es3 $genType  mix($genType  x, $genType  y, $genBType a);
$es3 $genHType mix($genHType x, $genHType y, $genBType a);

// 8.3 : Common Functions (GLSL ES 3.0) -- cannot be used in constant-expressions
$es3 $genBType isnan($genType  x);
$es3 $genBType isnan($genHType x);
$es3 $genBType isinf($genType  x);
$es3 $genBType isinf($genHType x);
$es3 $genType  modf($genType  x, out $genType  i);
$es3 $genHType modf($genHType x, out $genHType i);

// 8.4 : Floating-Point Pack and Unpack Functions (GLSL ES 3.0)
$es3 uint packUnorm2x16(float2 v);
$es3 float2 unpackUnorm2x16(uint p);

// 8.5 : Geometric Functions
float length($genType  x);
half  length($genHType x);
float distance($genType  p0, $genType  p1);
half  distance($genHType p0, $genHType p1);
float dot($genType  x, $genType  y);
half  dot($genHType x, $genHType y);
float3 cross(float3 x, float3 y);
half3  cross(half3  x, half3  y);
$genType  normalize($genType  x);
$genHType normalize($genHType x);
$genType  faceforward($genType  N, $genType  I, $genType  Nref);
$genHType faceforward($genHType N, $genHType I, $genHType Nref);
$genType  reflect($genType  I, $genType  N);
$genHType reflect($genHType I, $genHType N);
$genType  refract($genType  I, $genType  N, float eta);
$genHType refract($genHType I, $genHType N, half eta);

// 8.6 : Matrix Functions
$squareMat  matrixCompMult($squareMat  x, $squareMat  y);
$squareHMat matrixCompMult($squareHMat x, $squareHMat y);
$es3 $mat   matrixCompMult($mat x, $mat y);
$es3 $hmat  matrixCompMult($hmat x, $hmat y);

// 8.6 : Matrix Functions (GLSL 1.4, poly-filled by SkSL as needed)
$squareMat  inverse($squareMat  m);
$squareHMat inverse($squareHMat m);

// 8.6 : Matrix Functions (GLSL ES 3.0)
$es3 float       determinant($squareMat m);
$es3 half        determinant($squareHMat m);
$es3 $squareMat  transpose($squareMat  m);
$es3 $squareHMat transpose($squareHMat m);
$es3 float2x3    transpose(float3x2 m);
$es3 half2x3     transpose(half3x2  m);
$es3 float2x4    transpose(float4x2 m);
$es3 half2x4     transpose(half4x2  m);
$es3 float3x2    transpose(float2x3 m);
$es3 half3x2     transpose(half2x3  m);
$es3 float3x4    transpose(float4x3 m);
$es3 half3x4     transpose(half4x3  m);
$es3 float4x2    transpose(float2x4 m);
$es3 half4x2     transpose(half2x4  m);
$es3 float4x3    transpose(float3x4 m);
$es3 half4x3     transpose(half3x4  m);
$es3 $squareMat  outerProduct($vec   c, $vec   r);
$es3 $squareHMat outerProduct($hvec  c, $hvec  r);
$es3 float2x3    outerProduct(float3 c, float2 r);
$es3 half2x3     outerProduct(half3  c, half2  r);
$es3 float3x2    outerProduct(float2 c, float3 r);
$es3 half3x2     outerProduct(half2  c, half3  r);
$es3 float2x4    outerProduct(float4 c, float2 r);
$es3 half2x4     outerProduct(half4  c, half2  r);
$es3 float4x2    outerProduct(float2 c, float4 r);
$es3 half4x2     outerProduct(half2  c, half4  r);
$es3 float3x4    outerProduct(float4 c, float3 r);
$es3 half3x4     outerProduct(half4  c, half3  r);
$es3 float4x3    outerProduct(float3 c, float4 r);
$es3 half4x3     outerProduct(half3  c, half4  r);

// 8.7 : Vector Relational Functions
$bvec lessThan($vec  x, $vec  y);
$bvec lessThan($hvec x, $hvec y);
$bvec lessThan($ivec x, $ivec y);
$bvec lessThanEqual($vec  x, $vec  y);
$bvec lessThanEqual($hvec x, $hvec y);
$bvec lessThanEqual($ivec x, $ivec y);
$bvec greaterThan($vec  x, $vec  y);
$bvec greaterThan($hvec x, $hvec y);
$bvec greaterThan($ivec x, $ivec y);
$bvec greaterThanEqual($vec  x, $vec  y);
$bvec greaterThanEqual($hvec x, $hvec y);
$bvec greaterThanEqual($ivec x, $ivec y);
$bvec equal($vec  x, $vec  y);
$bvec equal($hvec x, $hvec y);
$bvec equal($ivec x, $ivec y);
$bvec equal($bvec x, $bvec y);
$bvec notEqual($vec  x, $vec  y);
$bvec notEqual($hvec x, $hvec y);
$bvec notEqual($ivec x, $ivec y);
$bvec notEqual($bvec x, $bvec y);

bool  any($bvec x);
bool  all($bvec x);
$bvec not($bvec x);

// 8.9 : Fragment Processing Functions (GLSL ES 3.0)
$es3 $genType  dFdx($genType p);
$es3 $genType  dFdy($genType p);
$es3 $genHType dFdx($genHType p);
$es3 $genHType dFdy($genHType p);
$es3 $genType  fwidth($genType p);
$es3 $genHType fwidth($genHType p);


// SkSL intrinsics that are not part of GLSL:
// The max() guards against division by zero when the incoming color is transparent black
half4  unpremul(half4  color) { return half4 (color.rgb / max(color.a, 0.0001), color.a); }
float4 unpremul(float4 color) { return float4(color.rgb / max(color.a, 0.0001), color.a); }

// Color space transformation, between the working (destination) space and fixed (known) spaces:
half3 toLinearSrgb(half3 color);
half3 fromLinearSrgb(half3 color);

// SkSL intrinsics that reflect Skia's C++ object model:
half4 $eval(float2 coords, shader s);
half4 $eval(half4 color, colorFilter f);
half4 $eval(half4 src, half4 dst, blender b);
