/*
 * 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.
 */

// Don't edit this file!  It is auto-generated by frameworks/rs/api/gen_runtime.

/*
 * rs_vector_math.rsh: TODO Add documentation
 *
 * TODO Add documentation
 */
#ifndef RENDERSCRIPT_RS_VECTOR_MATH_RSH
#define RENDERSCRIPT_RS_VECTOR_MATH_RSH

/*
 * cross: Cross product of two vectors
 *
 * Computes the cross product of two vectors.
 */
extern float3 __attribute__((const, overloadable))
    cross(float3 left_vector, float3 right_vector);

extern float4 __attribute__((const, overloadable))
    cross(float4 left_vector, float4 right_vector);

/*
 * distance: Distance between two points
 *
 * Compute the distance between two points.
 *
 * See also fast_distance(), native_distance().
 */
extern float __attribute__((const, overloadable))
    distance(float left_vector, float right_vector);

extern float __attribute__((const, overloadable))
    distance(float2 left_vector, float2 right_vector);

extern float __attribute__((const, overloadable))
    distance(float3 left_vector, float3 right_vector);

extern float __attribute__((const, overloadable))
    distance(float4 left_vector, float4 right_vector);

/*
 * dot: Dot product of two vectors
 *
 * Computes the dot product of two vectors.
 */
extern float __attribute__((const, overloadable))
    dot(float left_vector, float right_vector);

extern float __attribute__((const, overloadable))
    dot(float2 left_vector, float2 right_vector);

extern float __attribute__((const, overloadable))
    dot(float3 left_vector, float3 right_vector);

extern float __attribute__((const, overloadable))
    dot(float4 left_vector, float4 right_vector);

/*
 * fast_distance: Approximate distance between two points
 *
 * 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().
 */
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
    fast_distance(float left_vector, float right_vector);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
    fast_distance(float2 left_vector, float2 right_vector);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
    fast_distance(float3 left_vector, float3 right_vector);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
    fast_distance(float4 left_vector, float4 right_vector);
#endif

/*
 * fast_length: Approximate length of a vector
 *
 * 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().
 */
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
    fast_length(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
    fast_length(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
    fast_length(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
    fast_length(float4 v);
#endif

/*
 * fast_normalize: Approximate normalized vector
 *
 * 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().
 */
#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float __attribute__((const, overloadable))
    fast_normalize(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float2 __attribute__((const, overloadable))
    fast_normalize(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float3 __attribute__((const, overloadable))
    fast_normalize(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 17))
extern float4 __attribute__((const, overloadable))
    fast_normalize(float4 v);
#endif

/*
 * length: Length of a vector
 *
 * Computes the length of a vector.
 *
 * See also fast_length(), native_length().
 */
extern float __attribute__((const, overloadable))
    length(float v);

extern float __attribute__((const, overloadable))
    length(float2 v);

extern float __attribute__((const, overloadable))
    length(float3 v);

extern float __attribute__((const, overloadable))
    length(float4 v);

/*
 * native_distance: Approximate distance between two points
 *
 * Computes the approximate distance between two points.
 *
 * See also distance(), fast_distance().
 */
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
    native_distance(float left_vector, float right_vector);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
    native_distance(float2 left_vector, float2 right_vector);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
    native_distance(float3 left_vector, float3 right_vector);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
    native_distance(float4 left_vector, float4 right_vector);
#endif

/*
 * native_length: Approximate length of a vector
 *
 * Compute the approximate length of a vector.
 *
 * See also length(), fast_length().
 */
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
    native_length(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
    native_length(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
    native_length(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
    native_length(float4 v);
#endif

/*
 * native_normalize: Approximately normalize a vector
 *
 * Approximately normalizes a vector.
 *
 * See also normalize(), fast_normalize().
 */
#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float __attribute__((const, overloadable))
    native_normalize(float v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float2 __attribute__((const, overloadable))
    native_normalize(float2 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float3 __attribute__((const, overloadable))
    native_normalize(float3 v);
#endif

#if (defined(RS_VERSION) && (RS_VERSION >= 21))
extern float4 __attribute__((const, overloadable))
    native_normalize(float4 v);
#endif

/*
 * normalize: Normalize a vector
 *
 * 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().
 */
extern float __attribute__((const, overloadable))
    normalize(float v);

extern float2 __attribute__((const, overloadable))
    normalize(float2 v);

extern float3 __attribute__((const, overloadable))
    normalize(float3 v);

extern float4 __attribute__((const, overloadable))
    normalize(float4 v);

#endif // RENDERSCRIPT_RS_VECTOR_MATH_RSH
