• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011-2012 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 RS_HAL_H
18 #define RS_HAL_H
19 
20 #include <rsDefines.h>
21 
22 struct ANativeWindow;
23 
24 namespace android {
25 namespace renderscript {
26 
27 class Context;
28 class ObjectBase;
29 class Element;
30 class Type;
31 class Allocation;
32 class Script;
33 class ScriptC;
34 class Path;
35 class Program;
36 class ProgramStore;
37 class ProgramRaster;
38 class ProgramVertex;
39 class ProgramFragment;
40 class Mesh;
41 class Sampler;
42 class FBOCache;
43 
44 typedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName);
45 
46 typedef struct {
47     const void *in;
48     void *out;
49     const void *usr;
50     size_t usr_len;
51     uint32_t x;
52     uint32_t y;
53     uint32_t z;
54     uint32_t lod;
55     RsAllocationCubemapFace face;
56     uint32_t ar[16];
57 } RsForEachStubParamStruct;
58 
59 /**
60  * Script management functions
61  */
62 typedef struct {
63     bool (*initGraphics)(const Context *);
64     void (*shutdownGraphics)(const Context *);
65     bool (*setSurface)(const Context *, uint32_t w, uint32_t h, RsNativeWindow);
66     void (*swap)(const Context *);
67 
68     void (*shutdownDriver)(Context *);
69     void (*getVersion)(unsigned int *major, unsigned int *minor);
70     void (*setPriority)(const Context *, int32_t priority);
71 
72 
73 
74     struct {
75         bool (*init)(const Context *rsc, ScriptC *s,
76                      char const *resName,
77                      char const *cacheDir,
78                      uint8_t const *bitcode,
79                      size_t bitcodeSize,
80                      uint32_t flags);
81 
82         void (*invokeFunction)(const Context *rsc, Script *s,
83                                uint32_t slot,
84                                const void *params,
85                                size_t paramLength);
86         int (*invokeRoot)(const Context *rsc, Script *s);
87         void (*invokeForEach)(const Context *rsc,
88                               Script *s,
89                               uint32_t slot,
90                               const Allocation * ain,
91                               Allocation * aout,
92                               const void * usr,
93                               uint32_t usrLen,
94                               const RsScriptCall *sc);
95         void (*invokeInit)(const Context *rsc, Script *s);
96         void (*invokeFreeChildren)(const Context *rsc, Script *s);
97 
98         void (*setGlobalVar)(const Context *rsc, const Script *s,
99                              uint32_t slot,
100                              void *data,
101                              size_t dataLength);
102         void (*setGlobalVarWithElemDims)(const Context *rsc, const Script *s,
103                                          uint32_t slot,
104                                          void *data,
105                                          size_t dataLength,
106                                          const Element *e,
107                                          const size_t *dims,
108                                          size_t dimLength);
109         void (*setGlobalBind)(const Context *rsc, const Script *s,
110                               uint32_t slot,
111                               void *data);
112         void (*setGlobalObj)(const Context *rsc, const Script *s,
113                              uint32_t slot,
114                              ObjectBase *data);
115 
116         void (*destroy)(const Context *rsc, Script *s);
117     } script;
118 
119     struct {
120         bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero);
121         void (*destroy)(const Context *rsc, Allocation *alloc);
122 
123         void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType,
124                        bool zeroNew);
125         void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src);
126         void (*markDirty)(const Context *rsc, const Allocation *alloc);
127 
128         int32_t (*initSurfaceTexture)(const Context *rsc, const Allocation *alloc);
129         void (*setSurfaceTexture)(const Context *rsc, Allocation *alloc, ANativeWindow *sur);
130         void (*ioSend)(const Context *rsc, Allocation *alloc);
131         void (*ioReceive)(const Context *rsc, Allocation *alloc);
132 
133         void (*data1D)(const Context *rsc, const Allocation *alloc,
134                        uint32_t xoff, uint32_t lod, uint32_t count,
135                        const void *data, size_t sizeBytes);
136         void (*data2D)(const Context *rsc, const Allocation *alloc,
137                        uint32_t xoff, uint32_t yoff, uint32_t lod,
138                        RsAllocationCubemapFace face, uint32_t w, uint32_t h,
139                        const void *data, size_t sizeBytes);
140         void (*data3D)(const Context *rsc, const Allocation *alloc,
141                        uint32_t xoff, uint32_t yoff, uint32_t zoff,
142                        uint32_t lod, RsAllocationCubemapFace face,
143                        uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes);
144 
145         // Allocation to allocation copies
146         void (*allocData1D)(const Context *rsc,
147                             const Allocation *dstAlloc,
148                             uint32_t dstXoff, uint32_t dstLod, uint32_t count,
149                             const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcLod);
150         void (*allocData2D)(const Context *rsc,
151                             const Allocation *dstAlloc,
152                             uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod,
153                             RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h,
154                             const Allocation *srcAlloc,
155                             uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod,
156                             RsAllocationCubemapFace srcFace);
157         void (*allocData3D)(const Context *rsc,
158                             const Allocation *dstAlloc,
159                             uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff,
160                             uint32_t dstLod, RsAllocationCubemapFace dstFace,
161                             uint32_t w, uint32_t h, uint32_t d,
162                             const Allocation *srcAlloc,
163                             uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff,
164                             uint32_t srcLod, RsAllocationCubemapFace srcFace);
165 
166         void (*elementData1D)(const Context *rsc, const Allocation *alloc, uint32_t x,
167                               const void *data, uint32_t elementOff, size_t sizeBytes);
168         void (*elementData2D)(const Context *rsc, const Allocation *alloc, uint32_t x, uint32_t y,
169                               const void *data, uint32_t elementOff, size_t sizeBytes);
170 
171 
172     } allocation;
173 
174     struct {
175         bool (*init)(const Context *rsc, const ProgramStore *ps);
176         void (*setActive)(const Context *rsc, const ProgramStore *ps);
177         void (*destroy)(const Context *rsc, const ProgramStore *ps);
178     } store;
179 
180     struct {
181         bool (*init)(const Context *rsc, const ProgramRaster *ps);
182         void (*setActive)(const Context *rsc, const ProgramRaster *ps);
183         void (*destroy)(const Context *rsc, const ProgramRaster *ps);
184     } raster;
185 
186     struct {
187         bool (*init)(const Context *rsc, const ProgramVertex *pv,
188                      const char* shader, size_t shaderLen,
189                      const char** textureNames, size_t textureNamesCount,
190                      const size_t *textureNamesLength);
191         void (*setActive)(const Context *rsc, const ProgramVertex *pv);
192         void (*destroy)(const Context *rsc, const ProgramVertex *pv);
193     } vertex;
194 
195     struct {
196         bool (*init)(const Context *rsc, const ProgramFragment *pf,
197                      const char* shader, size_t shaderLen,
198                      const char** textureNames, size_t textureNamesCount,
199                      const size_t *textureNamesLength);
200         void (*setActive)(const Context *rsc, const ProgramFragment *pf);
201         void (*destroy)(const Context *rsc, const ProgramFragment *pf);
202     } fragment;
203 
204     struct {
205         bool (*init)(const Context *rsc, const Mesh *m);
206         void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len);
207         void (*destroy)(const Context *rsc, const Mesh *m);
208     } mesh;
209 
210     struct {
211         bool (*initStatic)(const Context *rsc, const Path *m, const Allocation *vtx, const Allocation *loops);
212         bool (*initDynamic)(const Context *rsc, const Path *m);
213         void (*draw)(const Context *rsc, const Path *m);
214         void (*destroy)(const Context *rsc, const Path *m);
215     } path;
216 
217     struct {
218         bool (*init)(const Context *rsc, const Sampler *m);
219         void (*destroy)(const Context *rsc, const Sampler *m);
220     } sampler;
221 
222     struct {
223         bool (*init)(const Context *rsc, const FBOCache *fb);
224         void (*setActive)(const Context *rsc, const FBOCache *fb);
225         void (*destroy)(const Context *rsc, const FBOCache *fb);
226     } framebuffer;
227 
228 } RsdHalFunctions;
229 
230 
231 }
232 }
233 
234 
235 bool rsdHalInit(android::renderscript::Context *, uint32_t version_major, uint32_t version_minor);
236 
237 #endif
238 
239