rs_vector_math.rsh revision 39da63d134c99569e9efbe6eb3b4cf92a4edfe06
1be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 2291330fbaf7486a1cea33de7dd26c18e57c71391Stephen Hines * Copyright (C) 2016 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 52d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 53586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half3 __attribute__((const, overloadable)) 54586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar cross(half3 left_vector, half3 right_vector); 55586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 56586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 57d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 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 81d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 82586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 83586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar distance(half left_vector, half right_vector); 84586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 85586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 86d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 87586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 88586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar distance(half2 left_vector, half2 right_vector); 89586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 90586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 91d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 92586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 93586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar distance(half3 left_vector, half3 right_vector); 94586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 95586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 96d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 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 118d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 119586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 120586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar dot(half left_vector, half right_vector); 121586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 122586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 123d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 124586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 125586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar dot(half2 left_vector, half2 right_vector); 126586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 127586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 128d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 129586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 130586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar dot(half3 left_vector, half3 right_vector); 131586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar#endif 132586539cd7d8b1e92cd6c9c31220be56969482ad6Pirama Arumuga Nainar 133d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 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 250d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2510cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half __attribute__((const, overloadable)) 2520cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar length(half v); 2530cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 2540cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 255d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2560cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half __attribute__((const, overloadable)) 2570cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar length(half2 v); 2580cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 2590cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 260d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2610cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half __attribute__((const, overloadable)) 2620cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar length(half3 v); 2630cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 2640cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 265d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2660cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half __attribute__((const, overloadable)) 2670cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar length(half4 v); 2680cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 2690cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 270be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 271be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * native_distance: Approximate distance between two points 272be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 273be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the approximate distance between two points. 274be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 275be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also distance(), fast_distance(). 276be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 277be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 278be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 279be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_distance(float left_vector, float right_vector); 280be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 281be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 282be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 283be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 284be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_distance(float2 left_vector, float2 right_vector); 285be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 286be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 287be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 288be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 289be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_distance(float3 left_vector, float3 right_vector); 290be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 291be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 292be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 293be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 294be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_distance(float4 left_vector, float4 right_vector); 295be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 296be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 29739da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 29839da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 29939da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar native_distance(half left_vector, half right_vector); 30039da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar#endif 30139da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar 30239da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 30339da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 30439da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar native_distance(half2 left_vector, half2 right_vector); 30539da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar#endif 30639da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar 30739da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 30839da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 30939da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar native_distance(half3 left_vector, half3 right_vector); 31039da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar#endif 31139da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar 31239da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 31339da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainarextern half __attribute__((const, overloadable)) 31439da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar native_distance(half4 left_vector, half4 right_vector); 31539da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar#endif 31639da63d134c99569e9efbe6eb3b4cf92a4edfe06Pirama Arumuga Nainar 317be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 318be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * native_length: Approximate length of a vector 319be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 320be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Compute the approximate length of a vector. 321be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 322be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also length(), fast_length(). 323be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 324be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 325be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 326be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_length(float v); 327be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 328be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 329be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 330be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 331be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_length(float2 v); 332be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 333be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 334be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 335be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 336be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_length(float3 v); 337be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 338be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 339be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 340be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 341be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_length(float4 v); 342be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 343be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 344d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3450cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half __attribute__((const, overloadable)) 3460cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar native_length(half v); 3470cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 3480cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 349d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3500cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half __attribute__((const, overloadable)) 3510cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar native_length(half2 v); 3520cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 3530cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 354d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3550cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half __attribute__((const, overloadable)) 3560cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar native_length(half3 v); 3570cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 3580cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 359d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3600cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half __attribute__((const, overloadable)) 3610cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar native_length(half4 v); 3620cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 3630cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 364be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 365be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * native_normalize: Approximately normalize a vector 366be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 367be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Approximately normalizes a vector. 368be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 369be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also normalize(), fast_normalize(). 370be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 371be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 372be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 373be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_normalize(float v); 374be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 375be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 376be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 377be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float2 __attribute__((const, overloadable)) 378be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_normalize(float2 v); 379be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 380be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 381be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 382be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float3 __attribute__((const, overloadable)) 383be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_normalize(float3 v); 384be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 385be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 386be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21)) 387be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float4 __attribute__((const, overloadable)) 388be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet native_normalize(float4 v); 389be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif 390be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 391d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3920cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half __attribute__((const, overloadable)) 3930cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar native_normalize(half v); 3940cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 3950cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 396d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3970cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half2 __attribute__((const, overloadable)) 3980cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar native_normalize(half2 v); 3990cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 4000cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 401d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4020cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half3 __attribute__((const, overloadable)) 4030cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar native_normalize(half3 v); 4040cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 4050cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 406d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4070cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half4 __attribute__((const, overloadable)) 4080cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar native_normalize(half4 v); 4090cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 4100cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 411be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/* 412be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * normalize: Normalize a vector 413be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 414be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Normalize a vector. 415be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 4166386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for 4176386ceb3bf25e442513224aaa45691dfe49562d9Jean-Luc Brouillet * positive values. 418be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * 419be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also fast_normalize(), native_normalize(). 420be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */ 421be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable)) 422be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet normalize(float v); 423be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 424be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float2 __attribute__((const, overloadable)) 425be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet normalize(float2 v); 426be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 427be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float3 __attribute__((const, overloadable)) 428be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet normalize(float3 v); 429be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 430be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float4 __attribute__((const, overloadable)) 431be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet normalize(float4 v); 432be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet 433d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4340cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half __attribute__((const, overloadable)) 4350cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar normalize(half v); 4360cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 4370cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 438d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4390cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half2 __attribute__((const, overloadable)) 4400cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar normalize(half2 v); 4410cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 4420cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 443d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4440cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half3 __attribute__((const, overloadable)) 4450cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar normalize(half3 v); 4460cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 4470cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 448d46cf8ecf171e3cb27a394f6db8dc4fbdf6272b3Pirama Arumuga Nainar#if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4490cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainarextern half4 __attribute__((const, overloadable)) 4500cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar normalize(half4 v); 4510cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar#endif 4520cca35300a55db9f22d45c31fd0d4e9eb840a91cPirama Arumuga Nainar 453be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif // RENDERSCRIPT_RS_VECTOR_MATH_RSH 454