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