10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/*
20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2011 The Android Open Source Project
30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License.
60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at
70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software
110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and
140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License.
150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/** @file rs_types.rsh
180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  Define the standard Renderscript types
200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  Integers
220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  8 bit: char, int8_t
230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  16 bit: short, int16_t
240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  32 bit: int, in32_t
250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  64 bit: long, long long, int64_t
260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  Unsigned Integers
280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  8 bit: uchar, uint8_t
290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  16 bit: ushort, uint16_t
300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  32 bit: uint, uint32_t
310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  64 bit: ulong, uint64_t
320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  Floating point
340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  32 bit: float
350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  64 bit: double
360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  Vectors of length 2, 3, and 4 are supported for all the types above.
380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef __RS_TYPES_RSH__
420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define __RS_TYPES_RSH__
430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* Constants */
450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_E         2.718281828459045235360287471352662498f     /* e */
460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_LOG2E     1.442695040888963407359924681001892137f     /* log_2 e */
470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_LOG10E    0.434294481903251827651128918916605082f     /* log_10 e */
480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_LN2       0.693147180559945309417232121458176568f     /* log_e 2 */
490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_LN10      2.302585092994045684017991454684364208f     /* log_e 10 */
500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_PI        3.141592653589793238462643383279502884f     /* pi */
510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_PI_2      1.570796326794896619231321691639751442f     /* pi/2 */
520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_PI_4      0.785398163397448309615660845819875721f     /* pi/4 */
530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_1_PI      0.318309886183790671537767526745028724f     /* 1/pi */
540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_2_PIl     0.636619772367581343075535053490057448f     /* 2/pi */
550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_2_SQRTPI  1.128379167095512573896158903121545172f     /* 2/sqrt(pi) */
560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_SQRT2     1.414213562373095048801688724209698079f     /* sqrt(2) */
570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define M_SQRT1_2   0.707106781186547524400844362104849039f     /* 1/sqrt(2) */
580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "stdbool.h"
600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 8 bit integer type
620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef char int8_t;
640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 16 bit integer type
660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef short int16_t;
680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 32 bit integer type
700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef int int32_t;
720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 64 bit integer type
740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef long long int64_t;
760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 8 bit unsigned integer type
780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned char uint8_t;
800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 16 bit unsigned integer type
820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned short uint16_t;
840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 32 bit unsigned integer type
860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned int uint32_t;
880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 64 bit unsigned integer type
900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef unsigned long long uint64_t;
920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 8 bit unsigned integer type
940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uint8_t uchar;
960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 16 bit unsigned integer type
980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uint16_t ushort;
1000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 32 bit unsigned integer type
1020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uint32_t uint;
1040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Typedef for unsigned long (use for 64-bit unsigned integers)
1060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uint64_t ulong;
1080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Typedef for unsigned int
1100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uint32_t size_t;
1120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Typedef for int (use for 32-bit integers)
1140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef int32_t ssize_t;
1160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript element.
1190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.Element
1210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_element;
1230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript type.
1250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.Type
1270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_type;
1290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript allocation.
1310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.Allocation
1330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_allocation;
1350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript sampler object.
1370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.Sampler
1390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_sampler;
1410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript script object.
1430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.ScriptC
1450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_script;
1470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript mesh object.
1490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.Mesh
1510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_mesh;
1530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript Path object.
1550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.Path
1570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_path;
1590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript ProgramFragment object.
1610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.ProgramFragment
1630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_fragment;
1650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript ProgramVertex object.
1670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.ProgramVertex
1690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_vertex;
1710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript ProgramRaster object.
1730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.ProgramRaster
1750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_raster;
1770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript ProgramStore object.
1790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.ProgramStore
1810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_store;
1830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Opaque handle to a Renderscript font object.
1850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See: android.renderscript.Font
1870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_font;
1890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic float type.
1920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Provides two float fields packed into a single 64 bit field with 64 bit
1930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * alignment.
1940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef float float2 __attribute__((ext_vector_type(2)));
1960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic float type. Provides three float fields packed
1980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 128 bit field with 128 bit alignment.
1990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef float float3 __attribute__((ext_vector_type(3)));
2010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic float type.
2030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Provides four float fields packed into a single 128 bit field with 128 bit
2040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * alignment.
2050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef float float4 __attribute__((ext_vector_type(4)));
2070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic double type. Provides two double fields packed
2100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 128 bit field with 128 bit alignment.
2110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef double double2 __attribute__((ext_vector_type(2)));
2130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic double type. Provides three double fields packed
2150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 256 bit field with 256 bit alignment.
2160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef double double3 __attribute__((ext_vector_type(3)));
2180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic double type. Provides four double fields packed
2200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 256 bit field with 256 bit alignment.
2210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef double double4 __attribute__((ext_vector_type(4)));
2230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic uchar type. Provides two uchar fields packed
2260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 16 bit field with 16 bit alignment.
2270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uchar uchar2 __attribute__((ext_vector_type(2)));
2290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic uchar type. Provides three uchar fields packed
2310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 32 bit field with 32 bit alignment.
2320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uchar uchar3 __attribute__((ext_vector_type(3)));
2340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic uchar type. Provides four uchar fields packed
2360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 32 bit field with 32 bit alignment.
2370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uchar uchar4 __attribute__((ext_vector_type(4)));
2390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic ushort type. Provides two ushort fields packed
2420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 32 bit field with 32 bit alignment.
2430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef ushort ushort2 __attribute__((ext_vector_type(2)));
2450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic ushort type. Provides three ushort fields packed
2470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 64 bit field with 64 bit alignment.
2480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef ushort ushort3 __attribute__((ext_vector_type(3)));
2500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic ushort type. Provides four ushort fields packed
2520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 64 bit field with 64 bit alignment.
2530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef ushort ushort4 __attribute__((ext_vector_type(4)));
2550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic uint type. Provides two uint fields packed into a
2580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * single 64 bit field with 64 bit alignment.
2590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uint uint2 __attribute__((ext_vector_type(2)));
2610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic uint type. Provides three uint fields packed into
2630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * a single 128 bit field with 128 bit alignment.
2640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uint uint3 __attribute__((ext_vector_type(3)));
2660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic uint type. Provides four uint fields packed into
2680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * a single 128 bit field with 128 bit alignment.
2690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef uint uint4 __attribute__((ext_vector_type(4)));
2710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic ulong type. Provides two ulong fields packed into
2740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * a single 128 bit field with 128 bit alignment.
2750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef ulong ulong2 __attribute__((ext_vector_type(2)));
2770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic ulong type. Provides three ulong fields packed
2790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 256 bit field with 256 bit alignment.
2800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef ulong ulong3 __attribute__((ext_vector_type(3)));
2820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic ulong type. Provides four ulong fields packed
2840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 256 bit field with 256 bit alignment.
2850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef ulong ulong4 __attribute__((ext_vector_type(4)));
2870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic char type. Provides two char fields packed into a
2900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * single 16 bit field with 16 bit alignment.
2910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef char char2 __attribute__((ext_vector_type(2)));
2930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic char type. Provides three char fields packed into
2950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * a single 32 bit field with 32 bit alignment.
2960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef char char3 __attribute__((ext_vector_type(3)));
2980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic char type. Provides four char fields packed into
3000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * a single 32 bit field with 32 bit alignment.
3010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef char char4 __attribute__((ext_vector_type(4)));
3030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic short type. Provides two short fields packed into
3060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * a single 32 bit field with 32 bit alignment.
3070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef short short2 __attribute__((ext_vector_type(2)));
3090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic short type. Provides three short fields packed
3110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 64 bit field with 64 bit alignment.
3120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef short short3 __attribute__((ext_vector_type(3)));
3140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic short type. Provides four short fields packed
3160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * into a single 64 bit field with 64 bit alignment.
3170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef short short4 __attribute__((ext_vector_type(4)));
3190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic int type. Provides two int fields packed into a
3220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * single 64 bit field with 64 bit alignment.
3230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef int int2 __attribute__((ext_vector_type(2)));
3250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic int type. Provides three int fields packed into a
3270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * single 128 bit field with 128 bit alignment.
3280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef int int3 __attribute__((ext_vector_type(3)));
3300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic int type. Provides two four fields packed into a
3320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * single 128 bit field with 128 bit alignment.
3330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef int int4 __attribute__((ext_vector_type(4)));
3350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic long type. Provides two long fields packed into a
3380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * single 128 bit field with 128 bit alignment.
3390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef long long2 __attribute__((ext_vector_type(2)));
3410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic long type. Provides three long fields packed into
3430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * a single 256 bit field with 256 bit alignment.
3440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef long long3 __attribute__((ext_vector_type(3)));
3460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Vector version of the basic long type. Provides four long fields packed into
3480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * a single 256 bit field with 256 bit alignment.
3490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef long long4 __attribute__((ext_vector_type(4)));
3510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief 4x4 float matrix
3540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
3550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Native holder for RS matrix.  Elements are stored in the array at the
3560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * location [row*4 + col]
3570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct {
3590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    float m[16];
3600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_matrix4x4;
3610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief 3x3 float matrix
3630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
3640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Native holder for RS matrix.  Elements are stored in the array at the
3650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * location [row*3 + col]
3660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct {
3680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    float m[9];
3690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_matrix3x3;
3700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief 2x2 float matrix
3720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
3730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Native holder for RS matrix.  Elements are stored in the array at the
3740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * location [row*2 + col]
3750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef struct {
3770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    float m[4];
3780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_matrix2x2;
3790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * quaternion type for use with the quaternion functions
3820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef float4 rs_quaternion;
3840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define RS_PACKED __attribute__((packed, aligned(4)))
3860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define NULL ((void *)0)
3870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#if (defined(RS_VERSION) && (RS_VERSION >= 14))
3890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Enum for selecting cube map faces
3920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef enum {
3940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X = 0,
3950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_X = 1,
3960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Y = 2,
3970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Y = 3,
3980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Z = 4,
3990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Z = 5
4000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_allocation_cubemap_face;
4010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
4030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Bitfield to specify the usage types for an allocation.
4040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
4050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * These values are ORed together to specify which usages or memory spaces are
4060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * relevant to an allocation or an operation on an allocation.
4070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
4080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef enum {
4090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_ALLOCATION_USAGE_SCRIPT = 0x0001,
4100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE = 0x0002,
4110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004,
4120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008,
4130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010
4140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_allocation_usage_type;
4150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
4170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// New API's
4190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#if (defined(RS_VERSION) && (RS_VERSION >= 16))
4200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
4220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Describes the way mesh vertex data is interpreted when rendering
4230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
4240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines **/
4250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef enum {
4260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
4270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Vertex data will be rendered as a series of points
4280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
4290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_PRIMITIVE_POINT              = 0,
4300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
4310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Vertex pairs will be rendered as lines
4320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
4330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_PRIMITIVE_LINE               = 1,
4340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
4350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Vertex data will be rendered as a connected line strip
4360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
4370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_PRIMITIVE_LINE_STRIP         = 2,
4380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
4390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Vertices will be rendered as individual triangles
4400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
4410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_PRIMITIVE_TRIANGLE           = 3,
4420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
4430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Vertices will be rendered as a connected triangle strip
4440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * defined by the first three vertices with each additional
4450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * triangle defined by a new vertex
4460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
4470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_PRIMITIVE_TRIANGLE_STRIP     = 4,
4480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
4490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Vertices will be rendered as a sequence of triangles that all
4500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * share first vertex as the origin
4510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
4520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_PRIMITIVE_TRIANGLE_FAN       = 5,
4530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
4550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Invalid primitive
4560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
4570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_PRIMITIVE_INVALID            = 100,
4580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_primitive;
4590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
4610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Enumeration for possible element data types
4620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
4630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * DataType represents the basic type information for a basic element.  The
4640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * naming convention follows.  For numeric types it is FLOAT,
4650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * SIGNED, or UNSIGNED followed by the _BITS where BITS is the
4660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * size of the data.  BOOLEAN is a true / false (1,0)
4670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * represented in an 8 bit container.  The UNSIGNED variants
4680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * with multiple bit definitions are for packed graphical data
4690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * formats and represent vectors with per vector member sizes
4700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * which are treated as a single unit for packing and alignment
4710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * purposes.
4720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
4730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * MATRIX the three matrix types contain FLOAT_32 elements and are treated
4740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * as 32 bits for alignment purposes.
4750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
4760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * RS_* objects.  32 bit opaque handles.
4770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
4780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef enum {
4790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_NONE             = 0,
4800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_FLOAT_32         = 2,
4810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_FLOAT_64         = 3,
4820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_SIGNED_8         = 4,
4830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_SIGNED_16        = 5,
4840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_SIGNED_32        = 6,
4850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_SIGNED_64        = 7,
4860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_UNSIGNED_8       = 8,
4870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_UNSIGNED_16      = 9,
4880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_UNSIGNED_32      = 10,
4890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_UNSIGNED_64      = 11,
4900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_BOOLEAN          = 12,
4920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_UNSIGNED_5_6_5   = 13,
4940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_UNSIGNED_5_5_5_1 = 14,
4950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_UNSIGNED_4_4_4_4 = 15,
4960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_MATRIX_4X4       = 16,
4980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_MATRIX_3X3       = 17,
4990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_MATRIX_2X2       = 18,
5000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_ELEMENT          = 1000,
5020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_TYPE             = 1001,
5030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_ALLOCATION       = 1002,
5040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_SAMPLER          = 1003,
5050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_SCRIPT           = 1004,
5060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_MESH             = 1005,
5070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_PROGRAM_FRAGMENT = 1006,
5080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_PROGRAM_VERTEX   = 1007,
5090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_PROGRAM_RASTER   = 1008,
5100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_PROGRAM_STORE    = 1009,
5110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_FONT             = 1010,
5120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_TYPE_INVALID          = 10000,
5140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_data_type;
5150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
5170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \brief Enumeration for possible element data kind
5180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
5190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * The special interpretation of the data if required.  This is primarly
5200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * useful for graphical data.  USER indicates no special interpretation is
5210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * expected.  PIXEL is used in conjunction with the standard data types for
5220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * representing texture formats.
5230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
5240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef enum {
5250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_KIND_USER         = 0,
5260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_KIND_PIXEL_L      = 7,
5280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_KIND_PIXEL_A      = 8,
5290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_KIND_PIXEL_LA     = 9,
5300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_KIND_PIXEL_RGB    = 10,
5310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_KIND_PIXEL_RGBA   = 11,
5320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_KIND_PIXEL_DEPTH  = 12,
5330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_KIND_INVALID      = 100,
5350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_data_kind;
5360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef enum {
5380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
5390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Always drawn
5400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
5410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_DEPTH_FUNC_ALWAYS        = 0,
5420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
5430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Drawn if the incoming depth value is less than that in the
5440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * depth buffer
5450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
5460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_DEPTH_FUNC_LESS          = 1,
5470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
5480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Drawn if the incoming depth value is less or equal to that in
5490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * the depth buffer
5500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
5510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_DEPTH_FUNC_LEQUAL        = 2,
5520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
5530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Drawn if the incoming depth value is greater than that in the
5540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * depth buffer
5550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
5560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_DEPTH_FUNC_GREATER       = 3,
5570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
5580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Drawn if the incoming depth value is greater or equal to that
5590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * in the depth buffer
5600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
5610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_DEPTH_FUNC_GEQUAL        = 4,
5620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
5630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Drawn if the incoming depth value is equal to that in the
5640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * depth buffer
5650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
5660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_DEPTH_FUNC_EQUAL         = 5,
5670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
5680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Drawn if the incoming depth value is not equal to that in the
5690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * depth buffer
5700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
5710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_DEPTH_FUNC_NOTEQUAL      = 6,
5720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    /**
5730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    * Invalid depth function
5740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    */
5750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_DEPTH_FUNC_INVALID       = 100,
5760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_depth_func;
5770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef enum {
5790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_SRC_ZERO                   = 0,
5800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_SRC_ONE                    = 1,
5810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_SRC_DST_COLOR              = 2,
5820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_SRC_ONE_MINUS_DST_COLOR    = 3,
5830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_SRC_SRC_ALPHA              = 4,
5840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_SRC_ONE_MINUS_SRC_ALPHA    = 5,
5850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_SRC_DST_ALPHA              = 6,
5860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_SRC_ONE_MINUS_DST_ALPHA    = 7,
5870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_SRC_SRC_ALPHA_SATURATE     = 8,
5880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_SRC_INVALID                = 100,
5900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_blend_src_func;
5910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
5920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef enum {
5930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_DST_ZERO                   = 0,
5940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_DST_ONE                    = 1,
5950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_DST_SRC_COLOR              = 2,
5960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_DST_ONE_MINUS_SRC_COLOR    = 3,
5970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_DST_SRC_ALPHA              = 4,
5980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_DST_ONE_MINUS_SRC_ALPHA    = 5,
5990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_DST_DST_ALPHA              = 6,
6000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_DST_ONE_MINUS_DST_ALPHA    = 7,
6010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
6020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_BLEND_DST_INVALID                = 100,
6030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_blend_dst_func;
6040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
6050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef enum {
6060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_CULL_BACK     = 0,
6070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_CULL_FRONT    = 1,
6080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_CULL_NONE     = 2,
6090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
6100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_CULL_INVALID  = 100,
6110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_cull_mode;
6120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
6130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinestypedef enum {
6140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_SAMPLER_NEAREST              = 0,
6150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_SAMPLER_LINEAR               = 1,
6160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_SAMPLER_LINEAR_MIP_LINEAR    = 2,
6170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_SAMPLER_WRAP                 = 3,
6180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_SAMPLER_CLAMP                = 4,
6190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_SAMPLER_LINEAR_MIP_NEAREST   = 5,
6200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
6210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RS_SAMPLER_INVALID              = 100,
6220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} rs_sampler_value;
6230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
6240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif // (defined(RS_VERSION) && (RS_VERSION >= 16))
6250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
6260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif // __RS_TYPES_RSH__
627