diff options
Diffstat (limited to 'renderscript/include/rs_vector_math.rsh')
-rw-r--r-- | renderscript/include/rs_vector_math.rsh | 453 |
1 files changed, 453 insertions, 0 deletions
diff --git a/renderscript/include/rs_vector_math.rsh b/renderscript/include/rs_vector_math.rsh new file mode 100644 index 0000000..2f5e8e7 --- /dev/null +++ b/renderscript/include/rs_vector_math.rsh @@ -0,0 +1,453 @@ +/* + * Copyright (C) 2016 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_vector_math.rsh: Vector Math Functions + * + * These functions interpret the input arguments as representation of vectors in + * n-dimensional space. + * + * The precision of the mathematical operations on 32 bit floats is affected by the pragmas + * rs_fp_relaxed and rs_fp_full. See Mathematical Constants and Functions for details. + * + * Different precision/speed tradeoffs can be achieved by using variants of the common math + * functions. Functions with a name starting with + * - native_: May have custom hardware implementations with weaker precision. Additionally, + * subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and + * infinity input may not be handled correctly. + * - fast_: May perform internal computations using 16 bit floats. Additionally, subnormal + * values may be flushed to zero, and rounding towards zero may be used. + * + */ + +#ifndef RENDERSCRIPT_RS_VECTOR_MATH_RSH +#define RENDERSCRIPT_RS_VECTOR_MATH_RSH + +/* + * cross: Cross product of two vectors + * + * Computes the cross product of two vectors. + */ +extern float3 __attribute__((const, overloadable)) + cross(float3 left_vector, float3 right_vector); + +extern float4 __attribute__((const, overloadable)) + cross(float4 left_vector, float4 right_vector); + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half3 __attribute__((const, overloadable)) + cross(half3 left_vector, half3 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half4 __attribute__((const, overloadable)) + cross(half4 left_vector, half4 right_vector); +#endif + +/* + * distance: Distance between two points + * + * Compute the distance between two points. + * + * See also fast_distance(), native_distance(). + */ +extern float __attribute__((const, overloadable)) + distance(float left_vector, float right_vector); + +extern float __attribute__((const, overloadable)) + distance(float2 left_vector, float2 right_vector); + +extern float __attribute__((const, overloadable)) + distance(float3 left_vector, float3 right_vector); + +extern float __attribute__((const, overloadable)) + distance(float4 left_vector, float4 right_vector); + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + distance(half left_vector, half right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + distance(half2 left_vector, half2 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + distance(half3 left_vector, half3 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + distance(half4 left_vector, half4 right_vector); +#endif + +/* + * dot: Dot product of two vectors + * + * Computes the dot product of two vectors. + */ +extern float __attribute__((const, overloadable)) + dot(float left_vector, float right_vector); + +extern float __attribute__((const, overloadable)) + dot(float2 left_vector, float2 right_vector); + +extern float __attribute__((const, overloadable)) + dot(float3 left_vector, float3 right_vector); + +extern float __attribute__((const, overloadable)) + dot(float4 left_vector, float4 right_vector); + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + dot(half left_vector, half right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + dot(half2 left_vector, half2 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + dot(half3 left_vector, half3 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + dot(half4 left_vector, half4 right_vector); +#endif + +/* + * fast_distance: Approximate distance between two points + * + * Computes the approximate distance between two points. + * + * The precision is what would be expected from doing the computation using 16 bit floating + * point values. + * + * See also distance(), native_distance(). + */ +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float __attribute__((const, overloadable)) + fast_distance(float left_vector, float right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float __attribute__((const, overloadable)) + fast_distance(float2 left_vector, float2 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float __attribute__((const, overloadable)) + fast_distance(float3 left_vector, float3 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float __attribute__((const, overloadable)) + fast_distance(float4 left_vector, float4 right_vector); +#endif + +/* + * fast_length: Approximate length of a vector + * + * Computes the approximate length of a vector. + * + * The precision is what would be expected from doing the computation using 16 bit floating + * point values. + * + * See also length(), native_length(). + */ +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float __attribute__((const, overloadable)) + fast_length(float v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float __attribute__((const, overloadable)) + fast_length(float2 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float __attribute__((const, overloadable)) + fast_length(float3 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float __attribute__((const, overloadable)) + fast_length(float4 v); +#endif + +/* + * fast_normalize: Approximate normalized vector + * + * Approximately normalizes a vector. + * + * For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for + * positive values. + * + * The precision is what would be expected from doing the computation using 16 bit floating + * point values. + * + * See also normalize(), native_normalize(). + */ +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float __attribute__((const, overloadable)) + fast_normalize(float v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float2 __attribute__((const, overloadable)) + fast_normalize(float2 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float3 __attribute__((const, overloadable)) + fast_normalize(float3 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 17)) +extern float4 __attribute__((const, overloadable)) + fast_normalize(float4 v); +#endif + +/* + * length: Length of a vector + * + * Computes the length of a vector. + * + * See also fast_length(), native_length(). + */ +extern float __attribute__((const, overloadable)) + length(float v); + +extern float __attribute__((const, overloadable)) + length(float2 v); + +extern float __attribute__((const, overloadable)) + length(float3 v); + +extern float __attribute__((const, overloadable)) + length(float4 v); + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + length(half v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + length(half2 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + length(half3 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + length(half4 v); +#endif + +/* + * native_distance: Approximate distance between two points + * + * Computes the approximate distance between two points. + * + * See also distance(), fast_distance(). + */ +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float __attribute__((const, overloadable)) + native_distance(float left_vector, float right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float __attribute__((const, overloadable)) + native_distance(float2 left_vector, float2 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float __attribute__((const, overloadable)) + native_distance(float3 left_vector, float3 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float __attribute__((const, overloadable)) + native_distance(float4 left_vector, float4 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + native_distance(half left_vector, half right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + native_distance(half2 left_vector, half2 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + native_distance(half3 left_vector, half3 right_vector); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + native_distance(half4 left_vector, half4 right_vector); +#endif + +/* + * native_length: Approximate length of a vector + * + * Compute the approximate length of a vector. + * + * See also length(), fast_length(). + */ +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float __attribute__((const, overloadable)) + native_length(float v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float __attribute__((const, overloadable)) + native_length(float2 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float __attribute__((const, overloadable)) + native_length(float3 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float __attribute__((const, overloadable)) + native_length(float4 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + native_length(half v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + native_length(half2 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + native_length(half3 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + native_length(half4 v); +#endif + +/* + * native_normalize: Approximately normalize a vector + * + * Approximately normalizes a vector. + * + * See also normalize(), fast_normalize(). + */ +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float __attribute__((const, overloadable)) + native_normalize(float v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float2 __attribute__((const, overloadable)) + native_normalize(float2 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float3 __attribute__((const, overloadable)) + native_normalize(float3 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 21)) +extern float4 __attribute__((const, overloadable)) + native_normalize(float4 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + native_normalize(half v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half2 __attribute__((const, overloadable)) + native_normalize(half2 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half3 __attribute__((const, overloadable)) + native_normalize(half3 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half4 __attribute__((const, overloadable)) + native_normalize(half4 v); +#endif + +/* + * normalize: Normalize a vector + * + * Normalize a vector. + * + * For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for + * positive values. + * + * See also fast_normalize(), native_normalize(). + */ +extern float __attribute__((const, overloadable)) + normalize(float v); + +extern float2 __attribute__((const, overloadable)) + normalize(float2 v); + +extern float3 __attribute__((const, overloadable)) + normalize(float3 v); + +extern float4 __attribute__((const, overloadable)) + normalize(float4 v); + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half __attribute__((const, overloadable)) + normalize(half v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half2 __attribute__((const, overloadable)) + normalize(half2 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half3 __attribute__((const, overloadable)) + normalize(half3 v); +#endif + +#if (defined(RS_VERSION) && (RS_VERSION >= 24)) +extern half4 __attribute__((const, overloadable)) + normalize(half4 v); +#endif + +#endif // RENDERSCRIPT_RS_VECTOR_MATH_RSH |