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