1 /* 2 * Copyright (C) 2013 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 /* Constants */ 45 #define M_E 2.718281828459045235360287471352662498f /* e */ 46 #define M_LOG2E 1.442695040888963407359924681001892137f /* log_2 e */ 47 #define M_LOG10E 0.434294481903251827651128918916605082f /* log_10 e */ 48 #define M_LN2 0.693147180559945309417232121458176568f /* log_e 2 */ 49 #define M_LN10 2.302585092994045684017991454684364208f /* log_e 10 */ 50 #define M_PI 3.141592653589793238462643383279502884f /* pi */ 51 #define M_PI_2 1.570796326794896619231321691639751442f /* pi/2 */ 52 #define M_PI_4 0.785398163397448309615660845819875721f /* pi/4 */ 53 #define M_1_PI 0.318309886183790671537767526745028724f /* 1/pi */ 54 #define M_2_PIl 0.636619772367581343075535053490057448f /* 2/pi */ 55 #define M_2_SQRTPI 1.128379167095512573896158903121545172f /* 2/sqrt(pi) */ 56 #define M_SQRT2 1.414213562373095048801688724209698079f /* sqrt(2) */ 57 #define M_SQRT1_2 0.707106781186547524400844362104849039f /* 1/sqrt(2) */ 58 59 #include "stdbool.h" 60 /** 61 * 8 bit integer type 62 */ 63 typedef char int8_t; 64 /** 65 * 16 bit integer type 66 */ 67 typedef short int16_t; 68 /** 69 * 32 bit integer type 70 */ 71 typedef int int32_t; 72 /** 73 * 64 bit integer type 74 */ 75 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 76 typedef long int64_t; 77 #else 78 typedef long long int64_t; 79 #endif 80 /** 81 * 8 bit unsigned integer type 82 */ 83 typedef unsigned char uint8_t; 84 /** 85 * 16 bit unsigned integer type 86 */ 87 typedef unsigned short uint16_t; 88 /** 89 * 32 bit unsigned integer type 90 */ 91 typedef unsigned int uint32_t; 92 /** 93 * 64 bit unsigned integer type 94 */ 95 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 96 typedef unsigned long uint64_t; 97 #else 98 typedef unsigned long long uint64_t; 99 #endif 100 /** 101 * 8 bit unsigned integer type 102 */ 103 typedef uint8_t uchar; 104 /** 105 * 16 bit unsigned integer type 106 */ 107 typedef uint16_t ushort; 108 /** 109 * 32 bit unsigned integer type 110 */ 111 typedef uint32_t uint; 112 /** 113 * Typedef for unsigned long (use for 64-bit unsigned integers) 114 */ 115 typedef uint64_t ulong; 116 /** 117 * Typedef for size_t 118 */ 119 #ifndef __LP64__ 120 typedef uint32_t size_t; 121 typedef int32_t ssize_t; 122 #else 123 typedef uint64_t size_t; 124 typedef int64_t ssize_t; 125 #endif 126 127 #ifndef __LP64__ 128 #define RS_BASE_OBJ typedef struct { const int* const p; } __attribute__((packed, aligned(4))) 129 #else 130 #define RS_BASE_OBJ typedef struct { const long* const p; const long* const r; const long* const v1; const long* const v2; } 131 #endif 132 133 /** 134 * \brief Opaque handle to a RenderScript element. 135 * 136 * See: android.renderscript.Element 137 */ 138 RS_BASE_OBJ rs_element; 139 /** 140 * \brief Opaque handle to a RenderScript type. 141 * 142 * See: android.renderscript.Type 143 */ 144 RS_BASE_OBJ rs_type; 145 /** 146 * \brief Opaque handle to a RenderScript allocation. 147 * 148 * See: android.renderscript.Allocation 149 */ 150 RS_BASE_OBJ rs_allocation; 151 /** 152 * \brief Opaque handle to a RenderScript sampler object. 153 * 154 * See: android.renderscript.Sampler 155 */ 156 RS_BASE_OBJ rs_sampler; 157 /** 158 * \brief Opaque handle to a RenderScript script object. 159 * 160 * See: android.renderscript.ScriptC 161 */ 162 RS_BASE_OBJ rs_script; 163 164 #ifndef __LP64__ 165 /** 166 * \brief Opaque handle to a RenderScript mesh object. 167 * 168 * See: android.renderscript.Mesh 169 */ 170 typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_mesh; 171 /** 172 * \brief Opaque handle to a RenderScript Path object. 173 * 174 * See: android.renderscript.Path 175 */ 176 typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_path; 177 /** 178 * \brief Opaque handle to a RenderScript ProgramFragment object. 179 * 180 * See: android.renderscript.ProgramFragment 181 */ 182 typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_fragment; 183 /** 184 * \brief Opaque handle to a RenderScript ProgramVertex object. 185 * 186 * See: android.renderscript.ProgramVertex 187 */ 188 typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_vertex; 189 /** 190 * \brief Opaque handle to a RenderScript ProgramRaster object. 191 * 192 * See: android.renderscript.ProgramRaster 193 */ 194 typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_raster; 195 /** 196 * \brief Opaque handle to a RenderScript ProgramStore object. 197 * 198 * See: android.renderscript.ProgramStore 199 */ 200 typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_program_store; 201 /** 202 * \brief Opaque handle to a RenderScript font object. 203 * 204 * See: android.renderscript.Font 205 */ 206 typedef struct { const int* const p; } __attribute__((packed, aligned(4))) rs_font; 207 #endif // __LP64__ 208 209 /** 210 * Vector version of the basic float type. 211 * Provides two float fields packed into a single 64 bit field with 64 bit 212 * alignment. 213 */ 214 typedef float float2 __attribute__((ext_vector_type(2))); 215 /** 216 * Vector version of the basic float type. Provides three float fields packed 217 * into a single 128 bit field with 128 bit alignment. 218 */ 219 typedef float float3 __attribute__((ext_vector_type(3))); 220 /** 221 * Vector version of the basic float type. 222 * Provides four float fields packed into a single 128 bit field with 128 bit 223 * alignment. 224 */ 225 typedef float float4 __attribute__((ext_vector_type(4))); 226 227 /** 228 * Vector version of the basic double type. Provides two double fields packed 229 * into a single 128 bit field with 128 bit alignment. 230 */ 231 typedef double double2 __attribute__((ext_vector_type(2))); 232 /** 233 * Vector version of the basic double type. Provides three double fields packed 234 * into a single 256 bit field with 256 bit alignment. 235 */ 236 typedef double double3 __attribute__((ext_vector_type(3))); 237 /** 238 * Vector version of the basic double type. Provides four double fields packed 239 * into a single 256 bit field with 256 bit alignment. 240 */ 241 typedef double double4 __attribute__((ext_vector_type(4))); 242 243 /** 244 * Vector version of the basic uchar type. Provides two uchar fields packed 245 * into a single 16 bit field with 16 bit alignment. 246 */ 247 typedef uchar uchar2 __attribute__((ext_vector_type(2))); 248 /** 249 * Vector version of the basic uchar type. Provides three uchar fields packed 250 * into a single 32 bit field with 32 bit alignment. 251 */ 252 typedef uchar uchar3 __attribute__((ext_vector_type(3))); 253 /** 254 * Vector version of the basic uchar type. Provides four uchar fields packed 255 * into a single 32 bit field with 32 bit alignment. 256 */ 257 typedef uchar uchar4 __attribute__((ext_vector_type(4))); 258 259 /** 260 * Vector version of the basic ushort type. Provides two ushort fields packed 261 * into a single 32 bit field with 32 bit alignment. 262 */ 263 typedef ushort ushort2 __attribute__((ext_vector_type(2))); 264 /** 265 * Vector version of the basic ushort type. Provides three ushort fields packed 266 * into a single 64 bit field with 64 bit alignment. 267 */ 268 typedef ushort ushort3 __attribute__((ext_vector_type(3))); 269 /** 270 * Vector version of the basic ushort type. Provides four ushort fields packed 271 * into a single 64 bit field with 64 bit alignment. 272 */ 273 typedef ushort ushort4 __attribute__((ext_vector_type(4))); 274 275 /** 276 * Vector version of the basic uint type. Provides two uint fields packed into a 277 * single 64 bit field with 64 bit alignment. 278 */ 279 typedef uint uint2 __attribute__((ext_vector_type(2))); 280 /** 281 * Vector version of the basic uint type. Provides three uint fields packed into 282 * a single 128 bit field with 128 bit alignment. 283 */ 284 typedef uint uint3 __attribute__((ext_vector_type(3))); 285 /** 286 * Vector version of the basic uint type. Provides four uint fields packed into 287 * a single 128 bit field with 128 bit alignment. 288 */ 289 typedef uint uint4 __attribute__((ext_vector_type(4))); 290 291 /** 292 * Vector version of the basic ulong type. Provides two ulong fields packed into 293 * a single 128 bit field with 128 bit alignment. 294 */ 295 typedef ulong ulong2 __attribute__((ext_vector_type(2))); 296 /** 297 * Vector version of the basic ulong type. Provides three ulong fields packed 298 * into a single 256 bit field with 256 bit alignment. 299 */ 300 typedef ulong ulong3 __attribute__((ext_vector_type(3))); 301 /** 302 * Vector version of the basic ulong type. Provides four ulong fields packed 303 * into a single 256 bit field with 256 bit alignment. 304 */ 305 typedef ulong ulong4 __attribute__((ext_vector_type(4))); 306 307 /** 308 * Vector version of the basic char type. Provides two char fields packed into a 309 * single 16 bit field with 16 bit alignment. 310 */ 311 typedef char char2 __attribute__((ext_vector_type(2))); 312 /** 313 * Vector version of the basic char type. Provides three char fields packed into 314 * a single 32 bit field with 32 bit alignment. 315 */ 316 typedef char char3 __attribute__((ext_vector_type(3))); 317 /** 318 * Vector version of the basic char type. Provides four char fields packed into 319 * a single 32 bit field with 32 bit alignment. 320 */ 321 typedef char char4 __attribute__((ext_vector_type(4))); 322 323 /** 324 * Vector version of the basic short type. Provides two short fields packed into 325 * a single 32 bit field with 32 bit alignment. 326 */ 327 typedef short short2 __attribute__((ext_vector_type(2))); 328 /** 329 * Vector version of the basic short type. Provides three short fields packed 330 * into a single 64 bit field with 64 bit alignment. 331 */ 332 typedef short short3 __attribute__((ext_vector_type(3))); 333 /** 334 * Vector version of the basic short type. Provides four short fields packed 335 * into a single 64 bit field with 64 bit alignment. 336 */ 337 typedef short short4 __attribute__((ext_vector_type(4))); 338 339 /** 340 * Vector version of the basic int type. Provides two int fields packed into a 341 * single 64 bit field with 64 bit alignment. 342 */ 343 typedef int int2 __attribute__((ext_vector_type(2))); 344 /** 345 * Vector version of the basic int type. Provides three int fields packed into a 346 * single 128 bit field with 128 bit alignment. 347 */ 348 typedef int int3 __attribute__((ext_vector_type(3))); 349 /** 350 * Vector version of the basic int type. Provides two four fields packed into a 351 * single 128 bit field with 128 bit alignment. 352 */ 353 typedef int int4 __attribute__((ext_vector_type(4))); 354 355 /** 356 * Vector version of the basic long type. Provides two long fields packed into a 357 * single 128 bit field with 128 bit alignment. 358 */ 359 typedef long long2 __attribute__((ext_vector_type(2))); 360 /** 361 * Vector version of the basic long type. Provides three long fields packed into 362 * a single 256 bit field with 256 bit alignment. 363 */ 364 typedef long long3 __attribute__((ext_vector_type(3))); 365 /** 366 * Vector version of the basic long type. Provides four long fields packed into 367 * a single 256 bit field with 256 bit alignment. 368 */ 369 typedef long long4 __attribute__((ext_vector_type(4))); 370 371 /** 372 * \brief 4x4 float matrix 373 * 374 * Native holder for RS matrix. Elements are stored in the array at the 375 * location [row*4 + col] 376 */ 377 typedef struct { 378 float m[16]; 379 } rs_matrix4x4; 380 /** 381 * \brief 3x3 float matrix 382 * 383 * Native holder for RS matrix. Elements are stored in the array at the 384 * location [row*3 + col] 385 */ 386 typedef struct { 387 float m[9]; 388 } rs_matrix3x3; 389 /** 390 * \brief 2x2 float matrix 391 * 392 * Native holder for RS matrix. Elements are stored in the array at the 393 * location [row*2 + col] 394 */ 395 typedef struct { 396 float m[4]; 397 } rs_matrix2x2; 398 399 /** 400 * quaternion type for use with the quaternion functions 401 */ 402 typedef float4 rs_quaternion; 403 404 #define RS_PACKED __attribute__((packed, aligned(4))) 405 #define NULL ((void *)0) 406 407 #if (defined(RS_VERSION) && (RS_VERSION >= 14)) 408 409 /** 410 * \brief Enum for selecting cube map faces 411 */ 412 typedef enum { 413 RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X = 0, 414 RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_X = 1, 415 RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Y = 2, 416 RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Y = 3, 417 RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Z = 4, 418 RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Z = 5 419 } rs_allocation_cubemap_face; 420 421 /** 422 * \brief Bitfield to specify the usage types for an allocation. 423 * 424 * These values are ORed together to specify which usages or memory spaces are 425 * relevant to an allocation or an operation on an allocation. 426 */ 427 typedef enum { 428 RS_ALLOCATION_USAGE_SCRIPT = 0x0001, 429 RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE = 0x0002, 430 RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004, 431 RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008, 432 RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010 433 } rs_allocation_usage_type; 434 435 #endif //defined(RS_VERSION) && (RS_VERSION >= 14) 436 437 // New API's 438 #if (defined(RS_VERSION) && (RS_VERSION >= 16)) 439 440 #ifndef __LP64__ 441 /** 442 * Describes the way mesh vertex data is interpreted when rendering 443 * 444 **/ 445 typedef enum { 446 /** 447 * Vertex data will be rendered as a series of points 448 */ 449 RS_PRIMITIVE_POINT = 0, 450 /** 451 * Vertex pairs will be rendered as lines 452 */ 453 RS_PRIMITIVE_LINE = 1, 454 /** 455 * Vertex data will be rendered as a connected line strip 456 */ 457 RS_PRIMITIVE_LINE_STRIP = 2, 458 /** 459 * Vertices will be rendered as individual triangles 460 */ 461 RS_PRIMITIVE_TRIANGLE = 3, 462 /** 463 * Vertices will be rendered as a connected triangle strip 464 * defined by the first three vertices with each additional 465 * triangle defined by a new vertex 466 */ 467 RS_PRIMITIVE_TRIANGLE_STRIP = 4, 468 /** 469 * Vertices will be rendered as a sequence of triangles that all 470 * share first vertex as the origin 471 */ 472 RS_PRIMITIVE_TRIANGLE_FAN = 5, 473 474 /** 475 * Invalid primitive 476 */ 477 RS_PRIMITIVE_INVALID = 100, 478 } rs_primitive; 479 #endif // __LP64__ 480 481 /** 482 * \brief Enumeration for possible element data types 483 * 484 * DataType represents the basic type information for a basic element. The 485 * naming convention follows. For numeric types it is FLOAT, 486 * SIGNED, or UNSIGNED followed by the _BITS where BITS is the 487 * size of the data. BOOLEAN is a true / false (1,0) 488 * represented in an 8 bit container. The UNSIGNED variants 489 * with multiple bit definitions are for packed graphical data 490 * formats and represent vectors with per vector member sizes 491 * which are treated as a single unit for packing and alignment 492 * purposes. 493 * 494 * MATRIX the three matrix types contain FLOAT_32 elements and are treated 495 * as 32 bits for alignment purposes. 496 * 497 * RS_* objects. 32 bit opaque handles. 498 */ 499 typedef enum { 500 RS_TYPE_NONE = 0, 501 RS_TYPE_FLOAT_32 = 2, 502 RS_TYPE_FLOAT_64 = 3, 503 RS_TYPE_SIGNED_8 = 4, 504 RS_TYPE_SIGNED_16 = 5, 505 RS_TYPE_SIGNED_32 = 6, 506 RS_TYPE_SIGNED_64 = 7, 507 RS_TYPE_UNSIGNED_8 = 8, 508 RS_TYPE_UNSIGNED_16 = 9, 509 RS_TYPE_UNSIGNED_32 = 10, 510 RS_TYPE_UNSIGNED_64 = 11, 511 512 RS_TYPE_BOOLEAN = 12, 513 514 RS_TYPE_UNSIGNED_5_6_5 = 13, 515 RS_TYPE_UNSIGNED_5_5_5_1 = 14, 516 RS_TYPE_UNSIGNED_4_4_4_4 = 15, 517 518 RS_TYPE_MATRIX_4X4 = 16, 519 RS_TYPE_MATRIX_3X3 = 17, 520 RS_TYPE_MATRIX_2X2 = 18, 521 522 RS_TYPE_ELEMENT = 1000, 523 RS_TYPE_TYPE = 1001, 524 RS_TYPE_ALLOCATION = 1002, 525 RS_TYPE_SAMPLER = 1003, 526 RS_TYPE_SCRIPT = 1004, 527 RS_TYPE_MESH = 1005, 528 RS_TYPE_PROGRAM_FRAGMENT = 1006, 529 RS_TYPE_PROGRAM_VERTEX = 1007, 530 RS_TYPE_PROGRAM_RASTER = 1008, 531 RS_TYPE_PROGRAM_STORE = 1009, 532 RS_TYPE_FONT = 1010, 533 534 RS_TYPE_INVALID = 10000, 535 } rs_data_type; 536 537 /** 538 * \brief Enumeration for possible element data kind 539 * 540 * The special interpretation of the data if required. This is primarly 541 * useful for graphical data. USER indicates no special interpretation is 542 * expected. PIXEL is used in conjunction with the standard data types for 543 * representing texture formats. 544 */ 545 typedef enum { 546 RS_KIND_USER = 0, 547 548 RS_KIND_PIXEL_L = 7, 549 RS_KIND_PIXEL_A = 8, 550 RS_KIND_PIXEL_LA = 9, 551 RS_KIND_PIXEL_RGB = 10, 552 RS_KIND_PIXEL_RGBA = 11, 553 RS_KIND_PIXEL_DEPTH = 12, 554 RS_KIND_PIXEL_YUV = 13, 555 556 RS_KIND_INVALID = 100, 557 } rs_data_kind; 558 559 #ifndef __LP64__ 560 typedef enum { 561 /** 562 * Always drawn 563 */ 564 RS_DEPTH_FUNC_ALWAYS = 0, 565 /** 566 * Drawn if the incoming depth value is less than that in the 567 * depth buffer 568 */ 569 RS_DEPTH_FUNC_LESS = 1, 570 /** 571 * Drawn if the incoming depth value is less or equal to that in 572 * the depth buffer 573 */ 574 RS_DEPTH_FUNC_LEQUAL = 2, 575 /** 576 * Drawn if the incoming depth value is greater than that in the 577 * depth buffer 578 */ 579 RS_DEPTH_FUNC_GREATER = 3, 580 /** 581 * Drawn if the incoming depth value is greater or equal to that 582 * in the depth buffer 583 */ 584 RS_DEPTH_FUNC_GEQUAL = 4, 585 /** 586 * Drawn if the incoming depth value is equal to that in the 587 * depth buffer 588 */ 589 RS_DEPTH_FUNC_EQUAL = 5, 590 /** 591 * Drawn if the incoming depth value is not equal to that in the 592 * depth buffer 593 */ 594 RS_DEPTH_FUNC_NOTEQUAL = 6, 595 /** 596 * Invalid depth function 597 */ 598 RS_DEPTH_FUNC_INVALID = 100, 599 } rs_depth_func; 600 601 typedef enum { 602 RS_BLEND_SRC_ZERO = 0, 603 RS_BLEND_SRC_ONE = 1, 604 RS_BLEND_SRC_DST_COLOR = 2, 605 RS_BLEND_SRC_ONE_MINUS_DST_COLOR = 3, 606 RS_BLEND_SRC_SRC_ALPHA = 4, 607 RS_BLEND_SRC_ONE_MINUS_SRC_ALPHA = 5, 608 RS_BLEND_SRC_DST_ALPHA = 6, 609 RS_BLEND_SRC_ONE_MINUS_DST_ALPHA = 7, 610 RS_BLEND_SRC_SRC_ALPHA_SATURATE = 8, 611 612 RS_BLEND_SRC_INVALID = 100, 613 } rs_blend_src_func; 614 615 typedef enum { 616 RS_BLEND_DST_ZERO = 0, 617 RS_BLEND_DST_ONE = 1, 618 RS_BLEND_DST_SRC_COLOR = 2, 619 RS_BLEND_DST_ONE_MINUS_SRC_COLOR = 3, 620 RS_BLEND_DST_SRC_ALPHA = 4, 621 RS_BLEND_DST_ONE_MINUS_SRC_ALPHA = 5, 622 RS_BLEND_DST_DST_ALPHA = 6, 623 RS_BLEND_DST_ONE_MINUS_DST_ALPHA = 7, 624 625 RS_BLEND_DST_INVALID = 100, 626 } rs_blend_dst_func; 627 628 typedef enum { 629 RS_CULL_BACK = 0, 630 RS_CULL_FRONT = 1, 631 RS_CULL_NONE = 2, 632 633 RS_CULL_INVALID = 100, 634 } rs_cull_mode; 635 #endif //__LP64__ 636 637 typedef enum { 638 RS_SAMPLER_NEAREST = 0, 639 RS_SAMPLER_LINEAR = 1, 640 RS_SAMPLER_LINEAR_MIP_LINEAR = 2, 641 RS_SAMPLER_WRAP = 3, 642 RS_SAMPLER_CLAMP = 4, 643 RS_SAMPLER_LINEAR_MIP_NEAREST = 5, 644 RS_SAMPLER_MIRRORED_REPEAT = 6, 645 646 RS_SAMPLER_INVALID = 100, 647 } rs_sampler_value; 648 649 #endif // (defined(RS_VERSION) && (RS_VERSION >= 16)) 650 651 #endif // __RS_TYPES_RSH__ 652