rs_types.rsh revision 6a057c34ca84c0b7211538caa85f366a0a0e6434
1044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams/*
2044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Copyright (C) 2011 The Android Open Source Project
3044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams *
4044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * you may not use this file except in compliance with the License.
6044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * You may obtain a copy of the License at
7044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams *
8044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams *
10044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Unless required by applicable law or agreed to in writing, software
11044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * See the License for the specific language governing permissions and
14044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * limitations under the License.
15044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams */
16044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams
17044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams/** @file rs_types.rsh
189df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
199df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  Define the standard Renderscript types
209df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
219df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  Integers
229df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  8 bit: char, int8_t
239df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  16 bit: short, int16_t
249df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  32 bit: int, in32_t
259df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  64 bit: long, long long, int64_t
269df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
279df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  Unsigned Integers
289df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  8 bit: uchar, uint8_t
299df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  16 bit: ushort, uint16_t
309df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  32 bit: uint, uint32_t
319df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  64 bit: ulong, uint64_t
329df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
339df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  Floating point
349df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  32 bit: float
359df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  64 bit: double
369df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
379df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *  Vectors of length 2, 3, and 4 are supported for all the types above.
389df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
399df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
409df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams
419bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao#ifndef __RS_TYPES_RSH__
429bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao#define __RS_TYPES_RSH__
43717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Sams
445439184e13077059e4caffbdadfcfe37ec99ec10Shih-wei Liao#define M_PI        3.14159265358979323846264338327950288f   /* pi */
455439184e13077059e4caffbdadfcfe37ec99ec10Shih-wei Liao
46ed2ea272afbab08d0b5d882202c8eb19a5233481Shih-wei Liao#include "stdbool.h"
479df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
489df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 8 bit integer type
499df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
50717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef char int8_t;
519df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
529df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 16 bit integer type
539df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
54717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef short int16_t;
559df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
569df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 32 bit integer type
579df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
58717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef int int32_t;
599df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
609df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 64 bit integer type
619df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
6222fa371bf64b8aae786acfe5d711af21afb13a93Jason Samstypedef long long int64_t;
639df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
649df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 8 bit unsigned integer type
659df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
66717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef unsigned char uint8_t;
679df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
689df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 16 bit unsigned integer type
699df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
70717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef unsigned short uint16_t;
719df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
729df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 32 bit unsigned integer type
739df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
74717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef unsigned int uint32_t;
759df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
769df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 64 bit unsigned integer type
779df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
7822fa371bf64b8aae786acfe5d711af21afb13a93Jason Samstypedef unsigned long long uint64_t;
799df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
809df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 8 bit unsigned integer type
819df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
82717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef uint8_t uchar;
839df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
849df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 16 bit unsigned integer type
859df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
86717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef uint16_t ushort;
879df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
889df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 32 bit unsigned integer type
899df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
90717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef uint32_t uint;
919df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
92d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * Typedef for unsigned long (use for 64-bit unsigned integers)
939df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
9422fa371bf64b8aae786acfe5d711af21afb13a93Jason Samstypedef uint64_t ulong;
959df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
969df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Typedef for unsigned int
979df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
98c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samstypedef uint32_t size_t;
999df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
1009df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Typedef for int (use for 32-bit integers)
1019df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
102c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samstypedef int32_t ssize_t;
103c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
1049df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
105d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * \brief Opaque handle to a Renderscript element.
1069df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
1079df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * See: android.renderscript.Element
1089df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
109c093685672e54657d87b953d44e514803889486cJason Samstypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_element;
1109df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
111d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * \brief Opaque handle to a Renderscript type.
1129df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
1139df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * See: android.renderscript.Type
1149df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
115c093685672e54657d87b953d44e514803889486cJason Samstypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_type;
1169df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
117d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * \brief Opaque handle to a Renderscript allocation.
1189df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
1199df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * See: android.renderscript.Allocation
1209df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
121c093685672e54657d87b953d44e514803889486cJason Samstypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_allocation;
1229df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
123d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * \brief Opaque handle to a Renderscript sampler object.
1249df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
1259df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * See: android.renderscript.Sampler
1269df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
127c093685672e54657d87b953d44e514803889486cJason Samstypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_sampler;
1289df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
129d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * \brief Opaque handle to a Renderscript script object.
1309df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
1319df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * See: android.renderscript.ScriptC
1329df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
133c093685672e54657d87b953d44e514803889486cJason Samstypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_script;
1349df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
135d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * \brief Opaque handle to a Renderscript mesh object.
1369df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
1379df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * See: android.renderscript.Mesh
1389df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
139c093685672e54657d87b953d44e514803889486cJason Samstypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_mesh;
1409df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
141d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * \brief Opaque handle to a Renderscript ProgramFragment object.
1429df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
1439df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * See: android.renderscript.ProgramFragment
1449df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
145c093685672e54657d87b953d44e514803889486cJason Samstypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_fragment;
1469df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
147d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * \brief Opaque handle to a Renderscript ProgramVertex object.
1489df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
1499df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * See: android.renderscript.ProgramVertex
1509df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
151c093685672e54657d87b953d44e514803889486cJason Samstypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_vertex;
1529df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
153d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * \brief Opaque handle to a Renderscript ProgramRaster object.
1549df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
155d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * See: android.renderscript.ProgramRaster
1569df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
157c093685672e54657d87b953d44e514803889486cJason Samstypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_raster;
1589df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
159d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * \brief Opaque handle to a Renderscript ProgramStore object.
1609df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
1619df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * See: android.renderscript.ProgramStore
1629df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
163c093685672e54657d87b953d44e514803889486cJason Samstypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_store;
1649df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
165d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * \brief Opaque handle to a Renderscript font object.
1669df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
1679df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * See: android.renderscript.Font
1689df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
169c093685672e54657d87b953d44e514803889486cJason Samstypedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_font;
170c093685672e54657d87b953d44e514803889486cJason Sams
1719df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
1729df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic float type.
173d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * Provides two float fields packed into a single 64 bit field with 64 bit
1749df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * alignment.
1759df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
176717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef float float2 __attribute__((ext_vector_type(2)));
1779df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
1789df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic float type. Provides three float fields packed
179d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 128 bit field with 128 bit alignment.
1809df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
181717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef float float3 __attribute__((ext_vector_type(3)));
1829df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
1839df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic float type.
184d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * Provides four float fields packed into a single 128 bit field with 128 bit
1859df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * alignment.
1869df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
187717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef float float4 __attribute__((ext_vector_type(4)));
188717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Sams
1899df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
1909df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic double type. Provides two double fields packed
191d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 128 bit field with 128 bit alignment.
1929df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
19346f2e7295d648f52812a414edd486a5be9f1ee7eJason Samstypedef double double2 __attribute__((ext_vector_type(2)));
1949df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
1959df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic double type. Provides three double fields packed
196d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 256 bit field with 256 bit alignment.
1979df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
19846f2e7295d648f52812a414edd486a5be9f1ee7eJason Samstypedef double double3 __attribute__((ext_vector_type(3)));
1999df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2009df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic double type. Provides four double fields packed
201d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 256 bit field with 256 bit alignment.
2029df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
20346f2e7295d648f52812a414edd486a5be9f1ee7eJason Samstypedef double double4 __attribute__((ext_vector_type(4)));
20446f2e7295d648f52812a414edd486a5be9f1ee7eJason Sams
2059df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2069df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic uchar type. Provides two uchar fields packed
207d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 16 bit field with 16 bit alignment.
2089df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
209717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef uchar uchar2 __attribute__((ext_vector_type(2)));
2109df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2119df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic uchar type. Provides three uchar fields packed
212d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 32 bit field with 32 bit alignment.
2139df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
214717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef uchar uchar3 __attribute__((ext_vector_type(3)));
2159df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2169df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic uchar type. Provides four uchar fields packed
217d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 32 bit field with 32 bit alignment.
2189df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
219717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef uchar uchar4 __attribute__((ext_vector_type(4)));
220717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Sams
2219df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2229df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic ushort type. Provides two ushort fields packed
223d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 32 bit field with 32 bit alignment.
2249df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
225717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef ushort ushort2 __attribute__((ext_vector_type(2)));
2269df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2279df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic ushort type. Provides three ushort fields packed
228d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 64 bit field with 64 bit alignment.
2299df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
230717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef ushort ushort3 __attribute__((ext_vector_type(3)));
2319df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2329df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic ushort type. Provides four ushort fields packed
233d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 64 bit field with 64 bit alignment.
2349df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
235717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef ushort ushort4 __attribute__((ext_vector_type(4)));
236717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Sams
2379df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2389df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic uint type. Provides two uint fields packed into a
239d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * single 64 bit field with 64 bit alignment.
2409df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
241717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef uint uint2 __attribute__((ext_vector_type(2)));
2429df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2439df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic uint type. Provides three uint fields packed into
244d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * a single 128 bit field with 128 bit alignment.
2459df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
246717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef uint uint3 __attribute__((ext_vector_type(3)));
2479df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2489df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic uint type. Provides four uint fields packed into
249d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * a single 128 bit field with 128 bit alignment.
2509df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
251717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef uint uint4 __attribute__((ext_vector_type(4)));
252717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Sams
2539df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2549df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic ulong type. Provides two ulong fields packed into
255d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * a single 128 bit field with 128 bit alignment.
2569df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
25746f2e7295d648f52812a414edd486a5be9f1ee7eJason Samstypedef ulong ulong2 __attribute__((ext_vector_type(2)));
2589df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2599df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic ulong type. Provides three ulong fields packed
260d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 256 bit field with 256 bit alignment.
2619df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
26246f2e7295d648f52812a414edd486a5be9f1ee7eJason Samstypedef ulong ulong3 __attribute__((ext_vector_type(3)));
2639df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2649df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic ulong type. Provides four ulong fields packed
265d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 256 bit field with 256 bit alignment.
2669df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
26746f2e7295d648f52812a414edd486a5be9f1ee7eJason Samstypedef ulong ulong4 __attribute__((ext_vector_type(4)));
26846f2e7295d648f52812a414edd486a5be9f1ee7eJason Sams
2699df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2709df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic char type. Provides two char fields packed into a
271d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * single 16 bit field with 16 bit alignment.
2729df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
273717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef char char2 __attribute__((ext_vector_type(2)));
2749df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2759df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic char type. Provides three char fields packed into
276d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * a single 32 bit field with 32 bit alignment.
2779df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
278717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef char char3 __attribute__((ext_vector_type(3)));
2799df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2809df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic char type. Provides four char fields packed into
281d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * a single 32 bit field with 32 bit alignment.
2829df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
283717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef char char4 __attribute__((ext_vector_type(4)));
284717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Sams
2859df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2869df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic short type. Provides two short fields packed into
287d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * a single 32 bit field with 32 bit alignment.
2889df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
289717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef short short2 __attribute__((ext_vector_type(2)));
2909df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2919df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic short type. Provides three short fields packed
292d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 64 bit field with 64 bit alignment.
2939df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
294717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef short short3 __attribute__((ext_vector_type(3)));
2959df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
2969df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic short type. Provides four short fields packed
297d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * into a single 64 bit field with 64 bit alignment.
2989df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
299717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef short short4 __attribute__((ext_vector_type(4)));
300717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Sams
3019df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3029df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic int type. Provides two int fields packed into a
303d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * single 64 bit field with 64 bit alignment.
3049df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
305717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef int int2 __attribute__((ext_vector_type(2)));
3069df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3079df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic int type. Provides three int fields packed into a
308d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * single 128 bit field with 128 bit alignment.
3099df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
310717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef int int3 __attribute__((ext_vector_type(3)));
3119df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3129df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic int type. Provides two four fields packed into a
313d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * single 128 bit field with 128 bit alignment.
3149df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
315717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Samstypedef int int4 __attribute__((ext_vector_type(4)));
316717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Sams
3179df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3189df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic long type. Provides two long fields packed into a
319d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * single 128 bit field with 128 bit alignment.
3209df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
32146f2e7295d648f52812a414edd486a5be9f1ee7eJason Samstypedef long long2 __attribute__((ext_vector_type(2)));
3229df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3239df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic long type. Provides three long fields packed into
324d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * a single 256 bit field with 256 bit alignment.
3259df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
32646f2e7295d648f52812a414edd486a5be9f1ee7eJason Samstypedef long long3 __attribute__((ext_vector_type(3)));
3279df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3289df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Vector version of the basic long type. Provides four long fields packed into
329d5dccb8c49d8da069f2630c4ac9c0e2d14958a88Stephen Hines * a single 256 bit field with 256 bit alignment.
3309df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
33146f2e7295d648f52812a414edd486a5be9f1ee7eJason Samstypedef long long4 __attribute__((ext_vector_type(4)));
332717e34a50d2de026b5b66b4ccad06b7bc8b62b9eJason Sams
3339df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3349df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \brief 4x4 float matrix
3359df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
3369df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Native holder for RS matrix.  Elements are stored in the array at the
3379df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * location [row*4 + col]
3389df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
33905f1cb4ca5ce203a4facc7ec0bd002af2ae324b7Alex Sakhartchouktypedef struct {
34022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams    float m[16];
34122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} rs_matrix4x4;
3429df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3439df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \brief 3x3 float matrix
3449df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
3459df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Native holder for RS matrix.  Elements are stored in the array at the
3469df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * location [row*3 + col]
3479df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
34805f1cb4ca5ce203a4facc7ec0bd002af2ae324b7Alex Sakhartchouktypedef struct {
3497fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams    float m[9];
3507fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams} rs_matrix3x3;
3519df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3529df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \brief 2x2 float matrix
3539df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
3549df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Native holder for RS matrix.  Elements are stored in the array at the
3559df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * location [row*2 + col]
3569df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
35705f1cb4ca5ce203a4facc7ec0bd002af2ae324b7Alex Sakhartchouktypedef struct {
3587fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams    float m[4];
3597fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams} rs_matrix2x2;
3607fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams
3619df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3629df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * quaternion type for use with the quaternion functions
3639df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
3640bd010a5bdf4df3021c92c70e92008d6640c5da6Alex Sakhartchouktypedef float4 rs_quaternion;
3657fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams
36697589cbd2b844543f6c8a6bc336f4e11a67828fdJason Sams#define RS_PACKED __attribute__((packed, aligned(4)))
3676a057c34ca84c0b7211538caa85f366a0a0e6434Stephen Hines#define NULL ((void *)0)
368c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams
3694325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#if (defined(RS_VERSION) && (RS_VERSION >= 14))
3709df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams
3719df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3729df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \brief Enum for selecting cube map faces
3739df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
37474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouktypedef enum {
37574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X = 0,
37674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_X = 1,
37774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Y = 2,
37874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Y = 3,
37974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Z = 4,
38074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Z = 5
38174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk} rs_allocation_cubemap_face;
38274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
3839df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/**
3849df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \brief Bitfield to specify the usage types for an allocation.
3859df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams *
3869df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * These values are ORed together to specify which usages or memory spaces are
3879df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * relevant to an allocation or an operation on an allocation.
3889df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */
38974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouktypedef enum {
39074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    RS_ALLOCATION_USAGE_SCRIPT = 0x0001,
39174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE = 0x0002,
39274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004,
39374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008,
39474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010
39574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk} rs_allocation_usage_type;
39674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
3974325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
3984325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk
3999bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao#endif
400