blob: 0f094f6feca1aed077c6dc827f656ccf0a6f9866 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Don't edit this file! It is auto-generated by frameworks/rs/api/generate.sh.
/*
* rs_math.rsh: Mathematical Constants and Functions
*
* The mathematical functions below can be applied to scalars and vectors.
* When applied to vectors, a vector of the function applied to each entry
* of the input is returned.
*
* For example:
*
* float3 a, b;
* // The following call sets
* // a.x to sin(b.x),
* // a.y to sin(b.y), and
* // a.z to sin(b.z).
* a = sin(b);
*
*
* See "Vector math functions" for functions like distance() and length()
* that interpret instead the input as a single vector in n-dimensional space.
*
* The precision of the mathematical operations is affected by the pragmas
* rs_fp_relaxed and rs_fp_full.
*
* Different precision/speed tradeoffs can be achieved by using three variants
* of common math functions. Functions with a name starting with
* - native_ may have custom hardware implementations with weaker precision,
* - half_ may perform internal computations using 16 bit floats, and
* - fast_ are n-dimensional space computations that may use 16 bit floats.
*
*/
#ifndef RENDERSCRIPT_RS_MATH_RSH
#define RENDERSCRIPT_RS_MATH_RSH
/*
* M_1_PI: 1 / pi, as a 32 bit float
*
* The inverse of pi, as a 32 bit float.
*/
#define M_1_PI 0.318309886183790671537767526745028724f
/*
* M_2_PI: 2 / pi, as a 32 bit float
*
* 2 divided by pi, as a 32 bit float.
*/
#define M_2_PI 0.636619772367581343075535053490057448f
/*
* M_2_PIl: 2 / pi, as a 32 bit float
*
* DEPRECATED. Do not use.
*
* 2 divided by pi, as a 32 bit float.
*/
#define M_2_PIl 0.636619772367581343075535053490057448f
/*
* M_2_SQRTPI: 2 / sqrt(pi), as a 32 bit float
*
* 2 divided by the square root of pi, as a 32 bit float.
*/
#define M_2_SQRTPI 1.128379167095512573896158903121545172f
/*
* M_E: e, as a 32 bit float
*
* The number e, the base of the natural logarithm, as a 32 bit float.
*/
#define M_E 2.718281828459045235360287471352662498f
/*
* M_LN10: log_e(10), as a 32 bit float
*
* The natural logarithm of 10, as a 32 bit float.
*/
#define M_LN10 2.302585092994045684017991454684364208f
/*
* M_LN2: log_e(2), as a 32 bit float
*
* The natural logarithm of 2, as a 32 bit float.
*/
#define M_LN2 0.693147180559945309417232121458176568f
/*
* M_LOG10E: log_10(e), as a 32 bit float
*
* The logarithm base 10 of e, as a 32 bit float.
*/
#define M_LOG10E 0.434294481903251827651128918916605082f
/*
* M_LOG2E: log_2(e), as a 32 bit float
*
* The logarithm base 2 of e, as a 32 bit float.
*/
#define M_LOG2E 1.442695040888963407359924681001892137f
/*
* M_PI: pi, as a 32 bit float
*
* The constant pi, as a 32 bit float.
*/
#define M_PI 3.141592653589793238462643383279502884f
/*
* M_PI_2: pi / 2, as a 32 bit float
*
* Pi divided by 2, as a 32 bit float.
*/
#define M_PI_2 1.570796326794896619231321691639751442f
/*
* M_PI_4: pi / 4, as a 32 bit float
*
* Pi divided by 4, as a 32 bit float.
*/
#define M_PI_4 0.785398163397448309615660845819875721f
/*
* M_SQRT1_2: 1 / sqrt(2), as a 32 bit float
*
* The inverse of the square root of 2, as a 32 bit float.
*/
#define M_SQRT1_2 0.707106781186547524400844362104849039f
/*
* M_SQRT2: sqrt(2), as a 32 bit float
*
* The square root of 2, as a 32 bit float.
*/
#define M_SQRT2 1.414213562373095048801688724209698079f
/*
* abs: Absolute value of an integer
*
* Returns the absolute value of an integer.
*
* For floats, use fabs().
*/
extern uchar __attribute__((const, overloadable))
abs(char v);
extern uchar2 __attribute__((const, overloadable))
abs(char2 v);
extern uchar3 __attribute__((const, overloadable))
abs(char3 v);
extern uchar4 __attribute__((const, overloadable))
abs(char4 v);
extern ushort __attribute__((const, overloadable))
abs(short v);
extern ushort2 __attribute__((const, overloadable))
abs(short2 v);
extern ushort3 __attribute__((const, overloadable))
abs(short3 v);
extern ushort4 __attribute__((const, overloadable))
abs(short4 v);
extern uint __attribute__((const, overloadable))
abs(int v);
extern uint2 __attribute__((const, overloadable))
abs(int2 v);
extern uint3 __attribute__((const, overloadable))
abs(int3 v);
extern uint4 __attribute__((const, overloadable))
abs(int4 v);
/*
* acos: Inverse cosine
*
* Returns the inverse cosine, in radians.
*
* See also native_acos().
*/
extern float __attribute__((const, overloadable))
acos(float v);
extern float2 __attribute__((const, overloadable))
acos(float2 v);
extern float3 __attribute__((const, overloadable))
acos(float3 v);
extern float4 __attribute__((const, overloadable))
acos(float4 v);
/*
* acosh: Inverse hyperbolic cosine
*
* Returns the inverse hyperbolic cosine, in radians.
*
* See also native_acosh().
*/
extern float __attribute__((const, overloadable))
acosh(float v);
extern float2 __attribute__((const, overloadable))
acosh(float2 v);
extern float3 __attribute__((const, overloadable))
acosh(float3 v);
extern float4 __attribute__((const, overloadable))
acosh(float4 v);
/*
* acospi: Inverse cosine divided by pi
*
* Returns the inverse cosine in radians, divided by pi.
*
* To get an inverse cosine measured in degrees, use acospi(a) * 180.f.
*
* See also native_acospi().
*/
extern float __attribute__((const, overloadable))
acospi(float v);
extern float2 __attribute__((const, overloadable))
acospi(float2 v);
extern float3 __attribute__((const, overloadable))
acospi(float3 v);
extern float4 __attribute__((const, overloadable))
acospi(float4 v);
/*
* asin: Inverse sine
*
* Returns the inverse sine, in radians.
*
* See also native_asin().
*/
extern float __attribute__((const, overloadable))
asin(float v);
extern float2 __attribute__((const, overloadable))
asin(float2 v);
extern float3 __attribute__((const, overloadable))
asin(float3 v);
extern float4 __attribute__((const, overloadable))
asin(float4 v);
/*
* asinh: Inverse hyperbolic sine
*
* Returns the inverse hyperbolic sine, in radians.
*
* See also native_asinh().
*/
extern float __attribute__((const, overloadable))
asinh(float v);
extern float2 __attribute__((const, overloadable))
asinh(float2 v);
extern float3 __attribute__((const, overloadable))
asinh(float3 v);
extern float4 __attribute__((const, overloadable))
asinh(float4 v);
/*
* asinpi: Inverse sine divided by pi
*
* Returns the inverse sine in radians, divided by pi.
*
* To get an inverse sine measured in degrees, use asinpi(a) * 180.f.
*
* See also native_asinpi().
*/
extern float __attribute__((const, overloadable))
asinpi(float v);
extern float2 __attribute__((const, overloadable))
asinpi(float2 v);
extern float3 __attribute__((const, overloadable))
asinpi(float3 v);
extern float4 __attribute__((const, overloadable))
asinpi(float4 v);
/*
* atan: Inverse tangent
*
* Returns the inverse tangent, in radians.
*
* See also native_atan().
*/
extern float __attribute__((const, overloadable))
atan(float v);
extern float2 __attribute__((const, overloadable))
atan(float2 v);
extern float3 __attribute__((const, overloadable))
atan(float3 v);
extern float4 __attribute__((const, overloadable))
atan(float4 v);
/*
* atan2: Inverse tangent of a ratio
*
* Returns the inverse tangent of (numerator / denominator), in radians.
*
* See also native_atan2().
*
* Parameters:
* numerator: The numerator
* denominator: The denominator. Can be 0.
*/
extern float __attribute__((const, overloadable))
atan2(float numerator, float denominator);
extern float2 __attribute__((const, overloadable))
atan2(float2 numerator, float2 denominator);
extern float3 __attribute__((const, overloadable))
atan2(float3 numerator, float3 denominator);
extern float4 __attribute__((const, overloadable))
atan2(float4 numerator, float4 denominator);
/*
* atan2pi: Inverse tangent of a ratio, divided by pi
*
* Returns the inverse tangent of (numerator / denominator), in radians, divided by pi.
*
* To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
*
* See also native_atan2pi().
*
* Parameters:
* numerator: The numerator
* denominator: The denominator. Can be 0.
*/
extern float __attribute__((const, overloadable))
atan2pi(float numerator, float denominator);
extern float2 __attribute__((const, overloadable))
atan2pi(float2 numerator, float2 denominator);
extern float3 __attribute__((const, overloadable))
atan2pi(float3 numerator, float3 denominator);
extern float4 __attribute__((const, overloadable))
atan2pi(float4 numerator, float4 denominator);
/*
* atanh: Inverse hyperbolic tangent
*
* Returns the inverse hyperbolic tangent, in radians.
*
* See also native_atanh().
*/
extern float __attribute__((const, overloadable))
atanh(float v);
extern float2 __attribute__((const, overloadable))
atanh(float2 v);
extern float3 __attribute__((const, overloadable))
atanh(float3 v);
extern float4 __attribute__((const, overloadable))
atanh(float4 v);
/*
* atanpi: Inverse tangent divided by pi
*
* Returns the inverse tangent in radians, divided by pi.
*
* To get an inverse tangent measured in degrees, use atanpi(a) * 180.f.
*
* See also native_atanpi().
*/
extern float __attribute__((const, overloadable))
atanpi(float v);
extern float2 __attribute__((const, overloadable))
atanpi(float2 v);
extern float3 __attribute__((const, overloadable))
atanpi(float3 v);
extern float4 __attribute__((const, overloadable))
atanpi(float4 v);
/*
* cbrt: Cube root
*
* Returns the cube root.
*
* See also native_cbrt().
*/
extern float __attribute__((const, overloadable))
cbrt(float v);
extern float2 __attribute__((const, overloadable))
cbrt(float2 v);
extern float3 __attribute__((const, overloadable))
cbrt(float3 v);
extern float4 __attribute__((const, overloadable))
cbrt(float4 v);
/*
* ceil: Smallest integer not less than a value
*
* Returns the smallest integer not less than a value.
*
* For example, ceil(1.2f) returns 2.f, and ceil(-1.2f) returns -1.f.
*
* See also floor().
*/
extern float __attribute__((const, overloadable))
ceil(float v);
extern float2 __attribute__((const, overloadable))
ceil(float2 v);
extern float3 __attribute__((const, overloadable))
ceil(float3 v);
extern float4 __attribute__((const, overloadable))
ceil(float4 v);
/*
* clamp: Restrain a value to a range
*
* Clamps a value to a specified high and low bound. clamp() returns min_value
* if value < min_value, max_value if value > max_value, otherwise value.
*
* There are two variants of clamp: one where the min and max are scalars applied
* to all entries of the value, the other where the min and max are also vectors.
*
* If min_value is greater than max_value, the results are undefined.
*
* Parameters:
* value: Value to be clamped.
* min_value: Lower bound, a scalar or matching vector.
* max_value: High bound, must match the type of low.
*/
extern float __attribute__((const, overloadable))
clamp(float value, float min_value, float max_value);
extern float2 __attribute__((const, overloadable))
clamp(float2 value, float2 min_value, float2 max_value);
extern float3 __attribute__((const, overloadable))
clamp(float3 value, float3 min_value, float3 max_value);
extern float4 __attribute__((const, overloadable))
clamp(float4 value, float4 min_value, float4 max_value);
extern float2 __attribute__((const, overloadable))
clamp(float2 value, float min_value, float max_value);
extern float3 __attribute__((const, overloadable))
clamp(float3 value, float min_value, float max_value);
extern float4 __attribute__((const, overloadable))
clamp(float4 value, float min_value, float max_value);
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern char __attribute__((const, overloadable))
clamp(char value, char min_value, char max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern char2 __attribute__((const, overloadable))
clamp(char2 value, char2 min_value, char2 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern char3 __attribute__((const, overloadable))
clamp(char3 value, char3 min_value, char3 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern char4 __attribute__((const, overloadable))
clamp(char4 value, char4 min_value, char4 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uchar __attribute__((const, overloadable))
clamp(uchar value, uchar min_value, uchar max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uchar2 __attribute__((const, overloadable))
clamp(uchar2 value, uchar2 min_value, uchar2 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uchar3 __attribute__((const, overloadable))
clamp(uchar3 value, uchar3 min_value, uchar3 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uchar4 __attribute__((const, overloadable))
clamp(uchar4 value, uchar4 min_value, uchar4 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern short __attribute__((const, overloadable))
clamp(short value, short min_value, short max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern short2 __attribute__((const, overloadable))
clamp(short2 value, short2 min_value, short2 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern short3 __attribute__((const, overloadable))
clamp(short3 value, short3 min_value, short3 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern short4 __attribute__((const, overloadable))
clamp(short4 value, short4 min_value, short4 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ushort __attribute__((const, overloadable))
clamp(ushort value, ushort min_value, ushort max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ushort2 __attribute__((const, overloadable))
clamp(ushort2 value, ushort2 min_value, ushort2 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ushort3 __attribute__((const, overloadable))
clamp(ushort3 value, ushort3 min_value, ushort3 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ushort4 __attribute__((const, overloadable))
clamp(ushort4 value, ushort4 min_value, ushort4 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern int __attribute__((const, overloadable))
clamp(int value, int min_value, int max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern int2 __attribute__((const, overloadable))
clamp(int2 value, int2 min_value, int2 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern int3 __attribute__((const, overloadable))
clamp(int3 value, int3 min_value, int3 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern int4 __attribute__((const, overloadable))
clamp(int4 value, int4 min_value, int4 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uint __attribute__((const, overloadable))
clamp(uint value, uint min_value, uint max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uint2 __attribute__((const, overloadable))
clamp(uint2 value, uint2 min_value, uint2 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uint3 __attribute__((const, overloadable))
clamp(uint3 value, uint3 min_value, uint3 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uint4 __attribute__((const, overloadable))
clamp(uint4 value, uint4 min_value, uint4 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern long __attribute__((const, overloadable))
clamp(long value, long min_value, long max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern long2 __attribute__((const, overloadable))
clamp(long2 value, long2 min_value, long2 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern long3 __attribute__((const, overloadable))
clamp(long3 value, long3 min_value, long3 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern long4 __attribute__((const, overloadable))
clamp(long4 value, long4 min_value, long4 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ulong __attribute__((const, overloadable))
clamp(ulong value, ulong min_value, ulong max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ulong2 __attribute__((const, overloadable))
clamp(ulong2 value, ulong2 min_value, ulong2 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ulong3 __attribute__((const, overloadable))
clamp(ulong3 value, ulong3 min_value, ulong3 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ulong4 __attribute__((const, overloadable))
clamp(ulong4 value, ulong4 min_value, ulong4 max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern char2 __attribute__((const, overloadable))
clamp(char2 value, char min_value, char max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern char3 __attribute__((const, overloadable))
clamp(char3 value, char min_value, char max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern char4 __attribute__((const, overloadable))
clamp(char4 value, char min_value, char max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uchar2 __attribute__((const, overloadable))
clamp(uchar2 value, uchar min_value, uchar max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uchar3 __attribute__((const, overloadable))
clamp(uchar3 value, uchar min_value, uchar max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uchar4 __attribute__((const, overloadable))
clamp(uchar4 value, uchar min_value, uchar max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern short2 __attribute__((const, overloadable))
clamp(short2 value, short min_value, short max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern short3 __attribute__((const, overloadable))
clamp(short3 value, short min_value, short max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern short4 __attribute__((const, overloadable))
clamp(short4 value, short min_value, short max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ushort2 __attribute__((const, overloadable))
clamp(ushort2 value, ushort min_value, ushort max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ushort3 __attribute__((const, overloadable))
clamp(ushort3 value, ushort min_value, ushort max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ushort4 __attribute__((const, overloadable))
clamp(ushort4 value, ushort min_value, ushort max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern int2 __attribute__((const, overloadable))
clamp(int2 value, int min_value, int max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern int3 __attribute__((const, overloadable))
clamp(int3 value, int min_value, int max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern int4 __attribute__((const, overloadable))
clamp(int4 value, int min_value, int max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uint2 __attribute__((const, overloadable))
clamp(uint2 value, uint min_value, uint max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uint3 __attribute__((const, overloadable))
clamp(uint3 value, uint min_value, uint max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern uint4 __attribute__((const, overloadable))
clamp(uint4 value, uint min_value, uint max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern long2 __attribute__((const, overloadable))
clamp(long2 value, long min_value, long max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern long3 __attribute__((const, overloadable))
clamp(long3 value, long min_value, long max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern long4 __attribute__((const, overloadable))
clamp(long4 value, long min_value, long max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ulong2 __attribute__((const, overloadable))
clamp(ulong2 value, ulong min_value, ulong max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ulong3 __attribute__((const, overloadable))
clamp(ulong3 value, ulong min_value, ulong max_value);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 19))
extern ulong4 __attribute__((const, overloadable))
clamp(ulong4 value, ulong min_value, ulong max_value);
#endif
/*
* clz: Number of leading 0 bits
*
* Returns the number of leading 0-bits in a value.
*
* For example, clz((char)0x03) returns 6.
*/
extern char __attribute__((const, overloadable))
clz(char value);
extern char2 __attribute__((const, overloadable))
clz(char2 value);
extern char3 __attribute__((const, overloadable))
clz(char3 value);
extern char4 __attribute__((const, overloadable))
clz(char4 value);
extern uchar __attribute__((const, overloadable))
clz(uchar value);
extern uchar2 __attribute__((const, overloadable))
clz(uchar2 value);
extern uchar3 __attribute__((const, overloadable))
clz(uchar3 value);
extern uchar4 __attribute__((const, overloadable))
clz(uchar4 value);
extern short __attribute__((const, overloadable))
clz(short value);
extern short2 __attribute__((const, overloadable))
clz(short2 value);
extern short3 __attribute__((const, overloadable))
clz(short3 value);
extern short4 __attribute__((const, overloadable))
clz(short4 value);
extern ushort __attribute__((const, overloadable))
clz(ushort value);
extern ushort2 __attribute__((const, overloadable))
clz(ushort2 value);
extern ushort3 __attribute__((const, overloadable))
clz(ushort3 value);
extern ushort4 __attribute__((const, overloadable))
clz(ushort4 value);
extern int __attribute__((const, overloadable))
clz(int value);
extern int2 __attribute__((const, overloadable))
clz(int2 value);
extern int3 __attribute__((const, overloadable))
clz(int3 value);
extern int4 __attribute__((const, overloadable))
clz(int4 value);
extern uint __attribute__((const, overloadable))
clz(uint value);
extern uint2 __attribute__((const, overloadable))
clz(uint2 value);
extern uint3 __attribute__((const, overloadable))
clz(uint3 value);
extern uint4 __attribute__((const, overloadable))
clz(uint4 value);
/*
* copysign: Copies the sign of a number to another
*
* Copies the sign from sign_value to magnitude_value.
*
* The value returned is either magnitude_value or -magnitude_value.
*
* For example, copysign(4.0f, -2.7f) returns -4.0f and copysign(-4.0f, 2.7f) returns 4.0f.
*/
extern float __attribute__((const, overloadable))
copysign(float magnitude_value, float sign_value);
extern float2 __attribute__((const, overloadable))
copysign(float2 magnitude_value, float2 sign_value);
extern float3 __attribute__((const, overloadable))
copysign(float3 magnitude_value, float3 sign_value);
extern float4 __attribute__((const, overloadable))
copysign(float4 magnitude_value, float4 sign_value);
/*
* cos: Cosine
*
* Returns the cosine of an angle measured in radians.
*
* See also native_cos().
*/
extern float __attribute__((const, overloadable))
cos(float v);
extern float2 __attribute__((const, overloadable))
cos(float2 v);
extern float3 __attribute__((const, overloadable))
cos(float3 v);
extern float4 __attribute__((const, overloadable))
cos(float4 v);
/*
* cosh: Hypebolic cosine
*
* Returns the hypebolic cosine of v, where v is measured in radians.
*
* See also native_cosh().
*/
extern float __attribute__((const, overloadable))
cosh(float v);
extern float2 __attribute__((const, overloadable))
cosh(float2 v);
extern float3 __attribute__((const, overloadable))
cosh(float3 v);
extern float4 __attribute__((const, overloadable))
cosh(float4 v);
/*
* cospi: Cosine of a number multiplied by pi
*
* Returns the cosine of (v * pi), where (v * pi) is measured in radians.
*
* To get the cosine of a value measured in degrees, call cospi(v / 180.f).
*
* See also native_cospi().
*/
extern float __attribute__((const, overloadable))
cospi(float v);
extern float2 __attribute__((const, overloadable))
cospi(float2 v);
extern float3 __attribute__((const, overloadable))
cospi(float3 v);
extern float4 __attribute__((const, overloadable))
cospi(float4 v);
/*
* degrees: Converts radians into degrees
*
* Converts from radians to degrees.
*/
extern float __attribute__((const, overloadable))
degrees(float v);
extern float2 __attribute__((const, overloadable))
degrees(float2 v);
extern float3 __attribute__((const, overloadable))
degrees(float3 v);
extern float4 __attribute__((const, overloadable))
degrees(float4 v);
/*
* erf: Mathematical error function
*
* Returns the error function.
*/
extern float __attribute__((const, overloadable))
erf(float v);
extern float2 __attribute__((const, overloadable))
erf(float2 v);
extern float3 __attribute__((const, overloadable))
erf(float3 v);
extern float4 __attribute__((const, overloadable))
erf(float4 v);
/*
* erfc: Mathematical complementary error function
*
* Returns the complementary error function.
*/
extern float __attribute__((const, overloadable))
erfc(float v);
extern float2 __attribute__((const, overloadable))
erfc(float2 v);
extern float3 __attribute__((const, overloadable))
erfc(float3 v);
extern float4 __attribute__((const, overloadable))
erfc(float4 v);
/*
* exp: e raised to a number
*
* Returns e raised to v, i.e. e ^ v.
*
* See also native_exp().
*/
extern float __attribute__((const, overloadable))
exp(float v);
extern float2 __attribute__((const, overloadable))
exp(float2 v);
extern float3 __attribute__((const, overloadable))
exp(float3 v);
extern float4 __attribute__((const, overloadable))
exp(float4 v);
/*
* exp10: 10 raised to a number
*
* Returns 10 raised to v, i.e. 10.f ^ v.
*
* See also native_exp10().
*/
extern float __attribute__((const, overloadable))
exp10(float v);
extern float2 __attribute__((const, overloadable))
exp10(float2 v);
extern float3 __attribute__((const, overloadable))
exp10(float3 v);
extern float4 __attribute__((const, overloadable))
exp10(float4 v);
/*
* exp2: 2 raised to a number
*
* Returns 2 raised to v, i.e. 2.f ^ v.
*
* See also native_exp2().
*/
extern float __attribute__((const, overloadable))
exp2(float v);
extern float2 __attribute__((const, overloadable))
exp2(float2 v);
extern float3 __attribute__((const, overloadable))
exp2(float3 v);
extern float4 __attribute__((const, overloadable))
exp2(float4 v);
/*
* expm1: e raised to a number minus one
*
* Returns e raised to v minus 1, i.e. (e ^ v) - 1.
*
* See also native_expm1().
*/
extern float __attribute__((const, overloadable))
expm1(float v);
extern float2 __attribute__((const, overloadable))
expm1(float2 v);
extern float3 __attribute__((const, overloadable))
expm1(float3 v);
extern float4 __attribute__((const, overloadable))
expm1(float4 v);
/*
* fabs: Absolute value of a float
*
* Returns the absolute value of the float v.
*
* For integers, use abs().
*/
extern float __attribute__((const, overloadable))
fabs(float v);
extern float2 __attribute__((const, overloadable))
fabs(float2 v);
extern float3 __attribute__((const, overloadable))
fabs(float3 v);
extern float4 __attribute__((const, overloadable))
fabs(float4 v);
/*
* fdim: Positive difference between two values
*
* Returns the positive difference between two values.
*
* If a > b, returns (a - b) otherwise returns 0f.
*/
extern float __attribute__((const, overloadable))
fdim(float a, float b);
extern float2 __attribute__((const, overloadable))
fdim(float2 a, float2 b);
extern float3 __attribute__((const, overloadable))
fdim(float3 a, float3 b);
extern float4 __attribute__((const, overloadable))
fdim(float4 a, float4 b);
/*
* floor: Smallest integer not greater than a value
*
* Returns the smallest integer not greater than a value.
*
* For example, floor(1.2f) returns 1.f, and floor(-1.2f) returns -2.f.
*
* See also ceil().
*/
extern float __attribute__((const, overloadable))
floor(float v);
extern float2 __attribute__((const, overloadable))
floor(float2 v);
extern float3 __attribute__((const, overloadable))
floor(float3 v);
extern float4 __attribute__((const, overloadable))
floor(float4 v);
/*
* fma: Multiply and add
*
* Multiply and add. Returns (multiplicand1 * multiplicand2) + offset.
*
* This function is similar to mad(). fma() retains full precision of the
* multiplied result and rounds only after the addition. mad() rounds after the
* multiplication and the addition. This extra precision is not guaranteed in
* rs_fp_relaxed mode.
*/
extern float __attribute__((const, overloadable))
fma(float multiplicand1, float multiplicand2, float offset);
extern float2 __attribute__((const, overloadable))
fma(float2 multiplicand1, float2 multiplicand2, float2 offset);
extern float3 __attribute__((const, overloadable))
fma(float3 multiplicand1, float3 multiplicand2, float3 offset);
extern float4 __attribute__((const, overloadable))
fma(float4 multiplicand1, float4 multiplicand2, float4 offset);
/*
* fmax: Maximum of two floats
*
* Returns the maximum of a and b, i.e. (a < b ? b : a).
*
* The max() function returns identical results but can be applied to more data types.
*/
extern float __attribute__((const, overloadable))
fmax(float a, float b);
extern float2 __attribute__((const, overloadable))
fmax(float2 a, float2 b);
extern float3 __attribute__((const, overloadable))
fmax(float3 a, float3 b);
extern float4 __attribute__((const, overloadable))
fmax(float4 a, float4 b);
extern float2 __attribute__((const, overloadable))
fmax(float2 a, float b);
extern float3 __attribute__((const, overloadable))
fmax(float3 a, float b);
extern float4 __attribute__((const, overloadable))
fmax(float4 a, float b);
/*
* fmin: Minimum of two floats
*
* Returns the minimum of a and b, i.e. (a > b ? b : a).
*
* The min() function returns identical results but can be applied to more data types.
*/
extern float __attribute__((const, overloadable))
fmin(float a, float b);
extern float2 __attribute__((const, overloadable))
fmin(float2 a, float2 b);
extern float3 __attribute__((const, overloadable))
fmin(float3 a, float3 b);
extern float4 __attribute__((const, overloadable))
fmin(float4 a, float4 b);
extern float2 __attribute__((const, overloadable))
fmin(float2 a, float b);
extern float3 __attribute__((const, overloadable))
fmin(float3 a, float b);
extern float4 __attribute__((const, overloadable))
fmin(float4 a, float b);
/*
* fmod: Modulo
*
* Returns the remainder of (numerator / denominator), where the quotient is rounded towards zero.
*
* The function remainder() is similar but rounds toward the closest interger.
* For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
* while remainder(-3.8f, 2.f) returns 0.2f (-3.8f - -2.f * 2.f).
*/
extern float __attribute__((const, overloadable))
fmod(float numerator, float denominator);
extern float2 __attribute__((const, overloadable))
fmod(float2 numerator, float2 denominator);
extern float3 __attribute__((const, overloadable))
fmod(float3 numerator, float3 denominator);
extern float4 __attribute__((const, overloadable))
fmod(float4 numerator, float4 denominator);
/*
* fract: Positive fractional part
*
* Returns the positive fractional part of v, i.e. v - floor(v).
*
* For example, fract(1.3f, &val) returns 0.3f and sets val to 1.f.
* fract(-1.3f, &val) returns 0.7f and sets val to -2.f.
*
* Parameters:
* v: Input value.
* floor: If floor is not null, *floor will be set to the floor of v.
*/
extern float __attribute__((overloadable))
fract(float v, float* floor);
extern float2 __attribute__((overloadable))
fract(float2 v, float2* floor);
extern float3 __attribute__((overloadable))
fract(float3 v, float3* floor);
extern float4 __attribute__((overloadable))
fract(float4 v, float4* floor);
static inline float __attribute__((const, overloadable))
fract(float v) {
float unused;
return fract(v, &unused);
}
static inline float2 __attribute__((const, overloadable))
fract(float2 v) {
float2 unused;
return fract(v, &unused);
}
static inline float3 __attribute__((const, overloadable))
fract(float3 v) {
float3 unused;
return fract(v, &unused);
}
static inline float4 __attribute__((const, overloadable))
fract(float4 v) {
float4 unused;
return fract(v, &unused);
}
/*
* frexp: Binary mantissa and exponent
*
* Returns the binary mantissa and exponent of v, i.e. v == mantissa * 2 ^ exponent.
*
* The mantissa is always between 0.5 (inclusive) and 1.0 (exclusive).
*
* See ldexp() for the reverse operation. See also logb() and ilogb().
*
* Parameters:
* v: Input value.
* exponent: If exponent is not null, *exponent will be set to the exponent of v.
*/
extern float __attribute__((overloadable))
frexp(float v, int* exponent);
extern float2 __attribute__((overloadable))
frexp(float2 v, int2* exponent);
extern float3 __attribute__((overloadable))
frexp(float3 v, int3* exponent);
extern float4 __attribute__((overloadable))
frexp(float4 v, int4* exponent);
/*
* half_recip: Reciprocal computed to 16 bit precision
*
* Returns the approximate reciprocal of a value.
*
* The precision is that of a 16 bit floating point value.
*
* See also native_recip().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
half_recip(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float2 __attribute__((const, overloadable))
half_recip(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float3 __attribute__((const, overloadable))
half_recip(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float4 __attribute__((const, overloadable))
half_recip(float4 v);
#endif
/*
* half_rsqrt: Reciprocal of a square root computed to 16 bit precision
*
* Returns the approximate value of (1.f / sqrt(value)).
*
* The precision is that of a 16 bit floating point value.
*
* See also rsqrt(), native_rsqrt().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
half_rsqrt(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float2 __attribute__((const, overloadable))
half_rsqrt(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float3 __attribute__((const, overloadable))
half_rsqrt(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float4 __attribute__((const, overloadable))
half_rsqrt(float4 v);
#endif
/*
* half_sqrt: Square root computed to 16 bit precision
*
* Returns the approximate square root of a value.
*
* The precision is that of a 16 bit floating point value.
*
* See also sqrt(), native_sqrt().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
half_sqrt(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float2 __attribute__((const, overloadable))
half_sqrt(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float3 __attribute__((const, overloadable))
half_sqrt(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float4 __attribute__((const, overloadable))
half_sqrt(float4 v);
#endif
/*
* hypot: Hypotenuse
*
* Returns the hypotenuse, i.e. sqrt(a * a + b * b).
*
* See also native_hypot().
*/
extern float __attribute__((const, overloadable))
hypot(float a, float b);
extern float2 __attribute__((const, overloadable))
hypot(float2 a, float2 b);
extern float3 __attribute__((const, overloadable))
hypot(float3 a, float3 b);
extern float4 __attribute__((const, overloadable))
hypot(float4 a, float4 b);
/*
* ilogb: Base two exponent
*
* Returns the base two exponent of a value, where the mantissa is between
* 1.f (inclusive) and 2.f (exclusive).
*
* For example, ilogb(8.5f) returns 3.
*
* Because of the difference in mantissa, this number is one less than
* is returned by frexp().
*
* logb() is similar but returns a float.
*/
extern int __attribute__((const, overloadable))
ilogb(float v);
extern int2 __attribute__((const, overloadable))
ilogb(float2 v);
extern int3 __attribute__((const, overloadable))
ilogb(float3 v);
extern int4 __attribute__((const, overloadable))
ilogb(float4 v);
/*
* ldexp: Creates a floating point from mantissa and exponent
*
* Returns the floating point created from the mantissa and exponent,
* i.e. (mantissa * 2 ^ exponent).
*
* See frexp() for the reverse operation.
*
* Parameters:
* mantissa: The mantissa
* exponent: The exponent, a single component or matching vector.
*/
extern float __attribute__((const, overloadable))
ldexp(float mantissa, int exponent);
extern float2 __attribute__((const, overloadable))
ldexp(float2 mantissa, int2 exponent);
extern float3 __attribute__((const, overloadable))
ldexp(float3 mantissa, int3 exponent);
extern float4 __attribute__((const, overloadable))
ldexp(float4 mantissa, int4 exponent);
extern float2 __attribute__((const, overloadable))
ldexp(float2 mantissa, int exponent);
extern float3 __attribute__((const, overloadable))
ldexp(float3 mantissa, int exponent);
extern float4 __attribute__((const, overloadable))
ldexp(float4 mantissa, int exponent);
/*
* lgamma: Natural logarithm of the gamma function
*
* Returns the natural logarithm of the absolute value of the gamma function,
* i.e. log(fabs(tgamma(v))).
*
* See also tgamma().
*
* Parameters:
* sign_of_gamma: If sign_of_gamma is not null, *sign_of_gamma will be set to -1.f if the gamma of v is negative, otherwise to 1.f.
*/
extern float __attribute__((const, overloadable))
lgamma(float v);
extern float2 __attribute__((const, overloadable))
lgamma(float2 v);
extern float3 __attribute__((const, overloadable))
lgamma(float3 v);
extern float4 __attribute__((const, overloadable))
lgamma(float4 v);
extern float __attribute__((overloadable))
lgamma(float v, int* sign_of_gamma);
extern float2 __attribute__((overloadable))
lgamma(float2 v, int2* sign_of_gamma);
extern float3 __attribute__((overloadable))
lgamma(float3 v, int3* sign_of_gamma);
extern float4 __attribute__((overloadable))
lgamma(float4 v, int4* sign_of_gamma);
/*
* log: Natural logarithm
*
* Returns the natural logarithm.
*
* See also native_log().
*/
extern float __attribute__((const, overloadable))
log(float v);
extern float2 __attribute__((const, overloadable))
log(float2 v);
extern float3 __attribute__((const, overloadable))
log(float3 v);
extern float4 __attribute__((const, overloadable))
log(float4 v);
/*
* log10: Base 10 logarithm
*
* Returns the base 10 logarithm.
*
* See also native_log10().
*/
extern float __attribute__((const, overloadable))
log10(float v);
extern float2 __attribute__((const, overloadable))
log10(float2 v);
extern float3 __attribute__((const, overloadable))
log10(float3 v);
extern float4 __attribute__((const, overloadable))
log10(float4 v);
/*
* log1p: Natural logarithm of a value plus 1
*
* Returns the natural logarithm of (v + 1.f).
*
* See also native_log1p().
*/
extern float __attribute__((const, overloadable))
log1p(float v);
extern float2 __attribute__((const, overloadable))
log1p(float2 v);
extern float3 __attribute__((const, overloadable))
log1p(float3 v);
extern float4 __attribute__((const, overloadable))
log1p(float4 v);
/*
* log2: Base 2 logarithm
*
* Returns the base 2 logarithm.
*
* See also native_log2().
*/
extern float __attribute__((const, overloadable))
log2(float v);
extern float2 __attribute__((const, overloadable))
log2(float2 v);
extern float3 __attribute__((const, overloadable))
log2(float3 v);
extern float4 __attribute__((const, overloadable))
log2(float4 v);
/*
* logb: Base two exponent
*
* Returns the base two exponent of a value, where the mantissa is between
* 1.f (inclusive) and 2.f (exclusive).
*
* For example, logb(8.5f) returns 3.f.
*
* Because of the difference in mantissa, this number is one less than
* is returned by frexp().
*
* ilogb() is similar but returns an integer.
*/
extern float __attribute__((const, overloadable))
logb(float v);
extern float2 __attribute__((const, overloadable))
logb(float2 v);
extern float3 __attribute__((const, overloadable))
logb(float3 v);
extern float4 __attribute__((const, overloadable))
logb(float4 v);
/*
* mad: Multiply and add
*
* Multiply and add. Returns (multiplicand1 * multiplicand2) + offset.
*
* This function is similar to fma(). fma() retains full precision of the
* multiplied result and rounds only after the addition. mad() rounds after the
* multiplication and the addition. In rs_fp_relaxed mode, mad() may not do the
* rounding after multiplicaiton.
*/
extern float __attribute__((const, overloadable))
mad(float multiplicand1, float multiplicand2, float offset);
extern float2 __attribute__((const, overloadable))
mad(float2 multiplicand1, float2 multiplicand2, float2 offset);
extern float3 __attribute__((const, overloadable))
mad(float3 multiplicand1, float3 multiplicand2, float3 offset);
extern float4 __attribute__((const, overloadable))
mad(float4 multiplicand1, float4 multiplicand2, float4 offset);
/*
* max: Maximum
*
* Returns the maximum value of two arguments.
*/
extern float __attribute__((const, overloadable))
max(float a, float b);
extern float2 __attribute__((const, overloadable))
max(float2 a, float2 b);
extern float3 __attribute__((const, overloadable))
max(float3 a, float3 b);
extern float4 __attribute__((const, overloadable))
max(float4 a, float4 b);
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline char __attribute__((const, overloadable))
max(char a, char b) {
return (a > b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uchar __attribute__((const, overloadable))
max(uchar a, uchar b) {
return (a > b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline short __attribute__((const, overloadable))
max(short a, short b) {
return (a > b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline ushort __attribute__((const, overloadable))
max(ushort a, ushort b) {
return (a > b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline int __attribute__((const, overloadable))
max(int a, int b) {
return (a > b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uint __attribute__((const, overloadable))
max(uint a, uint b) {
return (a > b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline char2 __attribute__((const, overloadable))
max(char2 a, char2 b) {
char2 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uchar2 __attribute__((const, overloadable))
max(uchar2 a, uchar2 b) {
uchar2 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline short2 __attribute__((const, overloadable))
max(short2 a, short2 b) {
short2 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline ushort2 __attribute__((const, overloadable))
max(ushort2 a, ushort2 b) {
ushort2 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline int2 __attribute__((const, overloadable))
max(int2 a, int2 b) {
int2 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uint2 __attribute__((const, overloadable))
max(uint2 a, uint2 b) {
uint2 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline char3 __attribute__((const, overloadable))
max(char3 a, char3 b) {
char3 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uchar3 __attribute__((const, overloadable))
max(uchar3 a, uchar3 b) {
uchar3 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline short3 __attribute__((const, overloadable))
max(short3 a, short3 b) {
short3 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline ushort3 __attribute__((const, overloadable))
max(ushort3 a, ushort3 b) {
ushort3 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline int3 __attribute__((const, overloadable))
max(int3 a, int3 b) {
int3 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uint3 __attribute__((const, overloadable))
max(uint3 a, uint3 b) {
uint3 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline char4 __attribute__((const, overloadable))
max(char4 a, char4 b) {
char4 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
tmp.w = (a.w > b.w ? a.w : b.w);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uchar4 __attribute__((const, overloadable))
max(uchar4 a, uchar4 b) {
uchar4 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
tmp.w = (a.w > b.w ? a.w : b.w);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline short4 __attribute__((const, overloadable))
max(short4 a, short4 b) {
short4 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
tmp.w = (a.w > b.w ? a.w : b.w);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline ushort4 __attribute__((const, overloadable))
max(ushort4 a, ushort4 b) {
ushort4 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
tmp.w = (a.w > b.w ? a.w : b.w);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline int4 __attribute__((const, overloadable))
max(int4 a, int4 b) {
int4 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
tmp.w = (a.w > b.w ? a.w : b.w);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uint4 __attribute__((const, overloadable))
max(uint4 a, uint4 b) {
uint4 tmp;
tmp.x = (a.x > b.x ? a.x : b.x);
tmp.y = (a.y > b.y ? a.y : b.y);
tmp.z = (a.z > b.z ? a.z : b.z);
tmp.w = (a.w > b.w ? a.w : b.w);
return tmp;
}
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern char __attribute__((const, overloadable))
max(char a, char b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern char2 __attribute__((const, overloadable))
max(char2 a, char2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern char3 __attribute__((const, overloadable))
max(char3 a, char3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern char4 __attribute__((const, overloadable))
max(char4 a, char4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uchar __attribute__((const, overloadable))
max(uchar a, uchar b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uchar2 __attribute__((const, overloadable))
max(uchar2 a, uchar2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uchar3 __attribute__((const, overloadable))
max(uchar3 a, uchar3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uchar4 __attribute__((const, overloadable))
max(uchar4 a, uchar4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern short __attribute__((const, overloadable))
max(short a, short b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern short2 __attribute__((const, overloadable))
max(short2 a, short2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern short3 __attribute__((const, overloadable))
max(short3 a, short3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern short4 __attribute__((const, overloadable))
max(short4 a, short4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ushort __attribute__((const, overloadable))
max(ushort a, ushort b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ushort2 __attribute__((const, overloadable))
max(ushort2 a, ushort2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ushort3 __attribute__((const, overloadable))
max(ushort3 a, ushort3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ushort4 __attribute__((const, overloadable))
max(ushort4 a, ushort4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern int __attribute__((const, overloadable))
max(int a, int b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern int2 __attribute__((const, overloadable))
max(int2 a, int2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern int3 __attribute__((const, overloadable))
max(int3 a, int3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern int4 __attribute__((const, overloadable))
max(int4 a, int4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uint __attribute__((const, overloadable))
max(uint a, uint b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uint2 __attribute__((const, overloadable))
max(uint2 a, uint2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uint3 __attribute__((const, overloadable))
max(uint3 a, uint3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uint4 __attribute__((const, overloadable))
max(uint4 a, uint4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern long __attribute__((const, overloadable))
max(long a, long b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern long2 __attribute__((const, overloadable))
max(long2 a, long2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern long3 __attribute__((const, overloadable))
max(long3 a, long3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern long4 __attribute__((const, overloadable))
max(long4 a, long4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ulong __attribute__((const, overloadable))
max(ulong a, ulong b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ulong2 __attribute__((const, overloadable))
max(ulong2 a, ulong2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ulong3 __attribute__((const, overloadable))
max(ulong3 a, ulong3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ulong4 __attribute__((const, overloadable))
max(ulong4 a, ulong4 b);
#endif
/*
* min: Minimum
*
* Returns the minimum value of two arguments.
*/
extern float __attribute__((const, overloadable))
min(float a, float b);
extern float2 __attribute__((const, overloadable))
min(float2 a, float2 b);
extern float3 __attribute__((const, overloadable))
min(float3 a, float3 b);
extern float4 __attribute__((const, overloadable))
min(float4 a, float4 b);
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline char __attribute__((const, overloadable))
min(char a, char b) {
return (a < b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uchar __attribute__((const, overloadable))
min(uchar a, uchar b) {
return (a < b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline short __attribute__((const, overloadable))
min(short a, short b) {
return (a < b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline ushort __attribute__((const, overloadable))
min(ushort a, ushort b) {
return (a < b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline int __attribute__((const, overloadable))
min(int a, int b) {
return (a < b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uint __attribute__((const, overloadable))
min(uint a, uint b) {
return (a < b ? a : b);
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline char2 __attribute__((const, overloadable))
min(char2 a, char2 b) {
char2 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uchar2 __attribute__((const, overloadable))
min(uchar2 a, uchar2 b) {
uchar2 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline short2 __attribute__((const, overloadable))
min(short2 a, short2 b) {
short2 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline ushort2 __attribute__((const, overloadable))
min(ushort2 a, ushort2 b) {
ushort2 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline int2 __attribute__((const, overloadable))
min(int2 a, int2 b) {
int2 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uint2 __attribute__((const, overloadable))
min(uint2 a, uint2 b) {
uint2 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline char3 __attribute__((const, overloadable))
min(char3 a, char3 b) {
char3 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uchar3 __attribute__((const, overloadable))
min(uchar3 a, uchar3 b) {
uchar3 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline short3 __attribute__((const, overloadable))
min(short3 a, short3 b) {
short3 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline ushort3 __attribute__((const, overloadable))
min(ushort3 a, ushort3 b) {
ushort3 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline int3 __attribute__((const, overloadable))
min(int3 a, int3 b) {
int3 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uint3 __attribute__((const, overloadable))
min(uint3 a, uint3 b) {
uint3 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline char4 __attribute__((const, overloadable))
min(char4 a, char4 b) {
char4 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
tmp.w = (a.w < b.w ? a.w : b.w);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uchar4 __attribute__((const, overloadable))
min(uchar4 a, uchar4 b) {
uchar4 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
tmp.w = (a.w < b.w ? a.w : b.w);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline short4 __attribute__((const, overloadable))
min(short4 a, short4 b) {
short4 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
tmp.w = (a.w < b.w ? a.w : b.w);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline ushort4 __attribute__((const, overloadable))
min(ushort4 a, ushort4 b) {
ushort4 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
tmp.w = (a.w < b.w ? a.w : b.w);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline int4 __attribute__((const, overloadable))
min(int4 a, int4 b) {
int4 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
tmp.w = (a.w < b.w ? a.w : b.w);
return tmp;
}
#endif
#if !defined(RS_VERSION) || (RS_VERSION <= 20)
static inline uint4 __attribute__((const, overloadable))
min(uint4 a, uint4 b) {
uint4 tmp;
tmp.x = (a.x < b.x ? a.x : b.x);
tmp.y = (a.y < b.y ? a.y : b.y);
tmp.z = (a.z < b.z ? a.z : b.z);
tmp.w = (a.w < b.w ? a.w : b.w);
return tmp;
}
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern char __attribute__((const, overloadable))
min(char a, char b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern char2 __attribute__((const, overloadable))
min(char2 a, char2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern char3 __attribute__((const, overloadable))
min(char3 a, char3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern char4 __attribute__((const, overloadable))
min(char4 a, char4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uchar __attribute__((const, overloadable))
min(uchar a, uchar b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uchar2 __attribute__((const, overloadable))
min(uchar2 a, uchar2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uchar3 __attribute__((const, overloadable))
min(uchar3 a, uchar3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uchar4 __attribute__((const, overloadable))
min(uchar4 a, uchar4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern short __attribute__((const, overloadable))
min(short a, short b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern short2 __attribute__((const, overloadable))
min(short2 a, short2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern short3 __attribute__((const, overloadable))
min(short3 a, short3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern short4 __attribute__((const, overloadable))
min(short4 a, short4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ushort __attribute__((const, overloadable))
min(ushort a, ushort b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ushort2 __attribute__((const, overloadable))
min(ushort2 a, ushort2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ushort3 __attribute__((const, overloadable))
min(ushort3 a, ushort3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ushort4 __attribute__((const, overloadable))
min(ushort4 a, ushort4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern int __attribute__((const, overloadable))
min(int a, int b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern int2 __attribute__((const, overloadable))
min(int2 a, int2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern int3 __attribute__((const, overloadable))
min(int3 a, int3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern int4 __attribute__((const, overloadable))
min(int4 a, int4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uint __attribute__((const, overloadable))
min(uint a, uint b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uint2 __attribute__((const, overloadable))
min(uint2 a, uint2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uint3 __attribute__((const, overloadable))
min(uint3 a, uint3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern uint4 __attribute__((const, overloadable))
min(uint4 a, uint4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern long __attribute__((const, overloadable))
min(long a, long b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern long2 __attribute__((const, overloadable))
min(long2 a, long2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern long3 __attribute__((const, overloadable))
min(long3 a, long3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern long4 __attribute__((const, overloadable))
min(long4 a, long4 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ulong __attribute__((const, overloadable))
min(ulong a, ulong b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ulong2 __attribute__((const, overloadable))
min(ulong2 a, ulong2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ulong3 __attribute__((const, overloadable))
min(ulong3 a, ulong3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern ulong4 __attribute__((const, overloadable))
min(ulong4 a, ulong4 b);
#endif
/*
* mix: Mixes two values
*
* Returns start + ((stop - start) * fraction).
*
* This can be useful for mixing two values. For example, to create a new color that is 40% color1 and 60% color2, use mix(color1, color2, 0.6f).
*/
extern float __attribute__((const, overloadable))
mix(float start, float stop, float fraction);
extern float2 __attribute__((const, overloadable))
mix(float2 start, float2 stop, float2 fraction);
extern float3 __attribute__((const, overloadable))
mix(float3 start, float3 stop, float3 fraction);
extern float4 __attribute__((const, overloadable))
mix(float4 start, float4 stop, float4 fraction);
extern float2 __attribute__((const, overloadable))
mix(float2 start, float2 stop, float fraction);
extern float3 __attribute__((const, overloadable))
mix(float3 start, float3 stop, float fraction);
extern float4 __attribute__((const, overloadable))
mix(float4 start, float4 stop, float fraction);
/*
* modf: Integral and fractional components
*
* Returns the integral and fractional components of a number.
*
* Both components will have the same sign as x. For example, for an input of -3.72f, iret will be set to -3.f and .72f will be returned.
*
* Parameters:
* v: Source value
* integral_part: *integral_part will be set to the integral portion of the number.
*
* Returns: The floating point portion of the value.
*/
extern float __attribute__((overloadable))
modf(float v, float* integral_part);
extern float2 __attribute__((overloadable))
modf(float2 v, float2* integral_part);
extern float3 __attribute__((overloadable))
modf(float3 v, float3* integral_part);
extern float4 __attribute__((overloadable))
modf(float4 v, float4* integral_part);
/*
* nan: Not a Number
*
* Returns a NaN value (Not a Number).
*
* Parameters:
* v: Not used.
*/
extern float __attribute__((const, overloadable))
nan(uint v);
/*
* native_acos: Approximate inverse cosine
*
* Returns the approximate inverse cosine, in radians.
*
* This function yields undefined results from input values less than -1 or greater
* than 1.
*
* See also acos().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_acos(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_acos(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_acos(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_acos(float4 v);
#endif
/*
* native_acosh: Approximate inverse hyperbolic cosine
*
* Returns the approximate inverse hyperbolic cosine, in radians.
*
* See also acosh().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_acosh(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_acosh(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_acosh(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_acosh(float4 v);
#endif
/*
* native_acospi: Approximate inverse cosine divided by pi
*
* Returns the approximate inverse cosine in radians, divided by pi.
*
* To get an inverse cosine measured in degrees, use acospi(a) * 180.f.
*
* This function yields undefined results from input values less than -1 or greater
* than 1.
*
* See also acospi().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_acospi(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_acospi(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_acospi(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_acospi(float4 v);
#endif
/*
* native_asin: Approximate inverse sine
*
* Returns the approximate inverse sine, in radians.
*
* This function yields undefined results from input values less than -1 or greater
* than 1.
*
* See also asin().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_asin(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_asin(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_asin(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_asin(float4 v);
#endif
/*
* native_asinh: Approximate inverse hyperbolic sine
*
* Returns the approximate inverse hyperbolic sine, in radians.
*
* See also asinh().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_asinh(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_asinh(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_asinh(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_asinh(float4 v);
#endif
/*
* native_asinpi: Approximate inverse sine divided by pi
*
* Returns the approximate inverse sine in radians, divided by pi.
*
* To get an inverse sine measured in degrees, use asinpi(a) * 180.f.
*
* This function yields undefined results from input values less than -1 or greater
* than 1.
*
* See also asinpi().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_asinpi(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_asinpi(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_asinpi(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_asinpi(float4 v);
#endif
/*
* native_atan: Approximate inverse tangent
*
* Returns the approximate inverse tangent, in radians.
*
* See also atan().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_atan(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_atan(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_atan(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_atan(float4 v);
#endif
/*
* native_atan2: Approximate inverse tangent of a ratio
*
* Returns the approximate inverse tangent of (numerator / denominator), in radians.
*
* See also atan2().
*
* Parameters:
* numerator: The numerator
* denominator: The denominator. Can be 0.
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_atan2(float numerator, float denominator);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_atan2(float2 numerator, float2 denominator);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_atan2(float3 numerator, float3 denominator);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_atan2(float4 numerator, float4 denominator);
#endif
/*
* native_atan2pi: Approximate inverse tangent of a ratio, divided by pi
*
* Returns the approximate inverse tangent of (numerator / denominator), in radians, divided by pi.
*
* To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f.
*
* See also atan2pi().
*
* Parameters:
* numerator: The numerator
* denominator: The denominator. Can be 0.
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_atan2pi(float numerator, float denominator);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_atan2pi(float2 numerator, float2 denominator);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_atan2pi(float3 numerator, float3 denominator);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_atan2pi(float4 numerator, float4 denominator);
#endif
/*
* native_atanh: Approximate inverse hyperbolic tangent
*
* Returns the approximate inverse hyperbolic tangent, in radians.
*
* See also atanh().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_atanh(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_atanh(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_atanh(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_atanh(float4 v);
#endif
/*
* native_atanpi: Approximate inverse tangent divided by pi
*
* Returns the approximate inverse tangent in radians, divided by pi.
*
* To get an inverse tangent measured in degrees, use atanpi(a) * 180.f.
*
* See also atanpi().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_atanpi(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_atanpi(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_atanpi(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_atanpi(float4 v);
#endif
/*
* native_cbrt: Approximate cube root
*
* Returns the approximate cubic root.
*
* See also cbrt().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_cbrt(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_cbrt(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_cbrt(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_cbrt(float4 v);
#endif
/*
* native_cos: Approximate cosine
*
* Returns the approximate cosine of an angle measured in radians.
*
* See also cos().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_cos(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_cos(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_cos(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_cos(float4 v);
#endif
/*
* native_cosh: Approximate hypebolic cosine
*
* Returns the approximate hypebolic cosine.
*
* See also cosh().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_cosh(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_cosh(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_cosh(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_cosh(float4 v);
#endif
/*
* native_cospi: Approximate cosine of a number multiplied by pi
*
* Returns the approximate cosine of (v * pi), where (v * pi) is measured in radians.
*
* To get the cosine of a value measured in degrees, call cospi(v / 180.f).
*
* See also cospi().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_cospi(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_cospi(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_cospi(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_cospi(float4 v);
#endif
/*
* native_divide: Approximate division
*
* Computes the approximate division of two values.
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_divide(float left_vector, float right_vector);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_divide(float2 left_vector, float2 right_vector);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_divide(float3 left_vector, float3 right_vector);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_divide(float4 left_vector, float4 right_vector);
#endif
/*
* native_exp: Approximate e raised to a number
*
* Fast approximate exp.
*
* It is valid for inputs from -86.f to 86.f. The precision is no worse than what would be expected from using 16 bit floating point values.
*
* See also exp().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float __attribute__((const, overloadable))
native_exp(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float2 __attribute__((const, overloadable))
native_exp(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float3 __attribute__((const, overloadable))
native_exp(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float4 __attribute__((const, overloadable))
native_exp(float4 v);
#endif
/*
* native_exp10: Approximate 10 raised to a number
*
* Fast approximate exp10.
*
* It is valid for inputs from -37.f to 37.f. The precision is no worse than what would be expected from using 16 bit floating point values.
*
* See also exp10().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float __attribute__((const, overloadable))
native_exp10(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float2 __attribute__((const, overloadable))
native_exp10(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float3 __attribute__((const, overloadable))
native_exp10(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float4 __attribute__((const, overloadable))
native_exp10(float4 v);
#endif
/*
* native_exp2: Approximate 2 raised to a number
*
* Fast approximate exp2.
*
* It is valid for inputs from -125.f to 125.f. The precision is no worse than what would be expected from using 16 bit floating point values.
*
* See also exp2().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float __attribute__((const, overloadable))
native_exp2(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float2 __attribute__((const, overloadable))
native_exp2(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float3 __attribute__((const, overloadable))
native_exp2(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float4 __attribute__((const, overloadable))
native_exp2(float4 v);
#endif
/*
* native_expm1: Approximate e raised to a number minus one
*
* Returns the approximate (e ^ v) - 1.
*
* See also expm1().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_expm1(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_expm1(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_expm1(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_expm1(float4 v);
#endif
/*
* native_hypot: Approximate hypotenuse
*
* Returns the approximate native_sqrt(a * a + b * b)
*
* See also hypot().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_hypot(float a, float b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_hypot(float2 a, float2 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_hypot(float3 a, float3 b);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_hypot(float4 a, float4 b);
#endif
/*
* native_log: Approximate natural logarithm
*
* Fast approximate log.
*
* It is not accurate for values very close to zero.
*
* See also log().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float __attribute__((const, overloadable))
native_log(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float2 __attribute__((const, overloadable))
native_log(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float3 __attribute__((const, overloadable))
native_log(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float4 __attribute__((const, overloadable))
native_log(float4 v);
#endif
/*
* native_log10: Approximate base 10 logarithm
*
* Fast approximate log10.
*
* It is not accurate for values very close to zero.
*
* See also log10().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float __attribute__((const, overloadable))
native_log10(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float2 __attribute__((const, overloadable))
native_log10(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float3 __attribute__((const, overloadable))
native_log10(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float4 __attribute__((const, overloadable))
native_log10(float4 v);
#endif
/*
* native_log1p: Approximate natural logarithm of a value plus 1
*
* Returns the approximate natural logarithm of (v + 1.0f)
*
* See also log1p().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_log1p(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_log1p(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_log1p(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_log1p(float4 v);
#endif
/*
* native_log2: Approximate base 2 logarithm
*
* Fast approximate log2.
*
* It is not accurate for values very close to zero.
*
* See also log2().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float __attribute__((const, overloadable))
native_log2(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float2 __attribute__((const, overloadable))
native_log2(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float3 __attribute__((const, overloadable))
native_log2(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float4 __attribute__((const, overloadable))
native_log2(float4 v);
#endif
/*
* native_powr: Approximate positive base raised to an exponent
*
* Fast approximate (base ^ exponent).
*
* See also powr().
*
* Parameters:
* base: Must be between 0.f and 256.f. The function is not accurate for values very close to zero.
* exponent: Must be between -15.f and 15.f.
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float __attribute__((const, overloadable))
native_powr(float base, float exponent);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float2 __attribute__((const, overloadable))
native_powr(float2 base, float2 exponent);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float3 __attribute__((const, overloadable))
native_powr(float3 base, float3 exponent);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 18))
extern float4 __attribute__((const, overloadable))
native_powr(float4 base, float4 exponent);
#endif
/*
* native_recip: Approximate reciprocal
*
* Returns the approximate approximate reciprocal of a value.
*
* See also half_recip().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_recip(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_recip(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_recip(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_recip(float4 v);
#endif
/*
* native_rootn: Approximate nth root
*
* Compute the approximate Nth root of a value.
*
* See also rootn().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_rootn(float v, int n);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_rootn(float2 v, int2 n);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_rootn(float3 v, int3 n);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_rootn(float4 v, int4 n);
#endif
/*
* native_rsqrt: Approximate reciprocal of a square root
*
* Returns approximate (1 / sqrt(v)).
*
* See also rsqrt(), half_rsqrt().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_rsqrt(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_rsqrt(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_rsqrt(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_rsqrt(float4 v);
#endif
/*
* native_sin: Approximate sine
*
* Returns the approximate sine of an angle measured in radians.
*
* See also sin().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_sin(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_sin(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_sin(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_sin(float4 v);
#endif
/*
* native_sincos: Approximate sine and cosine
*
* Returns the approximate sine and cosine of a value.
*
* See also sincos().
*
* Parameters:
* v: The incoming value in radians.
* cos: *cos will be set to the cosine value.
*
* Returns: sine
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((overloadable))
native_sincos(float v, float* cos);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((overloadable))
native_sincos(float2 v, float2* cos);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((overloadable))
native_sincos(float3 v, float3* cos);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((overloadable))
native_sincos(float4 v, float4* cos);
#endif
/*
* native_sinh: Approximate hyperbolic sine
*
* Returns the approximate hyperbolic sine of a value specified in radians.
*
* See also sinh().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_sinh(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_sinh(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_sinh(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_sinh(float4 v);
#endif
/*
* native_sinpi: Approximate sine of a number multiplied by pi
*
* Returns the approximate sine of (v * pi), where (v * pi) is measured in radians.
*
* To get the sine of a value measured in degrees, call sinpi(v / 180.f).
*
* See also sinpi().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_sinpi(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_sinpi(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_sinpi(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_sinpi(float4 v);
#endif
/*
* native_sqrt: Approximate square root
*
* Returns the approximate sqrt(v).
*
* See also sqrt(), half_sqrt().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_sqrt(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_sqrt(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_sqrt(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_sqrt(float4 v);
#endif
/*
* native_tan: Approximate tangent
*
* Returns the approximate tangent of an angle measured in radians.
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_tan(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_tan(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_tan(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_tan(float4 v);
#endif
/*
* native_tanh: Approximate hyperbolic tangent
*
* Returns the approximate hyperbolic tangent of a value.
*
* See also tanh().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_tanh(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_tanh(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_tanh(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_tanh(float4 v);
#endif
/*
* native_tanpi: Approximate tangent of a number multiplied by pi
*
* Returns the approximate tangent of (v * pi), where (v * pi) is measured in radians.
*
* To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
*
* See also tanpi().
*/
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
native_tanpi(float v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
native_tanpi(float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
native_tanpi(float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
native_tanpi(float4 v);
#endif
/*
* nextafter: Next floating point number
*
* Returns the next representable floating point number from v towards target.
*
* In rs_fp_relaxed mode, a denormalized input value may not yield the next
* denormalized value, as support of denormalized values is optional in
* relaxed mode.
*/
extern float __attribute__((const, overloadable))
nextafter(float v, float target);
extern float2 __attribute__((const, overloadable))
nextafter(float2 v, float2 target);
extern float3 __attribute__((const, overloadable))
nextafter(float3 v, float3 target);
extern float4 __attribute__((const, overloadable))
nextafter(float4 v, float4 target);
/*
* pow: Base raised to an exponent
*
* Returns base raised to the power exponent, i.e. base ^ exponent.
*
* pown() and powr() are similar. pown() takes an integer exponent. powr() assumes the base to be non-negative.
*/
extern float __attribute__((const, overloadable))
pow(float base, float exponent);
extern float2 __attribute__((const, overloadable))
pow(float2 base, float2 exponent);
extern float3 __attribute__((const, overloadable))
pow(float3 base, float3 exponent);
extern float4 __attribute__((const, overloadable))
pow(float4 base, float4 exponent);
/*
* pown: Base raised to an integer exponent
*
* Returns base raised to the power exponent, i.e. base ^ exponent.
*
* pow() and powr() are similar. The both take a float exponent. powr() also assumes the base to be non-negative.
*/
extern float __attribute__((const, overloadable))
pown(float base, int exponent);
extern float2 __attribute__((const, overloadable))
pown(float2 base, int2 exponent);
extern float3 __attribute__((const, overloadable))
pown(float3 base, int3 exponent);
extern float4 __attribute__((const, overloadable))
pown(float4 base, int4 exponent);
/*
* powr: Positive base raised to an exponent
*
* Returns base raised to the power exponent, i.e. base ^ exponent. base must be >= 0.
*
* pow() and pown() are similar. They both make no assumptions about the base. pow() takes a float exponent while pown() take an integer.
*
* See also native_powr().
*/
extern float __attribute__((const, overloadable))
powr(float base, float exponent);
extern float2 __attribute__((const, overloadable))
powr(float2 base, float2 exponent);
extern float3 __attribute__((const, overloadable))
powr(float3 base, float3 exponent);
extern float4 __attribute__((const, overloadable))
powr(float4 base, float4 exponent);
/*
* radians: Converts degrees into radians
*
* Converts from degrees to radians.
*/
extern float __attribute__((const, overloadable))
radians(float v);
extern float2 __attribute__((const, overloadable))
radians(float2 v);
extern float3 __attribute__((const, overloadable))
radians(float3 v);
extern float4 __attribute__((const, overloadable))
radians(float4 v);
/*
* remainder: Remainder of a division
*
* Returns the remainder of (numerator / denominator), where the quotient is rounded towards the nearest integer.
*
* The function fmod() is similar but rounds toward the closest interger.
* For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f)
* while remainder(-3.8f, 2.f) returns 0.2f (-3.8f - -2.f * 2.f).
*/
extern float __attribute__((const, overloadable))
remainder(float numerator, float denominator);
extern float2 __attribute__((const, overloadable))
remainder(float2 numerator, float2 denominator);
extern float3 __attribute__((const, overloadable))
remainder(float3 numerator, float3 denominator);
extern float4 __attribute__((const, overloadable))
remainder(float4 numerator, float4 denominator);
/*
* remquo: Remainder and quotient of a division
*
* Returns the quotient and the remainder of (numerator / denominator).
*
* Only the sign and lowest three bits of the quotient are guaranteed to be accurate.
*
* This function is useful for implementing periodic functions. The low three bits of the quotient gives the quadrant and the remainder the distance within the quadrant. For example, an implementation of sin(x) could call remquo(x, PI / 2.f, &quadrant) to reduce very large value of x to something within a limited range.
*
* Example: remquo(-23.5f, 8.f, &quot) sets the lowest three bits of quot to 3 and the sign negative. It returns 0.5f.
*
* Parameters:
* numerator: The numerator.
* denominator: The denominator.
* quotient: *quotient will be set to the integer quotient.
*
* Returns: The remainder, precise only for the low three bits.
*/
extern float __attribute__((overloadable))
remquo(float numerator, float denominator, int* quotient);
extern float2 __attribute__((overloadable))
remquo(float2 numerator, float2 denominator, int2* quotient);
extern float3 __attribute__((overloadable))
remquo(float3 numerator, float3 denominator, int3* quotient);
extern float4 __attribute__((overloadable))
remquo(float4 numerator, float4 denominator, int4* quotient);
/*
* rint: Round to even
*
* Rounds to the nearest integral value.
*
* rint() rounds half values to even. For example, rint(0.5f) returns 0.f and rint(1.5f) returns 2.f. Similarly, rint(-0.5f) returns -0.f and rint(-1.5f) returns -2.f.
*
* round() is similar but rounds away from zero. trunc() truncates the decimal fraction.
*/
extern float __attribute__((const, overloadable))
rint(float v);
extern float2 __attribute__((const, overloadable))
rint(float2 v);
extern float3 __attribute__((const, overloadable))
rint(float3 v);
extern float4 __attribute__((const, overloadable))
rint(float4 v);
/*
* rootn: Nth root
*
* Compute the Nth root of a value.
*
* See also native_rootn().
*/
extern float __attribute__((const, overloadable))
rootn(float v, int n);
extern float2 __attribute__((const, overloadable))
rootn(float2 v, int2 n);
extern float3 __attribute__((const, overloadable))
rootn(float3 v, int3 n);
extern float4 __attribute__((const, overloadable))
rootn(float4 v, int4 n);
/*
* round: Round away from zero
*
* Round to the nearest integral value.
*
* round() rounds half values away from zero. For example, round(0.5f) returns 1.f and round(1.5f) returns 2.f. Similarly, round(-0.5f) returns -1.f and round(-1.5f) returns -2.f.
*
* rint() is similar but rounds half values toward even. trunc() truncates the decimal fraction.
*/
extern float __attribute__((const, overloadable))
round(float v);
extern float2 __attribute__((const, overloadable))
round(float2 v);
extern float3 __attribute__((const, overloadable))
round(float3 v);
extern float4 __attribute__((const, overloadable))
round(float4 v);
/*
* rsqrt: Reciprocal of a square root
*
* Returns (1 / sqrt(v)).
*
* See also half_rsqrt(), native_rsqrt().
*/
extern float __attribute__((const, overloadable))
rsqrt(float v);
extern float2 __attribute__((const, overloadable))
rsqrt(float2 v);
extern float3 __attribute__((const, overloadable))
rsqrt(float3 v);
extern float4 __attribute__((const, overloadable))
rsqrt(float4 v);
/*
* sign: Sign of a value
*
* Returns the sign of a value.
*
* if (v < 0) return -1.f;
* else if (v > 0) return 1.f;
* else return 0.f;
*/
extern float __attribute__((const, overloadable))
sign(float v);
extern float2 __attribute__((const, overloadable))
sign(float2 v);
extern float3 __attribute__((const, overloadable))
sign(float3 v);
extern float4 __attribute__((const, overloadable))
sign(float4 v);
/*
* sin: Sine
*
* Returns the sine of an angle measured in radians.
*
* See also native_sin().
*/
extern float __attribute__((const, overloadable))
sin(float v);
extern float2 __attribute__((const, overloadable))
sin(float2 v);
extern float3 __attribute__((const, overloadable))
sin(float3 v);
extern float4 __attribute__((const, overloadable))
sin(float4 v);
/*
* sincos: Sine and cosine
*
* Returns the sine and cosine of a value.
*
* See also native_sincos().
*
* Parameters:
* v: The incoming value in radians
* cos: *cos will be set to the cosine value.
*
* Returns: sine of v
*/
extern float __attribute__((overloadable))
sincos(float v, float* cos);
extern float2 __attribute__((overloadable))
sincos(float2 v, float2* cos);
extern float3 __attribute__((overloadable))
sincos(float3 v, float3* cos);
extern float4 __attribute__((overloadable))
sincos(float4 v, float4* cos);
/*
* sinh: Hyperbolic sine
*
* Returns the hyperbolic sine of v, where v is measured in radians.
*
* See also native_sinh().
*/
extern float __attribute__((const, overloadable))
sinh(float v);
extern float2 __attribute__((const, overloadable))
sinh(float2 v);
extern float3 __attribute__((const, overloadable))
sinh(float3 v);
extern float4 __attribute__((const, overloadable))
sinh(float4 v);
/*
* sinpi: Sine of a number multiplied by pi
*
* Returns the sine of (v * pi), where (v * pi) is measured in radians.
*
* To get the sine of a value measured in degrees, call sinpi(v / 180.f).
*
* See also native_sinpi().
*/
extern float __attribute__((const, overloadable))
sinpi(float v);
extern float2 __attribute__((const, overloadable))
sinpi(float2 v);
extern float3 __attribute__((const, overloadable))
sinpi(float3 v);
extern float4 __attribute__((const, overloadable))
sinpi(float4 v);
/*
* sqrt: Square root
*
* Returns the square root of a value.
*
* See also half_sqrt(), native_sqrt().
*/
extern float __attribute__((const, overloadable))
sqrt(float v);
extern float2 __attribute__((const, overloadable))
sqrt(float2 v);
extern float3 __attribute__((const, overloadable))
sqrt(float3 v);
extern float4 __attribute__((const, overloadable))
sqrt(float4 v);
/*
* step: 0 if less than a value, 0 otherwise
*
* Returns 0.f if v < edge, 1.f otherwise.
*
* This can be useful to create conditional computations without using loops and branching instructions. For example, instead of computing (a[i] < b[i]) ? 0.f : atan2(a[i], b[i]) for the corresponding elements of a vector, you could instead use step(a, b) * atan2(a, b).
*/
extern float __attribute__((const, overloadable))
step(float edge, float v);
extern float2 __attribute__((const, overloadable))
step(float2 edge, float2 v);
extern float3 __attribute__((const, overloadable))
step(float3 edge, float3 v);
extern float4 __attribute__((const, overloadable))
step(float4 edge, float4 v);
extern float2 __attribute__((const, overloadable))
step(float2 edge, float v);
extern float3 __attribute__((const, overloadable))
step(float3 edge, float v);
extern float4 __attribute__((const, overloadable))
step(float4 edge, float v);
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
step(float edge, float2 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
step(float edge, float3 v);
#endif
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
step(float edge, float4 v);
#endif
/*
* tan: Tangent
*
* Returns the tangent of an angle measured in radians.
*
* See also native_tan().
*/
extern float __attribute__((const, overloadable))
tan(float v);
extern float2 __attribute__((const, overloadable))
tan(float2 v);
extern float3 __attribute__((const, overloadable))
tan(float3 v);
extern float4 __attribute__((const, overloadable))
tan(float4 v);
/*
* tanh: Hyperbolic tangent
*
* Returns the hyperbolic tangent of a value.
*
* See also native_tanh().
*/
extern float __attribute__((const, overloadable))
tanh(float v);
extern float2 __attribute__((const, overloadable))
tanh(float2 v);
extern float3 __attribute__((const, overloadable))
tanh(float3 v);
extern float4 __attribute__((const, overloadable))
tanh(float4 v);
/*
* tanpi: Tangent of a number multiplied by pi
*
* Returns the tangent of (v * pi), where (v * pi) is measured in radians.
*
* To get the tangent of a value measured in degrees, call tanpi(v / 180.f).
*
* See also native_tanpi().
*/
extern float __attribute__((const, overloadable))
tanpi(float v);
extern float2 __attribute__((const, overloadable))
tanpi(float2 v);
extern float3 __attribute__((const, overloadable))
tanpi(float3 v);
extern float4 __attribute__((const, overloadable))
tanpi(float4 v);
/*
* tgamma: Gamma function
*
* Returns the gamma function of a value.
*
* See also lgamma().
*/
extern float __attribute__((const, overloadable))
tgamma(float v);
extern float2 __attribute__((const, overloadable))
tgamma(float2 v);
extern float3 __attribute__((const, overloadable))
tgamma(float3 v);
extern float4 __attribute__((const, overloadable))
tgamma(float4 v);
/*
* trunc: Truncates a floating point
*
* Rounds to integral using truncation.
*
* For example, trunc(1.7f) returns 1.f and trunc(-1.7f) returns -1.f.
*
* See rint() and round() for other rounding options.
*/
extern float __attribute__((const, overloadable))
trunc(float v);
extern float2 __attribute__((const, overloadable))
trunc(float2 v);
extern float3 __attribute__((const, overloadable))
trunc(float3 v);
extern float4 __attribute__((const, overloadable))
trunc(float4 v);
/*
* rsClamp: Restrain a value to a range
*
* DEPRECATED. Do not use.
*
* Clamp a value between low and high.
*
* Parameters:
* amount: The value to clamp
* low: Lower bound
* high: Upper bound
*/
extern char __attribute__((const, always_inline, overloadable))
rsClamp(char amount, char low, char high);
extern uchar __attribute__((const, always_inline, overloadable))
rsClamp(uchar amount, uchar low, uchar high);
extern short __attribute__((const, always_inline, overloadable))
rsClamp(short amount, short low, short high);
extern ushort __attribute__((const, always_inline, overloadable))
rsClamp(ushort amount, ushort low, ushort high);
extern int __attribute__((const, always_inline, overloadable))
rsClamp(int amount, int low, int high);
extern uint __attribute__((const, always_inline, overloadable))
rsClamp(uint amount, uint low, uint high);
/*
* rsFrac: Returns the fractional part of a float
*
* DEPRECATED. Do not use.
*
* Returns the fractional part of a float
*/
extern float __attribute__((const, overloadable))
rsFrac(float v);
/*
* rsRand: Pseudo-random number
*
* Return a random value between 0 (or min_value) and max_malue.
*/
extern int __attribute__((overloadable))
rsRand(int max_value);
extern int __attribute__((overloadable))
rsRand(int min_value, int max_value);
extern float __attribute__((overloadable))
rsRand(float max_value);
extern float __attribute__((overloadable))
rsRand(float min_value, float max_value);
#endif // RENDERSCRIPT_RS_MATH_RSH