#
# Copyright (C) 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

header:
summary: Vector Math Functions
description:
 These functions interpret the input arguments as representation of vectors in
 n-dimensional space.

 The precision of the mathematical operations on 32 bit floats is affected by the pragmas
# TODO Create an anchor for the section of http://developer.android.com/guide/topics/renderscript/compute.html that details rs_fp_* and link them here.
 rs_fp_relaxed and rs_fp_full.  See <a href='rs_math.html'>Mathematical Constants and Functions</a> for details.

 Different precision/speed tradeoffs can be achieved by using variants of the common math
 functions.  Functions with a name starting with<ul>
 <li>native_: May have custom hardware implementations with weaker precision.  Additionally,
   subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and
   infinity input may not be handled correctly.</li>
 <li>fast_: May perform internal computations using 16 bit floats.  Additionally, subnormal
   values may be flushed to zero, and rounding towards zero may be used.</li>
 </ul>
end:

function: cross
version: 9
attrib: const
w: 3, 4
t: f32
ret: #2#1
arg: #2#1 left_vector
arg: #2#1 right_vector
summary: Cross product of two vectors
description:
 Computes the cross product of two vectors.
test: vector
end:

function: cross
version: 24
attrib: const
w: 3, 4
t: f16
ret: #2#1
arg: #2#1 left_vector
arg: #2#1 right_vector
test: vector
end:

function: distance
version: 9
attrib: const
w: 1, 2, 3, 4
t: f32
ret: #2
arg: #2#1 left_vector
arg: #2#1 right_vector
summary: Distance between two points
description:
 Compute the distance between two points.

 See also @fast_distance(), @native_distance().
test: vector
end:

function: distance
version: 24
attrib: const
w: 1, 2, 3, 4
t: f16
ret: #2
arg: #2#1 left_vector
arg: #2#1 right_vector
test: vector
end:

function: dot
version: 9
attrib: const
w: 1, 2, 3, 4
t: f32
ret: #2
arg: #2#1 left_vector
arg: #2#1 right_vector
summary: Dot product of two vectors
description:
 Computes the dot product of two vectors.
test: vector
end:

function: dot
version: 24
attrib: const
w: 1, 2, 3, 4
t: f16
ret: #2
arg: #2#1 left_vector
arg: #2#1 right_vector
test: vector
end:

function: fast_distance
version: 17
attrib: const
w: 1, 2, 3, 4
t: f32
ret: #2
arg: #2#1 left_vector
arg: #2#1 right_vector
summary: Approximate distance between two points
description:
 Computes the approximate distance between two points.

 The precision is what would be expected from doing the computation using 16 bit floating
 point values.

 See also @distance(), @native_distance().
test: vector
end:

function: fast_length
version: 17
attrib: const
w: 1, 2, 3, 4
t: f32
ret: #2
arg: #2#1 v
summary: Approximate length of a vector
description:
 Computes the approximate length of a vector.

 The precision is what would be expected from doing the computation using 16 bit floating
 point values.

 See also @length(), @native_length().
test: vector
end:

function: fast_normalize
version: 17
attrib: const
w: 1, 2, 3, 4
t: f32
ret: #2#1
arg: #2#1 v
summary: Approximate normalized vector
description:
 Approximately normalizes a vector.

 For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for
 positive values.

 The precision is what would be expected from doing the computation using 16 bit floating
 point values.

 See also @normalize(), @native_normalize().
test: vector
end:

function: length
version: 9
attrib: const
w: 1, 2, 3, 4
t: f32
ret: #2
arg: #2#1 v
summary: Length of a vector
description:
 Computes the length of a vector.

 See also @fast_length(), @native_length().
test: vector
end:

function: length
version: 24
attrib: const
w: 1, 2, 3, 4
t: f16
ret: #2
arg: #2#1 v
test: vector
end:

function: native_distance
version: 21
attrib: const
w: 1, 2, 3, 4
t: f32
ret: #2
arg: #2#1 left_vector
arg: #2#1 right_vector
summary: Approximate distance between two points
description:
 Computes the approximate distance between two points.

 See also @distance(), @fast_distance().
test: vector
end:

function: native_distance
version: 24
attrib: const
w: 1, 2, 3, 4
t: f16
ret: #2
arg: #2#1 left_vector
arg: #2#1 right_vector
test: vector
end:

function: native_length
version: 21
attrib: const
w: 1, 2, 3, 4
t: f32
ret: #2
arg: #2#1 v
summary: Approximate length of a vector
description:
 Compute the approximate length of a vector.

 See also @length(), @fast_length().
test: vector
end:

function: native_length
version: 24
attrib: const
w: 1, 2, 3, 4
t: f16
ret: #2
arg: #2#1 v
test: vector
end:

function: native_normalize
version: 21
attrib: const
w: 1, 2, 3, 4
t: f32
ret: #2#1
arg: #2#1 v
summary:  Approximately normalize a vector
description:
 Approximately normalizes a vector.

 See also @normalize(), @fast_normalize().
test: vector
end:

function: native_normalize
version: 24
attrib: const
w: 1, 2, 3, 4
t: f16
ret: #2#1
arg: #2#1 v
test: vector
end:

function: normalize
version: 9
attrib: const
w: 1, 2, 3, 4
t: f32
ret: #2#1
arg: #2#1 v
summary: Normalize a vector
description:
 Normalize a vector.

 For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for
 positive values.

 See also @fast_normalize(), @native_normalize().
test: vector
end:

function: normalize
version: 24
attrib: const
w: 1, 2, 3, 4
t: f16
ret: #2#1
arg: #2#1 v
test: vector
end: