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