• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  #ifndef RENDER_SCRIPT_DEFINES_H
18  #define RENDER_SCRIPT_DEFINES_H
19  
20  #include <stdint.h>
21  #include <sys/types.h>
22  
23  #ifdef __cplusplus
24  extern "C" {
25  #endif
26  
27  //////////////////////////////////////////////////////
28  //
29  
30  typedef void * RsAsyncVoidPtr;
31  
32  typedef void * RsAllocation;
33  typedef void * RsAnimation;
34  typedef void * RsClosure;
35  typedef void * RsContext;
36  typedef void * RsDevice;
37  typedef void * RsElement;
38  typedef void * RsFile;
39  typedef void * RsFont;
40  typedef void * RsSampler;
41  typedef void * RsScript;
42  typedef void * RsScriptKernelID;
43  typedef void * RsScriptInvokeID;
44  typedef void * RsScriptFieldID;
45  typedef void * RsScriptMethodID;
46  typedef void * RsScriptGroup;
47  typedef void * RsScriptGroup2;
48  typedef void * RsMesh;
49  typedef void * RsPath;
50  typedef void * RsType;
51  typedef void * RsObjectBase;
52  
53  typedef void * RsProgram;
54  typedef void * RsProgramVertex;
55  typedef void * RsProgramFragment;
56  typedef void * RsProgramStore;
57  typedef void * RsProgramRaster;
58  
59  typedef void * RsNativeWindow;
60  
61  typedef void (* RsBitmapCallback_t)(void *);
62  
63  typedef struct {
64      float m[16];
65  } rs_matrix4x4;
66  
67  typedef struct {
68      float m[9];
69  } rs_matrix3x3;
70  
71  typedef struct {
72      float m[4];
73  } rs_matrix2x2;
74  
75  enum RsDeviceParam {
76      RS_DEVICE_PARAM_FORCE_SOFTWARE_GL,
77      RS_DEVICE_PARAM_COUNT
78  };
79  
80  enum RsContextType {
81      RS_CONTEXT_TYPE_NORMAL,
82      RS_CONTEXT_TYPE_DEBUG,
83      RS_CONTEXT_TYPE_PROFILE
84  };
85  
86  
87  enum RsAllocationUsageType {
88      RS_ALLOCATION_USAGE_SCRIPT = 0x0001,
89      RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE = 0x0002,
90      RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004,
91      RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008,
92      RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010,
93      RS_ALLOCATION_USAGE_IO_INPUT = 0x0020,
94      RS_ALLOCATION_USAGE_IO_OUTPUT = 0x0040,
95      RS_ALLOCATION_USAGE_SHARED = 0x0080,
96  
97      RS_ALLOCATION_USAGE_INCREMENTAL_SUPPORT = 0x1000,
98      RS_ALLOCATION_USAGE_OEM = 0x8000,
99      RS_ALLOCATION_USAGE_ALL = 0x80FF
100  };
101  
102  enum RsAllocationMipmapControl {
103      RS_ALLOCATION_MIPMAP_NONE = 0,
104      RS_ALLOCATION_MIPMAP_FULL = 1,
105      RS_ALLOCATION_MIPMAP_ON_SYNC_TO_TEXTURE = 2
106  };
107  
108  enum RsAllocationCubemapFace {
109      RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X = 0,
110      RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_X = 1,
111      RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Y = 2,
112      RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Y = 3,
113      RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Z = 4,
114      RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Z = 5
115  };
116  
117  enum RsDataType {
118      RS_TYPE_NONE = 0,
119      RS_TYPE_FLOAT_16,
120      RS_TYPE_FLOAT_32,
121      RS_TYPE_FLOAT_64,
122      RS_TYPE_SIGNED_8,
123      RS_TYPE_SIGNED_16,
124      RS_TYPE_SIGNED_32,
125      RS_TYPE_SIGNED_64,
126      RS_TYPE_UNSIGNED_8,
127      RS_TYPE_UNSIGNED_16,
128      RS_TYPE_UNSIGNED_32,
129      RS_TYPE_UNSIGNED_64,
130  
131      RS_TYPE_BOOLEAN,
132  
133      RS_TYPE_UNSIGNED_5_6_5,
134      RS_TYPE_UNSIGNED_5_5_5_1,
135      RS_TYPE_UNSIGNED_4_4_4_4,
136  
137      RS_TYPE_MATRIX_4X4,
138      RS_TYPE_MATRIX_3X3,
139      RS_TYPE_MATRIX_2X2,
140  
141      RS_TYPE_ELEMENT = 1000,
142      RS_TYPE_TYPE,
143      RS_TYPE_ALLOCATION,
144      RS_TYPE_SAMPLER,
145      RS_TYPE_SCRIPT,
146      RS_TYPE_MESH,
147      RS_TYPE_PROGRAM_FRAGMENT,
148      RS_TYPE_PROGRAM_VERTEX,
149      RS_TYPE_PROGRAM_RASTER,
150      RS_TYPE_PROGRAM_STORE,
151      RS_TYPE_FONT,
152  
153      RS_TYPE_INVALID = 10000,
154  };
155  
156  enum RsDataKind {
157      RS_KIND_USER,
158  
159      RS_KIND_PIXEL_L = 7,
160      RS_KIND_PIXEL_A,
161      RS_KIND_PIXEL_LA,
162      RS_KIND_PIXEL_RGB,
163      RS_KIND_PIXEL_RGBA,
164      RS_KIND_PIXEL_DEPTH,
165      RS_KIND_PIXEL_YUV,
166  
167      RS_KIND_INVALID = 100,
168  };
169  
170  enum RsYuvFormat {
171      RS_YUV_NONE    = 0,
172      RS_YUV_YV12    = 0x32315659, // HAL_PIXEL_FORMAT_YV12 in system/graphics.h
173      RS_YUV_NV21    = 0x11,       // HAL_PIXEL_FORMAT_YCrCb_420_SP
174      RS_YUV_420_888 = 0x23,       // HAL_PIXEL_FORMAT_YCbCr_420_888
175  };
176  
177  enum RsSamplerParam {
178      RS_SAMPLER_MIN_FILTER,
179      RS_SAMPLER_MAG_FILTER,
180      RS_SAMPLER_WRAP_S,
181      RS_SAMPLER_WRAP_T,
182      RS_SAMPLER_WRAP_R,
183      RS_SAMPLER_ANISO
184  };
185  
186  enum RsSamplerValue {
187      RS_SAMPLER_NEAREST,
188      RS_SAMPLER_LINEAR,
189      RS_SAMPLER_LINEAR_MIP_LINEAR,
190      RS_SAMPLER_WRAP,
191      RS_SAMPLER_CLAMP,
192      RS_SAMPLER_LINEAR_MIP_NEAREST,
193      RS_SAMPLER_MIRRORED_REPEAT,
194  
195      RS_SAMPLER_INVALID = 100,
196  };
197  
198  enum RsDimension {
199      RS_DIMENSION_X,
200      RS_DIMENSION_Y,
201      RS_DIMENSION_Z,
202      RS_DIMENSION_LOD,
203      RS_DIMENSION_FACE,
204  
205      RS_DIMENSION_ARRAY_0 = 100,
206      RS_DIMENSION_ARRAY_1,
207      RS_DIMENSION_ARRAY_2,
208      RS_DIMENSION_ARRAY_3,
209      RS_DIMENSION_MAX = RS_DIMENSION_ARRAY_3
210  };
211  
212  
213  enum RsError {
214      RS_ERROR_NONE = 0,
215      RS_ERROR_BAD_SHADER = 1,
216      RS_ERROR_BAD_SCRIPT = 2,
217      RS_ERROR_BAD_VALUE = 3,
218      RS_ERROR_OUT_OF_MEMORY = 4,
219      RS_ERROR_DRIVER = 5,
220  
221      // Errors that only occur in the debug context.
222      RS_ERROR_FATAL_DEBUG = 0x0800,
223  
224      RS_ERROR_FATAL_UNKNOWN = 0x1000,
225      RS_ERROR_FATAL_DRIVER = 0x1001,
226      RS_ERROR_FATAL_PROGRAM_LINK = 0x1002
227  };
228  
229  enum RsForEachStrategy {
230      RS_FOR_EACH_STRATEGY_SERIAL = 0,
231      RS_FOR_EACH_STRATEGY_DONT_CARE = 1,
232      RS_FOR_EACH_STRATEGY_DST_LINEAR = 2,
233      RS_FOR_EACH_STRATEGY_TILE_SMALL = 3,
234      RS_FOR_EACH_STRATEGY_TILE_MEDIUM = 4,
235      RS_FOR_EACH_STRATEGY_TILE_LARGE = 5
236  };
237  
238  // Script to Script
239  typedef struct {
240      enum RsForEachStrategy strategy;
241      uint32_t xStart;
242      uint32_t xEnd;
243      uint32_t yStart;
244      uint32_t yEnd;
245      uint32_t zStart;
246      uint32_t zEnd;
247      uint32_t arrayStart;
248      uint32_t arrayEnd;
249      uint32_t array2Start;
250      uint32_t array2End;
251      uint32_t array3Start;
252      uint32_t array3End;
253      uint32_t array4Start;
254      uint32_t array4End;
255  
256  } RsScriptCall;
257  
258  enum RsContextFlags {
259      RS_CONTEXT_SYNCHRONOUS      = 0x0001,
260      RS_CONTEXT_LOW_LATENCY      = 0x0002,
261      RS_CONTEXT_LOW_POWER        = 0x0004,
262      RS_CONTEXT_WAIT_FOR_ATTACH  = 0x0008
263  };
264  
265  enum RsBlasTranspose {
266      RsBlasNoTrans=111,
267      RsBlasTrans=112,
268      RsBlasConjTrans=113
269  };
270  
271  enum RsBlasUplo {
272      RsBlasUpper=121,
273      RsBlasLower=122
274  };
275  
276  enum RsBlasDiag {
277      RsBlasNonUnit=131,
278      RsBlasUnit=132
279  };
280  
281  enum RsBlasSide {
282      RsBlasLeft=141,
283      RsBlasRight=142
284  };
285  
286  enum RsBlasFunction {
287      RsBlas_nop = 0,
288      RsBlas_sdsdot = 1,
289      RsBlas_dsdot = 2,
290      RsBlas_sdot = 3,
291      RsBlas_ddot = 4,
292      RsBlas_cdotu_sub = 5,
293      RsBlas_cdotc_sub = 6,
294      RsBlas_zdotu_sub = 7,
295      RsBlas_zdotc_sub = 8,
296      RsBlas_snrm2 = 9,
297      RsBlas_sasum = 10,
298      RsBlas_dnrm2 = 11,
299      RsBlas_dasum = 12,
300      RsBlas_scnrm2 = 13,
301      RsBlas_scasum = 14,
302      RsBlas_dznrm2 = 15,
303      RsBlas_dzasum = 16,
304      RsBlas_isamax = 17,
305      RsBlas_idamax = 18,
306      RsBlas_icamax = 19,
307      RsBlas_izamax = 20,
308      RsBlas_sswap = 21,
309      RsBlas_scopy = 22,
310      RsBlas_saxpy = 23,
311      RsBlas_dswap = 24,
312      RsBlas_dcopy = 25,
313      RsBlas_daxpy = 26,
314      RsBlas_cswap = 27,
315      RsBlas_ccopy = 28,
316      RsBlas_caxpy = 29,
317      RsBlas_zswap = 30,
318      RsBlas_zcopy = 31,
319      RsBlas_zaxpy = 32,
320      RsBlas_srotg = 33,
321      RsBlas_srotmg = 34,
322      RsBlas_srot = 35,
323      RsBlas_srotm = 36,
324      RsBlas_drotg = 37,
325      RsBlas_drotmg = 38,
326      RsBlas_drot = 39,
327      RsBlas_drotm = 40,
328      RsBlas_sscal = 41,
329      RsBlas_dscal = 42,
330      RsBlas_cscal = 43,
331      RsBlas_zscal = 44,
332      RsBlas_csscal = 45,
333      RsBlas_zdscal = 46,
334      RsBlas_sgemv = 47,
335      RsBlas_sgbmv = 48,
336      RsBlas_strmv = 49,
337      RsBlas_stbmv = 50,
338      RsBlas_stpmv = 51,
339      RsBlas_strsv = 52,
340      RsBlas_stbsv = 53,
341      RsBlas_stpsv = 54,
342      RsBlas_dgemv = 55,
343      RsBlas_dgbmv = 56,
344      RsBlas_dtrmv = 57,
345      RsBlas_dtbmv = 58,
346      RsBlas_dtpmv = 59,
347      RsBlas_dtrsv = 60,
348      RsBlas_dtbsv = 61,
349      RsBlas_dtpsv = 62,
350      RsBlas_cgemv = 63,
351      RsBlas_cgbmv = 64,
352      RsBlas_ctrmv = 65,
353      RsBlas_ctbmv = 66,
354      RsBlas_ctpmv = 67,
355      RsBlas_ctrsv = 68,
356      RsBlas_ctbsv = 69,
357      RsBlas_ctpsv = 70,
358      RsBlas_zgemv = 71,
359      RsBlas_zgbmv = 72,
360      RsBlas_ztrmv = 73,
361      RsBlas_ztbmv = 74,
362      RsBlas_ztpmv = 75,
363      RsBlas_ztrsv = 76,
364      RsBlas_ztbsv = 77,
365      RsBlas_ztpsv = 78,
366      RsBlas_ssymv = 79,
367      RsBlas_ssbmv = 80,
368      RsBlas_sspmv = 81,
369      RsBlas_sger = 82,
370      RsBlas_ssyr = 83,
371      RsBlas_sspr = 84,
372      RsBlas_ssyr2 = 85,
373      RsBlas_sspr2 = 86,
374      RsBlas_dsymv = 87,
375      RsBlas_dsbmv = 88,
376      RsBlas_dspmv = 89,
377      RsBlas_dger = 90,
378      RsBlas_dsyr = 91,
379      RsBlas_dspr = 92,
380      RsBlas_dsyr2 = 93,
381      RsBlas_dspr2 = 94,
382      RsBlas_chemv = 95,
383      RsBlas_chbmv = 96,
384      RsBlas_chpmv = 97,
385      RsBlas_cgeru = 98,
386      RsBlas_cgerc = 99,
387      RsBlas_cher = 100,
388      RsBlas_chpr = 101,
389      RsBlas_cher2 = 102,
390      RsBlas_chpr2 = 103,
391      RsBlas_zhemv = 104,
392      RsBlas_zhbmv = 105,
393      RsBlas_zhpmv = 106,
394      RsBlas_zgeru = 107,
395      RsBlas_zgerc = 108,
396      RsBlas_zher = 109,
397      RsBlas_zhpr = 110,
398      RsBlas_zher2 = 111,
399      RsBlas_zhpr2 = 112,
400      RsBlas_sgemm = 113,
401      RsBlas_ssymm = 114,
402      RsBlas_ssyrk = 115,
403      RsBlas_ssyr2k = 116,
404      RsBlas_strmm = 117,
405      RsBlas_strsm = 118,
406      RsBlas_dgemm = 119,
407      RsBlas_dsymm = 120,
408      RsBlas_dsyrk = 121,
409      RsBlas_dsyr2k = 122,
410      RsBlas_dtrmm = 123,
411      RsBlas_dtrsm = 124,
412      RsBlas_cgemm = 125,
413      RsBlas_csymm = 126,
414      RsBlas_csyrk = 127,
415      RsBlas_csyr2k = 128,
416      RsBlas_ctrmm = 129,
417      RsBlas_ctrsm = 130,
418      RsBlas_zgemm = 131,
419      RsBlas_zsymm = 132,
420      RsBlas_zsyrk = 133,
421      RsBlas_zsyr2k = 134,
422      RsBlas_ztrmm = 135,
423      RsBlas_ztrsm = 136,
424      RsBlas_chemm = 137,
425      RsBlas_cherk = 138,
426      RsBlas_cher2k = 139,
427      RsBlas_zhemm = 140,
428      RsBlas_zherk = 141,
429      RsBlas_zher2k = 142,
430  
431      // BLAS extensions start here
432      RsBlas_bnnm = 1000,
433  };
434  
435  // custom complex types because of NDK support
436  typedef struct {
437      float r;
438      float i;
439  } RsFloatComplex;
440  
441  typedef struct {
442      double r;
443      double i;
444  } RsDoubleComplex;
445  
446  typedef union {
447      float f;
448      RsFloatComplex c;
449      double d;
450      RsDoubleComplex z;
451  } RsBlasScalar;
452  
453  typedef struct {
454      RsBlasFunction func;
455      RsBlasTranspose transA;
456      RsBlasTranspose transB;
457      RsBlasUplo uplo;
458      RsBlasDiag diag;
459      RsBlasSide side;
460      int M;
461      int N;
462      int K;
463      RsBlasScalar alpha;
464      RsBlasScalar beta;
465      int incX;
466      int incY;
467      int KL;
468      int KU;
469      uint8_t a_offset;
470      uint8_t b_offset;
471      int32_t c_offset;
472      int32_t c_mult_int;
473  } RsBlasCall;
474  
475  enum RsGlobalProperty {
476      RS_GLOBAL_TYPE     = 0x0000FFFF,
477      RS_GLOBAL_CONSTANT = 0x00010000,
478      RS_GLOBAL_STATIC   = 0x00020000,
479      RS_GLOBAL_POINTER  = 0x00040000
480  };
481  
482  // Special symbols embedded into a shared object compiled by bcc.
483  static const char kRoot[] = "root";
484  static const char kInit[] = "init";
485  static const char kRsDtor[] = ".rs.dtor";
486  static const char kRsInfo[] = ".rs.info";
487  static const char kRsGlobalEntries[] = ".rs.global_entries";
488  static const char kRsGlobalNames[] = ".rs.global_names";
489  static const char kRsGlobalAddresses[] = ".rs.global_addresses";
490  static const char kRsGlobalSizes[] = ".rs.global_sizes";
491  static const char kRsGlobalProperties[] = ".rs.global_properties";
492  
getGlobalRsType(uint32_t properties)493  static inline uint32_t getGlobalRsType(uint32_t properties) {
494      return properties & RS_GLOBAL_TYPE;
495  }
isGlobalConstant(uint32_t properties)496  static inline bool isGlobalConstant(uint32_t properties) {
497      return properties & RS_GLOBAL_CONSTANT;
498  }
isGlobalStatic(uint32_t properties)499  static inline bool isGlobalStatic(uint32_t properties) {
500      return properties & RS_GLOBAL_STATIC;
501  }
isGlobalPointer(uint32_t properties)502  static inline bool isGlobalPointer(uint32_t properties) {
503      return properties & RS_GLOBAL_POINTER;
504  }
505  
506  #ifdef __cplusplus
507  };
508  #endif
509  
510  #endif // RENDER_SCRIPT_DEFINES_H
511