rs_vector_math.rsh revision 20b27d602a4778ed50a83df2147416a35b7c92be
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 *
2220b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * These functions interpret the input arguments as representation of vectors in n-dimensional space.
2320b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet *
2420b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * The precision of the mathematical operations is affected by the pragmas
2520b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * rs_fp_relaxed and rs_fp_full.
2620b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet *
2720b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * Different precision/speed tradeoffs can be achieved by using three variants
2820b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * of common math functions.  Functions with a name starting with
2920b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * - native_ may have custom hardware implementations with weaker precision,
3020b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * - half_ may perform internal computations using 16 bit floats, and
3120b27d602a4778ed50a83df2147416a35b7c92beJean-Luc Brouillet * - fast_ are n-dimensional space computations that may use 16 bit floats.
32be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
33be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
344a73004df5231d188c41267fee17c566ae7c3631Jean-Luc Brouillet
35be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#ifndef RENDERSCRIPT_RS_VECTOR_MATH_RSH
36be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#define RENDERSCRIPT_RS_VECTOR_MATH_RSH
37be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
38be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/*
39be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * cross: Cross product of two vectors
40be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
41be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the cross product of two vectors.
42be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
43be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float3 __attribute__((const, overloadable))
44be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    cross(float3 left_vector, float3 right_vector);
45be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
46be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float4 __attribute__((const, overloadable))
47be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    cross(float4 left_vector, float4 right_vector);
48be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
49be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/*
50be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * distance: Distance between two points
51be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
52be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Compute the distance between two points.
53be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
54be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also fast_distance(), native_distance().
55be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
56be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
57be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    distance(float left_vector, float right_vector);
58be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
59be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
60be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    distance(float2 left_vector, float2 right_vector);
61be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
62be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
63be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    distance(float3 left_vector, float3 right_vector);
64be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
65be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
66be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    distance(float4 left_vector, float4 right_vector);
67be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
68be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/*
69be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * dot: Dot product of two vectors
70be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
71be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the dot product of two vectors.
72be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
73be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
74be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    dot(float left_vector, float right_vector);
75be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
76be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
77be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    dot(float2 left_vector, float2 right_vector);
78be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
79be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
80be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    dot(float3 left_vector, float3 right_vector);
81be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
82be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
83be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    dot(float4 left_vector, float4 right_vector);
84be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
85be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/*
86be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * fast_distance: Approximate distance between two points
87be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
88be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the approximate distance between two points.
89be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
90be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * The precision is what would be expected from doing the computation using 16 bit floating point values.
91be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
92be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also distance(), native_distance().
93be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
94be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
95be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
96be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_distance(float left_vector, float right_vector);
97be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
98be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
99be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
100be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
101be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_distance(float2 left_vector, float2 right_vector);
102be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
103be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
104be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
105be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
106be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_distance(float3 left_vector, float3 right_vector);
107be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
108be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
109be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
110be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
111be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_distance(float4 left_vector, float4 right_vector);
112be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
113be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
114be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/*
115be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * fast_length: Approximate length of a vector
116be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
117be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the approximate length of a vector.
118be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
119be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * The precision is what would be expected from doing the computation using 16 bit floating point values.
120be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
121be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also length(), native_length().
122be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
123be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
124be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
125be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_length(float v);
126be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
127be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
128be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
129be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
130be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_length(float2 v);
131be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
132be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
133be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
134be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
135be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_length(float3 v);
136be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
137be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
138be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
139be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
140be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_length(float4 v);
141be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
142be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
143be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/*
144be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * fast_normalize: Approximate normalized vector
145be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
146be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Approximately normalizes a vector.
147be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
148be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for positive values.
149be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
150be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * The precision is what would be expected from doing the computation using 16 bit floating point values.
151be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
152be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also normalize(), native_normalize().
153be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
154be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
155be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
156be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_normalize(float v);
157be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
158be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
159be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
160be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float2 __attribute__((const, overloadable))
161be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_normalize(float2 v);
162be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
163be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
164be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
165be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float3 __attribute__((const, overloadable))
166be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_normalize(float3 v);
167be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
168be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
169be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 17))
170be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float4 __attribute__((const, overloadable))
171be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    fast_normalize(float4 v);
172be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
173be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
174be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/*
175be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * length: Length of a vector
176be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
177be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the length of a vector.
178be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
179be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also fast_length(), native_length().
180be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
181be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
182be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    length(float v);
183be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
184be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
185be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    length(float2 v);
186be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
187be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
188be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    length(float3 v);
189be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
190be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
191be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    length(float4 v);
192be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
193be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/*
194be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * native_distance: Approximate distance between two points
195be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
196be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Computes the approximate distance between two points.
197be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
198be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also distance(), fast_distance().
199be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
200be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
201be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
202be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_distance(float left_vector, float right_vector);
203be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
204be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
205be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
206be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
207be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_distance(float2 left_vector, float2 right_vector);
208be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
209be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
210be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
211be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
212be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_distance(float3 left_vector, float3 right_vector);
213be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
214be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
215be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
216be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
217be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_distance(float4 left_vector, float4 right_vector);
218be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
219be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
220be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/*
221be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * native_length: Approximate length of a vector
222be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
223be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Compute the approximate length of a vector.
224be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
225be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also length(), fast_length().
226be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
227be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
228be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
229be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_length(float v);
230be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
231be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
232be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
233be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
234be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_length(float2 v);
235be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
236be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
237be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
238be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
239be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_length(float3 v);
240be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
241be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
242be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
243be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
244be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_length(float4 v);
245be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
246be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
247be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/*
248be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * native_normalize: Approximately normalize a vector
249be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
250be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Approximately normalizes a vector.
251be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
252be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also normalize(), fast_normalize().
253be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
254be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
255be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
256be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_normalize(float v);
257be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
258be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
259be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
260be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float2 __attribute__((const, overloadable))
261be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_normalize(float2 v);
262be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
263be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
264be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
265be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float3 __attribute__((const, overloadable))
266be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_normalize(float3 v);
267be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
268be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
269be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#if (defined(RS_VERSION) && (RS_VERSION >= 21))
270be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float4 __attribute__((const, overloadable))
271be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    native_normalize(float4 v);
272be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif
273be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
274be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet/*
275be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * normalize: Normalize a vector
276be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
277be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * Normalize a vector.
278be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
279be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for positive values.
280be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet *
281be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet * See also fast_normalize(), native_normalize().
282be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet */
283be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float __attribute__((const, overloadable))
284be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    normalize(float v);
285be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
286be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float2 __attribute__((const, overloadable))
287be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    normalize(float2 v);
288be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
289be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float3 __attribute__((const, overloadable))
290be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    normalize(float3 v);
291be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
292be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouilletextern float4 __attribute__((const, overloadable))
293be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet    normalize(float4 v);
294be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet
295be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#endif // RENDERSCRIPT_RS_VECTOR_MATH_RSH
296