rs_vector_math.rsh revision 586539cd7d8b1e92cd6c9c31220be56969482ad6
1be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 2be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Copyright (C) 2015 The Android Open Source Project 3be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 4be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Licensed under the Apache License, Version 2.0 (the "License"); 5be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * you may not use this file except in compliance with the License. 6be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * You may obtain a copy of the License at 7be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 8be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * http://www.apache.org/licenses/LICENSE-2.0 9be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 10be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Unless required by applicable law or agreed to in writing, software 11be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * distributed under the License is distributed on an "AS IS" BASIS, 12be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See the License for the specific language governing permissions and 14be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * limitations under the License. 15be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 16be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 174a73004df5231d188c41267fee17c566ae7c3631Jean-Luc Brouillet// Don't edit this file! It is auto-generated by frameworks/rs/api/generate.sh. 18be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 19be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 2020b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * rs_vector_math.rsh: Vector Math Functions 2120b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * 226386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * These functions interpret the input arguments as representation of vectors in 236386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * n-dimensional space. 2420b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * 256386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * The precision of the mathematical operations on 32 bit floats is affected by the pragmas 266386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * rs_fp_relaxed and rs_fp_full. See Mathematical Constants and Functions for details. 2720b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * 286386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * Different precision/speed tradeoffs can be achieved by using variants of the common math 296386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * functions. Functions with a name starting with 306386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * - native_: May have custom hardware implementations with weaker precision. Additionally, 316386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and 326386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * infinity input may not be handled correctly. 336386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * - fast_: May perform internal computations using 16 bit floats. Additionally, subnormal 346386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * values may be flushed to zero, and rounding towards zero may be used. 35be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 36be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 374a73004df5231d188c41267fee17c566ae7c3631Jean-Luc Brouillet 38be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#ifndef RENDERSCRIPT_RS_VECTOR_MATH_RSH 39be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#define RENDERSCRIPT_RS_VECTOR_MATH_RSH 40be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 41be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 42be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * cross: Cross product of two vectors 43be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 44be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the cross product of two vectors. 45be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 46be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float3 __attribute__((const, overloadable)) 47be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet cross(float3 left_vector, float3 right_vector); 48be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 49be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float4 __attribute__((const, overloadable)) 50be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet cross(float4 left_vector, float4 right_vector); 51be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 52586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 4294967295) && (RS_VERSION <= 4294967295)) 53586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half3 __attribute__((const, overloadable)) 54586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar cross(half3 left_vector, half3 right_vector); 55586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 56586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 57586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 4294967295) && (RS_VERSION <= 4294967295)) 58586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half4 __attribute__((const, overloadable)) 59586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar cross(half4 left_vector, half4 right_vector); 60586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 61586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 62be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 63be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * distance: Distance between two points 64be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 65be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Compute the distance between two points. 66be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 67be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also fast_distance(), native_distance(). 68be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 69be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 70be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distance(float left_vector, float right_vector); 71be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 72be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 73be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distance(float2 left_vector, float2 right_vector); 74be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 75be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 76be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distance(float3 left_vector, float3 right_vector); 77be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 78be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 79be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet distance(float4 left_vector, float4 right_vector); 80be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 81586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 4294967295) && (RS_VERSION <= 4294967295)) 82586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 83586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar distance(half left_vector, half right_vector); 84586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 85586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 86586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 4294967295) && (RS_VERSION <= 4294967295)) 87586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 88586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar distance(half2 left_vector, half2 right_vector); 89586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 90586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 91586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 4294967295) && (RS_VERSION <= 4294967295)) 92586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 93586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar distance(half3 left_vector, half3 right_vector); 94586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 95586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 96586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 4294967295) && (RS_VERSION <= 4294967295)) 97586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 98586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar distance(half4 left_vector, half4 right_vector); 99586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 100586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 101be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 102be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * dot: Dot product of two vectors 103be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 104be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the dot product of two vectors. 105be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 106be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 107be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet dot(float left_vector, float right_vector); 108be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 109be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 110be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet dot(float2 left_vector, float2 right_vector); 111be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 112be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 113be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet dot(float3 left_vector, float3 right_vector); 114be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 115be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 116be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet dot(float4 left_vector, float4 right_vector); 117be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 118586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 4294967295) && (RS_VERSION <= 4294967295)) 119586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 120586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar dot(half left_vector, half right_vector); 121586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 122586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 123586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 4294967295) && (RS_VERSION <= 4294967295)) 124586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 125586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar dot(half2 left_vector, half2 right_vector); 126586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 127586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 128586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 4294967295) && (RS_VERSION <= 4294967295)) 129586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 130586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar dot(half3 left_vector, half3 right_vector); 131586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 132586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 133586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 4294967295) && (RS_VERSION <= 4294967295)) 134586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 135586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar dot(half4 left_vector, half4 right_vector); 136586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 137586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 138be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 139be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * fast_distance: Approximate distance between two points 140be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 141be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the approximate distance between two points. 142be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 1436386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * The precision is what would be expected from doing the computation using 16 bit floating 1446386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * point values. 145be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 146be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also distance(), native_distance(). 147be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 148be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 149be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 150be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_distance(float left_vector, float right_vector); 151be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 152be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 153be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 154be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 155be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_distance(float2 left_vector, float2 right_vector); 156be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 157be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 158be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 159be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 160be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_distance(float3 left_vector, float3 right_vector); 161be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 162be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 163be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 164be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 165be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_distance(float4 left_vector, float4 right_vector); 166be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 167be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 168be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 169be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * fast_length: Approximate length of a vector 170be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 171be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the approximate length of a vector. 172be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 1736386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * The precision is what would be expected from doing the computation using 16 bit floating 1746386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * point values. 175be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 176be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also length(), native_length(). 177be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 178be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 179be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 180be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_length(float v); 181be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 182be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 183be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 184be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 185be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_length(float2 v); 186be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 187be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 188be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 189be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 190be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_length(float3 v); 191be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 192be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 193be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 194be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 195be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_length(float4 v); 196be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 197be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 198be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 199be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * fast_normalize: Approximate normalized vector 200be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 201be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Approximately normalizes a vector. 202be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 2036386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for 2046386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * positive values. 205be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 2066386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * The precision is what would be expected from doing the computation using 16 bit floating 2076386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * point values. 208be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 209be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also normalize(), native_normalize(). 210be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 211be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 212be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 213be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_normalize(float v); 214be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 215be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 216be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 217be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float2 __attribute__((const, overloadable)) 218be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_normalize(float2 v); 219be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 220be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 221be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 222be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float3 __attribute__((const, overloadable)) 223be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_normalize(float3 v); 224be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 225be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 226be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17)) 227be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float4 __attribute__((const, overloadable)) 228be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet fast_normalize(float4 v); 229be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 230be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 231be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 232be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * length: Length of a vector 233be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 234be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the length of a vector. 235be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 236be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also fast_length(), native_length(). 237be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 238be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 239be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet length(float v); 240be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 241be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 242be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet length(float2 v); 243be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 244be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 245be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet length(float3 v); 246be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 247be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 248be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet length(float4 v); 249be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 250be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 251be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * native_distance: Approximate distance between two points 252be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 253be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the approximate distance between two points. 254be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 255be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also distance(), fast_distance(). 256be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 257be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 258be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 259be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_distance(float left_vector, float right_vector); 260be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 261be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 262be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 263be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 264be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_distance(float2 left_vector, float2 right_vector); 265be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 266be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 267be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 268be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 269be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_distance(float3 left_vector, float3 right_vector); 270be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 271be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 272be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 273be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 274be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_distance(float4 left_vector, float4 right_vector); 275be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 276be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 277be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 278be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * native_length: Approximate length of a vector 279be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 280be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Compute the approximate length of a vector. 281be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 282be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also length(), fast_length(). 283be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 284be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 285be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 286be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_length(float v); 287be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 288be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 289be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 290be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 291be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_length(float2 v); 292be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 293be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 294be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 295be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 296be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_length(float3 v); 297be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 298be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 299be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 300be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 301be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_length(float4 v); 302be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 303be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 304be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 305be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * native_normalize: Approximately normalize a vector 306be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 307be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Approximately normalizes a vector. 308be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 309be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also normalize(), fast_normalize(). 310be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 311be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 312be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 313be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_normalize(float v); 314be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 315be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 316be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 317be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float2 __attribute__((const, overloadable)) 318be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_normalize(float2 v); 319be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 320be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 321be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 322be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float3 __attribute__((const, overloadable)) 323be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_normalize(float3 v); 324be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 325be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 326be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 327be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float4 __attribute__((const, overloadable)) 328be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_normalize(float4 v); 329be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 330be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 331be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 332be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * normalize: Normalize a vector 333be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 334be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Normalize a vector. 335be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 3366386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for 3376386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * positive values. 338be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 339be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also fast_normalize(), native_normalize(). 340be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 341be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 342be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet normalize(float v); 343be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 344be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float2 __attribute__((const, overloadable)) 345be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet normalize(float2 v); 346be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 347be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float3 __attribute__((const, overloadable)) 348be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet normalize(float3 v); 349be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 350be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float4 __attribute__((const, overloadable)) 351be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet normalize(float4 v); 352be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 353be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif // RENDERSCRIPT_RS_VECTOR_MATH_RSH 354