• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _RS_STRUCTS_H_
2 #define _RS_STRUCTS_H_
3 
4 /*****************************************************************************
5  * CAUTION
6  *
7  * The following structure layout provides a more efficient way to access
8  * internal members of the C++ class Allocation owned by librs. Unfortunately,
9  * since this class has virtual members, we can't simply use offsetof() or any
10  * other compiler trickery to dynamically get the appropriate values at
11  * build-time. This layout may need to be updated whenever
12  * frameworks/base/libs/rs/rsAllocation.h is modified.
13  *
14  * Having the layout information available in this file allows us to
15  * accelerate functionality like rsAllocationGetDimX(). Without this
16  * information, we would not be able to inline the bitcode, thus resulting in
17  * potential runtime performance penalties for tight loops operating on
18  * allocations.
19  *
20  *****************************************************************************/
21 typedef enum {
22     RS_ALLOCATION_MIPMAP_NONE = 0,
23     RS_ALLOCATION_MIPMAP_FULL = 1,
24     RS_ALLOCATION_MIPMAP_ON_SYNC_TO_TEXTURE = 2
25 } rs_allocation_mipmap_control;
26 
27 typedef struct Allocation {
28     char __pad[32];
29     struct {
30         void * drv;
31         struct {
32             const void *type;
33             uint32_t usageFlags;
34             rs_allocation_mipmap_control mipmapControl;
35             uint32_t yuv;
36             uint32_t elementSizeBytes;
37             bool hasMipmaps;
38             bool hasFaces;
39             bool hasReferences;
40             void * usrPtr;
41             int32_t surfaceTextureID;
42             void * nativeBuffer;
43             int64_t timestamp;
44         } state;
45 
46         struct DrvState {
47             struct LodState {
48                 void * mallocPtr;
49                 size_t stride;
50                 uint32_t dimX;
51                 uint32_t dimY;
52                 uint32_t dimZ;
53             } lod[16/*android::renderscript::Allocation::MAX_LOD*/];
54             size_t faceOffset;
55             uint32_t lodCount;
56             uint32_t faceCount;
57 
58             struct YuvState {
59                 uint32_t shift;
60                 uint32_t step;
61             } yuv;
62         } drvState;
63     } mHal;
64 } Allocation_t;
65 
66 /*****************************************************************************
67  * CAUTION
68  *
69  * The following structure layout provides a more efficient way to access
70  * internal members of the C++ class ProgramStore owned by librs. Unfortunately,
71  * since this class has virtual members, we can't simply use offsetof() or any
72  * other compiler trickery to dynamically get the appropriate values at
73  * build-time. This layout may need to be updated whenever
74  * frameworks/base/libs/rs/rsProgramStore.h is modified.
75  *
76  * Having the layout information available in this file allows us to
77  * accelerate functionality like rsgProgramStoreGetDepthFunc(). Without this
78  * information, we would not be able to inline the bitcode, thus resulting in
79  * potential runtime performance penalties for tight loops operating on
80  * program store.
81  *
82  *****************************************************************************/
83 typedef struct ProgramStore {
84     char __pad[40];
85     struct {
86         struct {
87             bool ditherEnable;
88             bool colorRWriteEnable;
89             bool colorGWriteEnable;
90             bool colorBWriteEnable;
91             bool colorAWriteEnable;
92             rs_blend_src_func blendSrc;
93             rs_blend_dst_func blendDst;
94             bool depthWriteEnable;
95             rs_depth_func depthFunc;
96         } state;
97     } mHal;
98 } ProgramStore_t;
99 
100 /*****************************************************************************
101  * CAUTION
102  *
103  * The following structure layout provides a more efficient way to access
104  * internal members of the C++ class ProgramRaster owned by librs. Unfortunately,
105  * since this class has virtual members, we can't simply use offsetof() or any
106  * other compiler trickery to dynamically get the appropriate values at
107  * build-time. This layout may need to be updated whenever
108  * frameworks/base/libs/rs/rsProgramRaster.h is modified.
109  *
110  * Having the layout information available in this file allows us to
111  * accelerate functionality like rsgProgramRasterGetCullMode(). Without this
112  * information, we would not be able to inline the bitcode, thus resulting in
113  * potential runtime performance penalties for tight loops operating on
114  * program raster.
115  *
116  *****************************************************************************/
117 typedef struct ProgramRaster {
118     char __pad[36];
119     struct {
120         void * drv;
121         struct {
122             bool pointSprite;
123             rs_cull_mode cull;
124         } state;
125     } mHal;
126 } ProgramRaster_t;
127 
128 /*****************************************************************************
129  * CAUTION
130  *
131  * The following structure layout provides a more efficient way to access
132  * internal members of the C++ class Sampler owned by librs. Unfortunately,
133  * since this class has virtual members, we can't simply use offsetof() or any
134  * other compiler trickery to dynamically get the appropriate values at
135  * build-time. This layout may need to be updated whenever
136  * frameworks/base/libs/rs/rsSampler.h is modified.
137  *
138  * Having the layout information available in this file allows us to
139  * accelerate functionality like rsgProgramRasterGetMagFilter(). Without this
140  * information, we would not be able to inline the bitcode, thus resulting in
141  * potential runtime performance penalties for tight loops operating on
142  * samplers.
143  *
144  *****************************************************************************/
145 typedef struct Sampler {
146     char __pad[32];
147     struct {
148         void *drv;
149         struct {
150             rs_sampler_value magFilter;
151             rs_sampler_value minFilter;
152             rs_sampler_value wrapS;
153             rs_sampler_value wrapT;
154             rs_sampler_value wrapR;
155             float aniso;
156         } state;
157     } mHal;
158 } Sampler_t;
159 
160 /*****************************************************************************
161  * CAUTION
162  *
163  * The following structure layout provides a more efficient way to access
164  * internal members of the C++ class Element owned by librs. Unfortunately,
165  * since this class has virtual members, we can't simply use offsetof() or any
166  * other compiler trickery to dynamically get the appropriate values at
167  * build-time. This layout may need to be updated whenever
168  * frameworks/base/libs/rs/rsElement.h is modified.
169  *
170  * Having the layout information available in this file allows us to
171  * accelerate functionality like rsElementGetSubElementCount(). Without this
172  * information, we would not be able to inline the bitcode, thus resulting in
173  * potential runtime performance penalties for tight loops operating on
174  * elements.
175  *
176  *****************************************************************************/
177 typedef struct Element {
178     char __pad[32];
179     struct {
180         void *drv;
181         struct {
182             rs_data_type dataType;
183             rs_data_kind dataKind;
184             uint32_t vectorSize;
185             uint32_t elementSizeBytes;
186 
187             // Subelements
188             const void **fields;
189             uint32_t *fieldArraySizes;
190             const char **fieldNames;
191             uint32_t *fieldNameLengths;
192             uint32_t *fieldOffsetBytes;
193             uint32_t fieldsCount;
194         } state;
195     } mHal;
196 } Element_t;
197 
198 /*****************************************************************************
199  * CAUTION
200  *
201  * The following structure layout provides a more efficient way to access
202  * internal members of the C++ class Type owned by librs. Unfortunately,
203  * since this class has virtual members, we can't simply use offsetof() or any
204  * other compiler trickery to dynamically get the appropriate values at
205  * build-time. This layout may need to be updated whenever
206  * frameworks/base/libs/rs/rsType.h is modified.
207  *
208  * Having the layout information available in this file allows us to
209  * accelerate functionality like rsAllocationGetElement(). Without this
210  * information, we would not be able to inline the bitcode, thus resulting in
211  * potential runtime performance penalties for tight loops operating on
212  * types.
213  *
214  *****************************************************************************/
215 typedef struct Type {
216     char __pad[32];
217     struct {
218         void *drv;
219         struct {
220             const void * element;
221             uint32_t dimX;
222             uint32_t dimY;
223             uint32_t dimZ;
224             uint32_t *lodDimX;
225             uint32_t *lodDimY;
226             uint32_t *lodDimZ;
227             uint32_t *lodOffset;
228             uint32_t lodCount;
229             bool faces;
230         } state;
231     } mHal;
232 } Type_t;
233 
234 /*****************************************************************************
235  * CAUTION
236  *
237  * The following structure layout provides a more efficient way to access
238  * internal members of the C++ class Mesh owned by librs. Unfortunately,
239  * since this class has virtual members, we can't simply use offsetof() or any
240  * other compiler trickery to dynamically get the appropriate values at
241  * build-time. This layout may need to be updated whenever
242  * frameworks/base/libs/rs/rsMesh.h is modified.
243  *
244  * Having the layout information available in this file allows us to
245  * accelerate functionality like rsMeshGetVertexAllocationCount(). Without this
246  * information, we would not be able to inline the bitcode, thus resulting in
247  * potential runtime performance penalties for tight loops operating on
248  * meshes.
249  *
250  *****************************************************************************/
251 typedef struct Mesh {
252     char __pad[32];
253     struct {
254         void *drv;
255         struct {
256             void **vertexBuffers;
257             uint32_t vertexBuffersCount;
258 
259             // indexBuffers[i] could be NULL, in which case only primitives[i] is used
260             void **indexBuffers;
261             uint32_t indexBuffersCount;
262             rs_primitive *primitives;
263             uint32_t primitivesCount;
264         } state;
265     } mHal;
266 } Mesh_t;
267 #endif // _RS_CORE_H_
268