1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
18
19/*
20 * rs_vector_math.rsh: Vector Math Functions
21 *
22 * These functions interpret the input arguments as representation of vectors in
23 * n-dimensional space.
24 *
25 * The precision of the mathematical operations on 32 bit floats is affected by the pragmas
26 * rs_fp_relaxed and rs_fp_full.  See Mathematical Constants and Functions for details.
27 *
28 * Different precision/speed tradeoffs can be achieved by using variants of the common math
29 * functions.  Functions with a name starting with
30 * - native_: May have custom hardware implementations with weaker precision.  Additionally,
31 *   subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and
32 *   infinity input may not be handled correctly.
33 * - fast_: May perform internal computations using 16 bit floats.  Additionally, subnormal
34 *   values may be flushed to zero, and rounding towards zero may be used.
35 *
36 */
37
38#ifndef RENDERSCRIPT_RS_VECTOR_MATH_RSH
39#define RENDERSCRIPT_RS_VECTOR_MATH_RSH
40
41/*
42 * cross: Cross product of two vectors
43 *
44 * Computes the cross product of two vectors.
45 */
46extern float3 __attribute__((const, overloadable))
47    cross(float3 left_vector, float3 right_vector);
48
49extern float4 __attribute__((const, overloadable))
50    cross(float4 left_vector, float4 right_vector);
51
52/*
53 * distance: Distance between two points
54 *
55 * Compute the distance between two points.
56 *
57 * See also fast_distance(), native_distance().
58 */
59extern float __attribute__((const, overloadable))
60    distance(float left_vector, float right_vector);
61
62extern float __attribute__((const, overloadable))
63    distance(float2 left_vector, float2 right_vector);
64
65extern float __attribute__((const, overloadable))
66    distance(float3 left_vector, float3 right_vector);
67
68extern float __attribute__((const, overloadable))
69    distance(float4 left_vector, float4 right_vector);
70
71/*
72 * dot: Dot product of two vectors
73 *
74 * Computes the dot product of two vectors.
75 */
76extern float __attribute__((const, overloadable))
77    dot(float left_vector, float right_vector);
78
79extern float __attribute__((const, overloadable))
80    dot(float2 left_vector, float2 right_vector);
81
82extern float __attribute__((const, overloadable))
83    dot(float3 left_vector, float3 right_vector);
84
85extern float __attribute__((const, overloadable))
86    dot(float4 left_vector, float4 right_vector);
87
88/*
89 * fast_distance: Approximate distance between two points
90 *
91 * Computes the approximate distance between two points.
92 *
93 * The precision is what would be expected from doing the computation using 16 bit floating
94 * point values.
95 *
96 * See also distance(), native_distance().
97 */
98#if (defined(RS_VERSION) && (RS_VERSION >= 17))
99extern float __attribute__((const, overloadable))
100    fast_distance(float left_vector, float right_vector);
101#endif
102
103#if (defined(RS_VERSION) && (RS_VERSION >= 17))
104extern float __attribute__((const, overloadable))
105    fast_distance(float2 left_vector, float2 right_vector);
106#endif
107
108#if (defined(RS_VERSION) && (RS_VERSION >= 17))
109extern float __attribute__((const, overloadable))
110    fast_distance(float3 left_vector, float3 right_vector);
111#endif
112
113#if (defined(RS_VERSION) && (RS_VERSION >= 17))
114extern float __attribute__((const, overloadable))
115    fast_distance(float4 left_vector, float4 right_vector);
116#endif
117
118/*
119 * fast_length: Approximate length of a vector
120 *
121 * Computes the approximate length of a vector.
122 *
123 * The precision is what would be expected from doing the computation using 16 bit floating
124 * point values.
125 *
126 * See also length(), native_length().
127 */
128#if (defined(RS_VERSION) && (RS_VERSION >= 17))
129extern float __attribute__((const, overloadable))
130    fast_length(float v);
131#endif
132
133#if (defined(RS_VERSION) && (RS_VERSION >= 17))
134extern float __attribute__((const, overloadable))
135    fast_length(float2 v);
136#endif
137
138#if (defined(RS_VERSION) && (RS_VERSION >= 17))
139extern float __attribute__((const, overloadable))
140    fast_length(float3 v);
141#endif
142
143#if (defined(RS_VERSION) && (RS_VERSION >= 17))
144extern float __attribute__((const, overloadable))
145    fast_length(float4 v);
146#endif
147
148/*
149 * fast_normalize: Approximate normalized vector
150 *
151 * Approximately normalizes a vector.
152 *
153 * For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for
154 * positive values.
155 *
156 * The precision is what would be expected from doing the computation using 16 bit floating
157 * point values.
158 *
159 * See also normalize(), native_normalize().
160 */
161#if (defined(RS_VERSION) && (RS_VERSION >= 17))
162extern float __attribute__((const, overloadable))
163    fast_normalize(float v);
164#endif
165
166#if (defined(RS_VERSION) && (RS_VERSION >= 17))
167extern float2 __attribute__((const, overloadable))
168    fast_normalize(float2 v);
169#endif
170
171#if (defined(RS_VERSION) && (RS_VERSION >= 17))
172extern float3 __attribute__((const, overloadable))
173    fast_normalize(float3 v);
174#endif
175
176#if (defined(RS_VERSION) && (RS_VERSION >= 17))
177extern float4 __attribute__((const, overloadable))
178    fast_normalize(float4 v);
179#endif
180
181/*
182 * length: Length of a vector
183 *
184 * Computes the length of a vector.
185 *
186 * See also fast_length(), native_length().
187 */
188extern float __attribute__((const, overloadable))
189    length(float v);
190
191extern float __attribute__((const, overloadable))
192    length(float2 v);
193
194extern float __attribute__((const, overloadable))
195    length(float3 v);
196
197extern float __attribute__((const, overloadable))
198    length(float4 v);
199
200/*
201 * native_distance: Approximate distance between two points
202 *
203 * Computes the approximate distance between two points.
204 *
205 * See also distance(), fast_distance().
206 */
207#if (defined(RS_VERSION) && (RS_VERSION >= 21))
208extern float __attribute__((const, overloadable))
209    native_distance(float left_vector, float right_vector);
210#endif
211
212#if (defined(RS_VERSION) && (RS_VERSION >= 21))
213extern float __attribute__((const, overloadable))
214    native_distance(float2 left_vector, float2 right_vector);
215#endif
216
217#if (defined(RS_VERSION) && (RS_VERSION >= 21))
218extern float __attribute__((const, overloadable))
219    native_distance(float3 left_vector, float3 right_vector);
220#endif
221
222#if (defined(RS_VERSION) && (RS_VERSION >= 21))
223extern float __attribute__((const, overloadable))
224    native_distance(float4 left_vector, float4 right_vector);
225#endif
226
227/*
228 * native_length: Approximate length of a vector
229 *
230 * Compute the approximate length of a vector.
231 *
232 * See also length(), fast_length().
233 */
234#if (defined(RS_VERSION) && (RS_VERSION >= 21))
235extern float __attribute__((const, overloadable))
236    native_length(float v);
237#endif
238
239#if (defined(RS_VERSION) && (RS_VERSION >= 21))
240extern float __attribute__((const, overloadable))
241    native_length(float2 v);
242#endif
243
244#if (defined(RS_VERSION) && (RS_VERSION >= 21))
245extern float __attribute__((const, overloadable))
246    native_length(float3 v);
247#endif
248
249#if (defined(RS_VERSION) && (RS_VERSION >= 21))
250extern float __attribute__((const, overloadable))
251    native_length(float4 v);
252#endif
253
254/*
255 * native_normalize: Approximately normalize a vector
256 *
257 * Approximately normalizes a vector.
258 *
259 * See also normalize(), fast_normalize().
260 */
261#if (defined(RS_VERSION) && (RS_VERSION >= 21))
262extern float __attribute__((const, overloadable))
263    native_normalize(float v);
264#endif
265
266#if (defined(RS_VERSION) && (RS_VERSION >= 21))
267extern float2 __attribute__((const, overloadable))
268    native_normalize(float2 v);
269#endif
270
271#if (defined(RS_VERSION) && (RS_VERSION >= 21))
272extern float3 __attribute__((const, overloadable))
273    native_normalize(float3 v);
274#endif
275
276#if (defined(RS_VERSION) && (RS_VERSION >= 21))
277extern float4 __attribute__((const, overloadable))
278    native_normalize(float4 v);
279#endif
280
281/*
282 * normalize: Normalize a vector
283 *
284 * Normalize a vector.
285 *
286 * For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for
287 * positive values.
288 *
289 * See also fast_normalize(), native_normalize().
290 */
291extern float __attribute__((const, overloadable))
292    normalize(float v);
293
294extern float2 __attribute__((const, overloadable))
295    normalize(float2 v);
296
297extern float3 __attribute__((const, overloadable))
298    normalize(float3 v);
299
300extern float4 __attribute__((const, overloadable))
301    normalize(float4 v);
302
303#endif // RENDERSCRIPT_RS_VECTOR_MATH_RSH
304