• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/** @file rs_types.rsh
18 *
19 *  Define the standard Renderscript types
20 *
21 *  Integers
22 *  8 bit: char, int8_t
23 *  16 bit: short, int16_t
24 *  32 bit: int, in32_t
25 *  64 bit: long, long long, int64_t
26 *
27 *  Unsigned Integers
28 *  8 bit: uchar, uint8_t
29 *  16 bit: ushort, uint16_t
30 *  32 bit: uint, uint32_t
31 *  64 bit: ulong, uint64_t
32 *
33 *  Floating point
34 *  32 bit: float
35 *  64 bit: double
36 *
37 *  Vectors of length 2, 3, and 4 are supported for all the types above.
38 *
39 */
40
41#ifndef __RS_TYPES_RSH__
42#define __RS_TYPES_RSH__
43
44#define M_PI        3.14159265358979323846264338327950288f   /* pi */
45
46#include "stdbool.h"
47/**
48 * 8 bit integer type
49 */
50typedef char int8_t;
51/**
52 * 16 bit integer type
53 */
54typedef short int16_t;
55/**
56 * 32 bit integer type
57 */
58typedef int int32_t;
59/**
60 * 64 bit integer type
61 */
62typedef long long int64_t;
63/**
64 * 8 bit unsigned integer type
65 */
66typedef unsigned char uint8_t;
67/**
68 * 16 bit unsigned integer type
69 */
70typedef unsigned short uint16_t;
71/**
72 * 32 bit unsigned integer type
73 */
74typedef unsigned int uint32_t;
75/**
76 * 64 bit unsigned integer type
77 */
78typedef unsigned long long uint64_t;
79/**
80 * 8 bit unsigned integer type
81 */
82typedef uint8_t uchar;
83/**
84 * 16 bit unsigned integer type
85 */
86typedef uint16_t ushort;
87/**
88 * 32 bit unsigned integer type
89 */
90typedef uint32_t uint;
91/**
92 * Typedef for unsigned long (use for 64-bit unsigned integers)
93 */
94typedef uint64_t ulong;
95/**
96 * Typedef for unsigned int
97 */
98typedef uint32_t size_t;
99/**
100 * Typedef for int (use for 32-bit integers)
101 */
102typedef int32_t ssize_t;
103
104/**
105 * \brief Opaque handle to a Renderscript element.
106 *
107 * See: android.renderscript.Element
108 */
109typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_element;
110/**
111 * \brief Opaque handle to a Renderscript type.
112 *
113 * See: android.renderscript.Type
114 */
115typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_type;
116/**
117 * \brief Opaque handle to a Renderscript allocation.
118 *
119 * See: android.renderscript.Allocation
120 */
121typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_allocation;
122/**
123 * \brief Opaque handle to a Renderscript sampler object.
124 *
125 * See: android.renderscript.Sampler
126 */
127typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_sampler;
128/**
129 * \brief Opaque handle to a Renderscript script object.
130 *
131 * See: android.renderscript.ScriptC
132 */
133typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_script;
134/**
135 * \brief Opaque handle to a Renderscript mesh object.
136 *
137 * See: android.renderscript.Mesh
138 */
139typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_mesh;
140/**
141 * \brief Opaque handle to a Renderscript ProgramFragment object.
142 *
143 * See: android.renderscript.ProgramFragment
144 */
145typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_fragment;
146/**
147 * \brief Opaque handle to a Renderscript ProgramVertex object.
148 *
149 * See: android.renderscript.ProgramVertex
150 */
151typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_vertex;
152/**
153 * \brief Opaque handle to a Renderscript ProgramRaster object.
154 *
155 * See: android.renderscript.ProgramRaster
156 */
157typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_raster;
158/**
159 * \brief Opaque handle to a Renderscript ProgramStore object.
160 *
161 * See: android.renderscript.ProgramStore
162 */
163typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_store;
164/**
165 * \brief Opaque handle to a Renderscript font object.
166 *
167 * See: android.renderscript.Font
168 */
169typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_font;
170
171/**
172 * Vector version of the basic float type.
173 * Provides two float fields packed into a single 64 bit field with 64 bit
174 * alignment.
175 */
176typedef float float2 __attribute__((ext_vector_type(2)));
177/**
178 * Vector version of the basic float type. Provides three float fields packed
179 * into a single 128 bit field with 128 bit alignment.
180 */
181typedef float float3 __attribute__((ext_vector_type(3)));
182/**
183 * Vector version of the basic float type.
184 * Provides four float fields packed into a single 128 bit field with 128 bit
185 * alignment.
186 */
187typedef float float4 __attribute__((ext_vector_type(4)));
188
189/**
190 * Vector version of the basic double type. Provides two double fields packed
191 * into a single 128 bit field with 128 bit alignment.
192 */
193typedef double double2 __attribute__((ext_vector_type(2)));
194/**
195 * Vector version of the basic double type. Provides three double fields packed
196 * into a single 256 bit field with 256 bit alignment.
197 */
198typedef double double3 __attribute__((ext_vector_type(3)));
199/**
200 * Vector version of the basic double type. Provides four double fields packed
201 * into a single 256 bit field with 256 bit alignment.
202 */
203typedef double double4 __attribute__((ext_vector_type(4)));
204
205/**
206 * Vector version of the basic uchar type. Provides two uchar fields packed
207 * into a single 16 bit field with 16 bit alignment.
208 */
209typedef uchar uchar2 __attribute__((ext_vector_type(2)));
210/**
211 * Vector version of the basic uchar type. Provides three uchar fields packed
212 * into a single 32 bit field with 32 bit alignment.
213 */
214typedef uchar uchar3 __attribute__((ext_vector_type(3)));
215/**
216 * Vector version of the basic uchar type. Provides four uchar fields packed
217 * into a single 32 bit field with 32 bit alignment.
218 */
219typedef uchar uchar4 __attribute__((ext_vector_type(4)));
220
221/**
222 * Vector version of the basic ushort type. Provides two ushort fields packed
223 * into a single 32 bit field with 32 bit alignment.
224 */
225typedef ushort ushort2 __attribute__((ext_vector_type(2)));
226/**
227 * Vector version of the basic ushort type. Provides three ushort fields packed
228 * into a single 64 bit field with 64 bit alignment.
229 */
230typedef ushort ushort3 __attribute__((ext_vector_type(3)));
231/**
232 * Vector version of the basic ushort type. Provides four ushort fields packed
233 * into a single 64 bit field with 64 bit alignment.
234 */
235typedef ushort ushort4 __attribute__((ext_vector_type(4)));
236
237/**
238 * Vector version of the basic uint type. Provides two uint fields packed into a
239 * single 64 bit field with 64 bit alignment.
240 */
241typedef uint uint2 __attribute__((ext_vector_type(2)));
242/**
243 * Vector version of the basic uint type. Provides three uint fields packed into
244 * a single 128 bit field with 128 bit alignment.
245 */
246typedef uint uint3 __attribute__((ext_vector_type(3)));
247/**
248 * Vector version of the basic uint type. Provides four uint fields packed into
249 * a single 128 bit field with 128 bit alignment.
250 */
251typedef uint uint4 __attribute__((ext_vector_type(4)));
252
253/**
254 * Vector version of the basic ulong type. Provides two ulong fields packed into
255 * a single 128 bit field with 128 bit alignment.
256 */
257typedef ulong ulong2 __attribute__((ext_vector_type(2)));
258/**
259 * Vector version of the basic ulong type. Provides three ulong fields packed
260 * into a single 256 bit field with 256 bit alignment.
261 */
262typedef ulong ulong3 __attribute__((ext_vector_type(3)));
263/**
264 * Vector version of the basic ulong type. Provides four ulong fields packed
265 * into a single 256 bit field with 256 bit alignment.
266 */
267typedef ulong ulong4 __attribute__((ext_vector_type(4)));
268
269/**
270 * Vector version of the basic char type. Provides two char fields packed into a
271 * single 16 bit field with 16 bit alignment.
272 */
273typedef char char2 __attribute__((ext_vector_type(2)));
274/**
275 * Vector version of the basic char type. Provides three char fields packed into
276 * a single 32 bit field with 32 bit alignment.
277 */
278typedef char char3 __attribute__((ext_vector_type(3)));
279/**
280 * Vector version of the basic char type. Provides four char fields packed into
281 * a single 32 bit field with 32 bit alignment.
282 */
283typedef char char4 __attribute__((ext_vector_type(4)));
284
285/**
286 * Vector version of the basic short type. Provides two short fields packed into
287 * a single 32 bit field with 32 bit alignment.
288 */
289typedef short short2 __attribute__((ext_vector_type(2)));
290/**
291 * Vector version of the basic short type. Provides three short fields packed
292 * into a single 64 bit field with 64 bit alignment.
293 */
294typedef short short3 __attribute__((ext_vector_type(3)));
295/**
296 * Vector version of the basic short type. Provides four short fields packed
297 * into a single 64 bit field with 64 bit alignment.
298 */
299typedef short short4 __attribute__((ext_vector_type(4)));
300
301/**
302 * Vector version of the basic int type. Provides two int fields packed into a
303 * single 64 bit field with 64 bit alignment.
304 */
305typedef int int2 __attribute__((ext_vector_type(2)));
306/**
307 * Vector version of the basic int type. Provides three int fields packed into a
308 * single 128 bit field with 128 bit alignment.
309 */
310typedef int int3 __attribute__((ext_vector_type(3)));
311/**
312 * Vector version of the basic int type. Provides two four fields packed into a
313 * single 128 bit field with 128 bit alignment.
314 */
315typedef int int4 __attribute__((ext_vector_type(4)));
316
317/**
318 * Vector version of the basic long type. Provides two long fields packed into a
319 * single 128 bit field with 128 bit alignment.
320 */
321typedef long long2 __attribute__((ext_vector_type(2)));
322/**
323 * Vector version of the basic long type. Provides three long fields packed into
324 * a single 256 bit field with 256 bit alignment.
325 */
326typedef long long3 __attribute__((ext_vector_type(3)));
327/**
328 * Vector version of the basic long type. Provides four long fields packed into
329 * a single 256 bit field with 256 bit alignment.
330 */
331typedef long long4 __attribute__((ext_vector_type(4)));
332
333/**
334 * \brief 4x4 float matrix
335 *
336 * Native holder for RS matrix.  Elements are stored in the array at the
337 * location [row*4 + col]
338 */
339typedef struct {
340    float m[16];
341} rs_matrix4x4;
342/**
343 * \brief 3x3 float matrix
344 *
345 * Native holder for RS matrix.  Elements are stored in the array at the
346 * location [row*3 + col]
347 */
348typedef struct {
349    float m[9];
350} rs_matrix3x3;
351/**
352 * \brief 2x2 float matrix
353 *
354 * Native holder for RS matrix.  Elements are stored in the array at the
355 * location [row*2 + col]
356 */
357typedef struct {
358    float m[4];
359} rs_matrix2x2;
360
361/**
362 * quaternion type for use with the quaternion functions
363 */
364typedef float4 rs_quaternion;
365
366#define RS_PACKED __attribute__((packed, aligned(4)))
367#define NULL ((const void *)0)
368
369#if (defined(RS_VERSION) && (RS_VERSION >= 14))
370
371/**
372 * \brief Enum for selecting cube map faces
373 */
374typedef enum {
375    RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X = 0,
376    RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_X = 1,
377    RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Y = 2,
378    RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Y = 3,
379    RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Z = 4,
380    RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Z = 5
381} rs_allocation_cubemap_face;
382
383/**
384 * \brief Bitfield to specify the usage types for an allocation.
385 *
386 * These values are ORed together to specify which usages or memory spaces are
387 * relevant to an allocation or an operation on an allocation.
388 */
389typedef enum {
390    RS_ALLOCATION_USAGE_SCRIPT = 0x0001,
391    RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE = 0x0002,
392    RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004,
393    RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008,
394    RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010
395} rs_allocation_usage_type;
396
397#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
398
399#endif
400