xref: /aosp_15_r20/frameworks/rs/rs_hal.h (revision e1eccf28f96817838ad6867f7f39d2351ec11f56)
1*e1eccf28SAndroid Build Coastguard Worker /*
2*e1eccf28SAndroid Build Coastguard Worker  * Copyright (C) 2011-2012 The Android Open Source Project
3*e1eccf28SAndroid Build Coastguard Worker  *
4*e1eccf28SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*e1eccf28SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*e1eccf28SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*e1eccf28SAndroid Build Coastguard Worker  *
8*e1eccf28SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*e1eccf28SAndroid Build Coastguard Worker  *
10*e1eccf28SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*e1eccf28SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*e1eccf28SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e1eccf28SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*e1eccf28SAndroid Build Coastguard Worker  * limitations under the License.
15*e1eccf28SAndroid Build Coastguard Worker  */
16*e1eccf28SAndroid Build Coastguard Worker 
17*e1eccf28SAndroid Build Coastguard Worker #ifndef RS_HAL_H
18*e1eccf28SAndroid Build Coastguard Worker #define RS_HAL_H
19*e1eccf28SAndroid Build Coastguard Worker 
20*e1eccf28SAndroid Build Coastguard Worker #include <rsInternalDefines.h>
21*e1eccf28SAndroid Build Coastguard Worker 
22*e1eccf28SAndroid Build Coastguard Worker /*
23*e1eccf28SAndroid Build Coastguard Worker  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
24*e1eccf28SAndroid Build Coastguard Worker  * !! Major version number of the driver.  This is used to ensure that
25*e1eccf28SAndroid Build Coastguard Worker  * !! the driver (e.g., libRSDriver) is compatible with the shell
26*e1eccf28SAndroid Build Coastguard Worker  * !! (i.e., libRS_internal) responsible for loading the driver.
27*e1eccf28SAndroid Build Coastguard Worker  * !! There is no notion of backwards compatibility -- the driver and
28*e1eccf28SAndroid Build Coastguard Worker  * !! the shell must agree on the major version number.
29*e1eccf28SAndroid Build Coastguard Worker  * !!
30*e1eccf28SAndroid Build Coastguard Worker  * !! The version number must change whenever there is a semantic change
31*e1eccf28SAndroid Build Coastguard Worker  * !! to the HAL such as adding or removing an entry point or changing
32*e1eccf28SAndroid Build Coastguard Worker  * !! the meaning of an entry point.  By convention it is monotonically
33*e1eccf28SAndroid Build Coastguard Worker  * !! increasing across all branches (e.g., aosp/master and all internal
34*e1eccf28SAndroid Build Coastguard Worker  * !! branches).
35*e1eccf28SAndroid Build Coastguard Worker  * !!
36*e1eccf28SAndroid Build Coastguard Worker  * !! Be very careful when merging or cherry picking between branches!
37*e1eccf28SAndroid Build Coastguard Worker  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
38*e1eccf28SAndroid Build Coastguard Worker  */
39*e1eccf28SAndroid Build Coastguard Worker #define RS_HAL_VERSION 200
40*e1eccf28SAndroid Build Coastguard Worker 
41*e1eccf28SAndroid Build Coastguard Worker /**
42*e1eccf28SAndroid Build Coastguard Worker  * The interface for loading RenderScript drivers
43*e1eccf28SAndroid Build Coastguard Worker  *
44*e1eccf28SAndroid Build Coastguard Worker  * The startup sequence is
45*e1eccf28SAndroid Build Coastguard Worker  *
46*e1eccf28SAndroid Build Coastguard Worker  * 1: dlopen driver
47*e1eccf28SAndroid Build Coastguard Worker  * 2: Query driver version with rsdHalQueryVersion() and verify
48*e1eccf28SAndroid Build Coastguard Worker  *    that the driver (e.g., libRSDriver) is compatible with the shell
49*e1eccf28SAndroid Build Coastguard Worker  *    (i.e., libRS_internal) responsible for loading the driver
50*e1eccf28SAndroid Build Coastguard Worker  * 3: Fill in HAL pointer table with calls to rsdHalQueryHAL()
51*e1eccf28SAndroid Build Coastguard Worker  * 4: Initialize the context with rsdHalInit()
52*e1eccf28SAndroid Build Coastguard Worker  *
53*e1eccf28SAndroid Build Coastguard Worker  * If any of these functions return false, the loading of the
54*e1eccf28SAndroid Build Coastguard Worker  * driver will abort and the reference driver will be used.
55*e1eccf28SAndroid Build Coastguard Worker  * rsdHalAbort() will be called to clean up any partially
56*e1eccf28SAndroid Build Coastguard Worker  * allocated state.
57*e1eccf28SAndroid Build Coastguard Worker  *
58*e1eccf28SAndroid Build Coastguard Worker  * A driver should return FALSE for any conditions that will
59*e1eccf28SAndroid Build Coastguard Worker  * prevent the driver from working normally.
60*e1eccf28SAndroid Build Coastguard Worker  *
61*e1eccf28SAndroid Build Coastguard Worker  *
62*e1eccf28SAndroid Build Coastguard Worker  * If these are successful, the driver will be loaded and used
63*e1eccf28SAndroid Build Coastguard Worker  * normally.  Teardown will use the normal
64*e1eccf28SAndroid Build Coastguard Worker  * context->mHal.funcs.shutdown() path.  There will be no call
65*e1eccf28SAndroid Build Coastguard Worker  * to rsdHalAbort().
66*e1eccf28SAndroid Build Coastguard Worker  *
67*e1eccf28SAndroid Build Coastguard Worker  *
68*e1eccf28SAndroid Build Coastguard Worker  */
69*e1eccf28SAndroid Build Coastguard Worker 
70*e1eccf28SAndroid Build Coastguard Worker 
71*e1eccf28SAndroid Build Coastguard Worker struct ANativeWindow;
72*e1eccf28SAndroid Build Coastguard Worker 
73*e1eccf28SAndroid Build Coastguard Worker namespace android {
74*e1eccf28SAndroid Build Coastguard Worker namespace renderscript {
75*e1eccf28SAndroid Build Coastguard Worker 
76*e1eccf28SAndroid Build Coastguard Worker class Context;
77*e1eccf28SAndroid Build Coastguard Worker class ObjectBase;
78*e1eccf28SAndroid Build Coastguard Worker class Element;
79*e1eccf28SAndroid Build Coastguard Worker class Type;
80*e1eccf28SAndroid Build Coastguard Worker class Allocation;
81*e1eccf28SAndroid Build Coastguard Worker class Script;
82*e1eccf28SAndroid Build Coastguard Worker class ScriptKernelID;
83*e1eccf28SAndroid Build Coastguard Worker class ScriptFieldID;
84*e1eccf28SAndroid Build Coastguard Worker class ScriptMethodID;
85*e1eccf28SAndroid Build Coastguard Worker class ScriptC;
86*e1eccf28SAndroid Build Coastguard Worker class ScriptGroup;
87*e1eccf28SAndroid Build Coastguard Worker class ScriptGroupBase;
88*e1eccf28SAndroid Build Coastguard Worker class Path;
89*e1eccf28SAndroid Build Coastguard Worker class Program;
90*e1eccf28SAndroid Build Coastguard Worker class ProgramStore;
91*e1eccf28SAndroid Build Coastguard Worker class ProgramRaster;
92*e1eccf28SAndroid Build Coastguard Worker class ProgramVertex;
93*e1eccf28SAndroid Build Coastguard Worker class ProgramFragment;
94*e1eccf28SAndroid Build Coastguard Worker class Mesh;
95*e1eccf28SAndroid Build Coastguard Worker class Sampler;
96*e1eccf28SAndroid Build Coastguard Worker class FBOCache;
97*e1eccf28SAndroid Build Coastguard Worker 
98*e1eccf28SAndroid Build Coastguard Worker /**
99*e1eccf28SAndroid Build Coastguard Worker  * Define the internal object types.  This ia a mirror of the
100*e1eccf28SAndroid Build Coastguard Worker  * definition in rs_types.rsh except with the p value typed
101*e1eccf28SAndroid Build Coastguard Worker  * correctly.
102*e1eccf28SAndroid Build Coastguard Worker  *
103*e1eccf28SAndroid Build Coastguard Worker  * p = pointer to internal object implementation
104*e1eccf28SAndroid Build Coastguard Worker  * unused1, unused2, unused3 = reserved for ABI compatibility
105*e1eccf28SAndroid Build Coastguard Worker  */
106*e1eccf28SAndroid Build Coastguard Worker 
107*e1eccf28SAndroid Build Coastguard Worker // RS_BASE_OBJ must have the same layout as _RS_OBJECT_DECL defined in
108*e1eccf28SAndroid Build Coastguard Worker // script_api/rs_object_types.spec.
109*e1eccf28SAndroid Build Coastguard Worker // TODO(jeanluc) Look at unifying.
110*e1eccf28SAndroid Build Coastguard Worker #ifndef __LP64__
111*e1eccf28SAndroid Build Coastguard Worker #define RS_BASE_OBJ(_t_) typedef struct { const _t_* p; } __attribute__((packed, aligned(4)))
112*e1eccf28SAndroid Build Coastguard Worker #define RS_BASE_NULL_OBJ {0}
113*e1eccf28SAndroid Build Coastguard Worker #else
114*e1eccf28SAndroid Build Coastguard Worker #define RS_BASE_OBJ(_t_) typedef struct { const _t_* p; const void* unused1; const void* unused2; const void* unused3; }
115*e1eccf28SAndroid Build Coastguard Worker #define RS_BASE_NULL_OBJ {0, 0, 0, 0}
116*e1eccf28SAndroid Build Coastguard Worker #endif
117*e1eccf28SAndroid Build Coastguard Worker 
118*e1eccf28SAndroid Build Coastguard Worker RS_BASE_OBJ(ObjectBase) rs_object_base;
119*e1eccf28SAndroid Build Coastguard Worker RS_BASE_OBJ(Element) rs_element;
120*e1eccf28SAndroid Build Coastguard Worker RS_BASE_OBJ(Type) rs_type;
121*e1eccf28SAndroid Build Coastguard Worker RS_BASE_OBJ(Allocation) rs_allocation;
122*e1eccf28SAndroid Build Coastguard Worker RS_BASE_OBJ(Sampler) rs_sampler;
123*e1eccf28SAndroid Build Coastguard Worker RS_BASE_OBJ(Script) rs_script;
124*e1eccf28SAndroid Build Coastguard Worker RS_BASE_OBJ(ScriptGroup) rs_script_group;
125*e1eccf28SAndroid Build Coastguard Worker 
126*e1eccf28SAndroid Build Coastguard Worker #ifndef __LP64__
127*e1eccf28SAndroid Build Coastguard Worker typedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_mesh;
128*e1eccf28SAndroid Build Coastguard Worker typedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_fragment;
129*e1eccf28SAndroid Build Coastguard Worker typedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_vertex;
130*e1eccf28SAndroid Build Coastguard Worker typedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_raster;
131*e1eccf28SAndroid Build Coastguard Worker typedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_program_store;
132*e1eccf28SAndroid Build Coastguard Worker typedef struct { const int* p; } __attribute__((packed, aligned(4))) rs_font;
133*e1eccf28SAndroid Build Coastguard Worker #endif // __LP64__
134*e1eccf28SAndroid Build Coastguard Worker 
135*e1eccf28SAndroid Build Coastguard Worker 
136*e1eccf28SAndroid Build Coastguard Worker typedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName);
137*e1eccf28SAndroid Build Coastguard Worker 
138*e1eccf28SAndroid Build Coastguard Worker /**
139*e1eccf28SAndroid Build Coastguard Worker  * Script management functions
140*e1eccf28SAndroid Build Coastguard Worker  */
141*e1eccf28SAndroid Build Coastguard Worker typedef struct {
142*e1eccf28SAndroid Build Coastguard Worker     int (*initGraphics)(const Context *);
143*e1eccf28SAndroid Build Coastguard Worker     void (*shutdownGraphics)(const Context *);
144*e1eccf28SAndroid Build Coastguard Worker     bool (*setSurface)(const Context *, uint32_t w, uint32_t h, RsNativeWindow);
145*e1eccf28SAndroid Build Coastguard Worker     void (*swap)(const Context *);
146*e1eccf28SAndroid Build Coastguard Worker 
147*e1eccf28SAndroid Build Coastguard Worker     void (*shutdownDriver)(Context *);
148*e1eccf28SAndroid Build Coastguard Worker     void (*setPriority)(const Context *, int32_t priority);
149*e1eccf28SAndroid Build Coastguard Worker 
150*e1eccf28SAndroid Build Coastguard Worker     void* (*allocRuntimeMem)(size_t size, uint32_t flags);
151*e1eccf28SAndroid Build Coastguard Worker     void (*freeRuntimeMem)(void* ptr);
152*e1eccf28SAndroid Build Coastguard Worker 
153*e1eccf28SAndroid Build Coastguard Worker     struct {
154*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, ScriptC *s,
155*e1eccf28SAndroid Build Coastguard Worker                      char const *resName,
156*e1eccf28SAndroid Build Coastguard Worker                      char const *cacheDir,
157*e1eccf28SAndroid Build Coastguard Worker                      uint8_t const *bitcode,
158*e1eccf28SAndroid Build Coastguard Worker                      size_t bitcodeSize,
159*e1eccf28SAndroid Build Coastguard Worker                      uint32_t flags);
160*e1eccf28SAndroid Build Coastguard Worker         bool (*initIntrinsic)(const Context *rsc, Script *s,
161*e1eccf28SAndroid Build Coastguard Worker                               RsScriptIntrinsicID iid,
162*e1eccf28SAndroid Build Coastguard Worker                               Element *e);
163*e1eccf28SAndroid Build Coastguard Worker 
164*e1eccf28SAndroid Build Coastguard Worker         void (*invokeFunction)(const Context *rsc, Script *s,
165*e1eccf28SAndroid Build Coastguard Worker                                uint32_t slot,
166*e1eccf28SAndroid Build Coastguard Worker                                const void *params,
167*e1eccf28SAndroid Build Coastguard Worker                                size_t paramLength);
168*e1eccf28SAndroid Build Coastguard Worker         int (*invokeRoot)(const Context *rsc, Script *s);
169*e1eccf28SAndroid Build Coastguard Worker         void (*invokeForEach)(const Context *rsc,
170*e1eccf28SAndroid Build Coastguard Worker                               Script *s,
171*e1eccf28SAndroid Build Coastguard Worker                               uint32_t slot,
172*e1eccf28SAndroid Build Coastguard Worker                               const Allocation * ain,
173*e1eccf28SAndroid Build Coastguard Worker                               Allocation * aout,
174*e1eccf28SAndroid Build Coastguard Worker                               const void * usr,
175*e1eccf28SAndroid Build Coastguard Worker                               size_t usrLen,
176*e1eccf28SAndroid Build Coastguard Worker                               const RsScriptCall *sc);
177*e1eccf28SAndroid Build Coastguard Worker         void (*invokeReduce)(const Context *rsc, Script *s,
178*e1eccf28SAndroid Build Coastguard Worker                              uint32_t slot,
179*e1eccf28SAndroid Build Coastguard Worker                              const Allocation ** ains, size_t inLen,
180*e1eccf28SAndroid Build Coastguard Worker                              Allocation *aout,
181*e1eccf28SAndroid Build Coastguard Worker                              const RsScriptCall *sc);
182*e1eccf28SAndroid Build Coastguard Worker         void (*invokeInit)(const Context *rsc, Script *s);
183*e1eccf28SAndroid Build Coastguard Worker         void (*invokeFreeChildren)(const Context *rsc, Script *s);
184*e1eccf28SAndroid Build Coastguard Worker 
185*e1eccf28SAndroid Build Coastguard Worker         void (*setGlobalVar)(const Context *rsc, const Script *s,
186*e1eccf28SAndroid Build Coastguard Worker                              uint32_t slot,
187*e1eccf28SAndroid Build Coastguard Worker                              void *data,
188*e1eccf28SAndroid Build Coastguard Worker                              size_t dataLength);
189*e1eccf28SAndroid Build Coastguard Worker         void (*getGlobalVar)(const Context *rsc, const Script *s,
190*e1eccf28SAndroid Build Coastguard Worker                              uint32_t slot,
191*e1eccf28SAndroid Build Coastguard Worker                              void *data,
192*e1eccf28SAndroid Build Coastguard Worker                              size_t dataLength);
193*e1eccf28SAndroid Build Coastguard Worker         void (*setGlobalVarWithElemDims)(const Context *rsc, const Script *s,
194*e1eccf28SAndroid Build Coastguard Worker                                          uint32_t slot,
195*e1eccf28SAndroid Build Coastguard Worker                                          void *data,
196*e1eccf28SAndroid Build Coastguard Worker                                          size_t dataLength,
197*e1eccf28SAndroid Build Coastguard Worker                                          const Element *e,
198*e1eccf28SAndroid Build Coastguard Worker                                          const uint32_t *dims,
199*e1eccf28SAndroid Build Coastguard Worker                                          size_t dimLength);
200*e1eccf28SAndroid Build Coastguard Worker         void (*setGlobalBind)(const Context *rsc, const Script *s,
201*e1eccf28SAndroid Build Coastguard Worker                               uint32_t slot,
202*e1eccf28SAndroid Build Coastguard Worker                               Allocation *data);
203*e1eccf28SAndroid Build Coastguard Worker         void (*setGlobalObj)(const Context *rsc, const Script *s,
204*e1eccf28SAndroid Build Coastguard Worker                              uint32_t slot,
205*e1eccf28SAndroid Build Coastguard Worker                              ObjectBase *data);
206*e1eccf28SAndroid Build Coastguard Worker 
207*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, Script *s);
208*e1eccf28SAndroid Build Coastguard Worker         void (*invokeForEachMulti)(const Context *rsc,
209*e1eccf28SAndroid Build Coastguard Worker                                    Script *s,
210*e1eccf28SAndroid Build Coastguard Worker                                    uint32_t slot,
211*e1eccf28SAndroid Build Coastguard Worker                                    const Allocation ** ains,
212*e1eccf28SAndroid Build Coastguard Worker                                    size_t inLen,
213*e1eccf28SAndroid Build Coastguard Worker                                    Allocation * aout,
214*e1eccf28SAndroid Build Coastguard Worker                                    const void * usr,
215*e1eccf28SAndroid Build Coastguard Worker                                    size_t usrLen,
216*e1eccf28SAndroid Build Coastguard Worker                                    const RsScriptCall *sc);
217*e1eccf28SAndroid Build Coastguard Worker         void (*updateCachedObject)(const Context *rsc, const Script *, rs_script *obj);
218*e1eccf28SAndroid Build Coastguard Worker     } script;
219*e1eccf28SAndroid Build Coastguard Worker 
220*e1eccf28SAndroid Build Coastguard Worker     struct {
221*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero);
222*e1eccf28SAndroid Build Coastguard Worker         bool (*initOem)(const Context *rsc, Allocation *alloc, bool forceZero, void *usrPtr);
223*e1eccf28SAndroid Build Coastguard Worker         bool (*initAdapter)(const Context *rsc, Allocation *alloc);
224*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, Allocation *alloc);
225*e1eccf28SAndroid Build Coastguard Worker         uint32_t (*grallocBits)(const Context *rsc, Allocation *alloc);
226*e1eccf28SAndroid Build Coastguard Worker 
227*e1eccf28SAndroid Build Coastguard Worker         void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType,
228*e1eccf28SAndroid Build Coastguard Worker                        bool zeroNew);
229*e1eccf28SAndroid Build Coastguard Worker         void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src);
230*e1eccf28SAndroid Build Coastguard Worker         void (*markDirty)(const Context *rsc, const Allocation *alloc);
231*e1eccf28SAndroid Build Coastguard Worker 
232*e1eccf28SAndroid Build Coastguard Worker         void (*setSurface)(const Context *rsc, Allocation *alloc, ANativeWindow *sur);
233*e1eccf28SAndroid Build Coastguard Worker         void (*ioSend)(const Context *rsc, Allocation *alloc);
234*e1eccf28SAndroid Build Coastguard Worker 
235*e1eccf28SAndroid Build Coastguard Worker         /**
236*e1eccf28SAndroid Build Coastguard Worker          * A new gralloc buffer is in use. The pointers and strides in
237*e1eccf28SAndroid Build Coastguard Worker          * mHal.drvState.lod[0-2] will be updated with the new values.
238*e1eccf28SAndroid Build Coastguard Worker          *
239*e1eccf28SAndroid Build Coastguard Worker          * The new gralloc handle is provided in mHal.state.nativeBuffer
240*e1eccf28SAndroid Build Coastguard Worker          *
241*e1eccf28SAndroid Build Coastguard Worker          */
242*e1eccf28SAndroid Build Coastguard Worker         void (*ioReceive)(const Context *rsc, Allocation *alloc);
243*e1eccf28SAndroid Build Coastguard Worker 
244*e1eccf28SAndroid Build Coastguard Worker         void (*data1D)(const Context *rsc, const Allocation *alloc,
245*e1eccf28SAndroid Build Coastguard Worker                        uint32_t xoff, uint32_t lod, size_t count,
246*e1eccf28SAndroid Build Coastguard Worker                        const void *data, size_t sizeBytes);
247*e1eccf28SAndroid Build Coastguard Worker         void (*data2D)(const Context *rsc, const Allocation *alloc,
248*e1eccf28SAndroid Build Coastguard Worker                        uint32_t xoff, uint32_t yoff, uint32_t lod,
249*e1eccf28SAndroid Build Coastguard Worker                        RsAllocationCubemapFace face, uint32_t w, uint32_t h,
250*e1eccf28SAndroid Build Coastguard Worker                        const void *data, size_t sizeBytes, size_t stride);
251*e1eccf28SAndroid Build Coastguard Worker         void (*data3D)(const Context *rsc, const Allocation *alloc,
252*e1eccf28SAndroid Build Coastguard Worker                        uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod,
253*e1eccf28SAndroid Build Coastguard Worker                        uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes,
254*e1eccf28SAndroid Build Coastguard Worker                        size_t stride);
255*e1eccf28SAndroid Build Coastguard Worker 
256*e1eccf28SAndroid Build Coastguard Worker         void (*read1D)(const Context *rsc, const Allocation *alloc,
257*e1eccf28SAndroid Build Coastguard Worker                        uint32_t xoff, uint32_t lod, size_t count,
258*e1eccf28SAndroid Build Coastguard Worker                        void *data, size_t sizeBytes);
259*e1eccf28SAndroid Build Coastguard Worker         void (*read2D)(const Context *rsc, const Allocation *alloc,
260*e1eccf28SAndroid Build Coastguard Worker                        uint32_t xoff, uint32_t yoff, uint32_t lod,
261*e1eccf28SAndroid Build Coastguard Worker                        RsAllocationCubemapFace face, uint32_t w, uint32_t h,
262*e1eccf28SAndroid Build Coastguard Worker                        void *data, size_t sizeBytes, size_t stride);
263*e1eccf28SAndroid Build Coastguard Worker         void (*read3D)(const Context *rsc, const Allocation *alloc,
264*e1eccf28SAndroid Build Coastguard Worker                        uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod,
265*e1eccf28SAndroid Build Coastguard Worker                        uint32_t w, uint32_t h, uint32_t d, void *data, size_t sizeBytes,
266*e1eccf28SAndroid Build Coastguard Worker                        size_t stride);
267*e1eccf28SAndroid Build Coastguard Worker 
268*e1eccf28SAndroid Build Coastguard Worker         // Lock and unlock make a 1D region of memory available to the CPU
269*e1eccf28SAndroid Build Coastguard Worker         // for direct access by pointer.  Once unlock is called control is
270*e1eccf28SAndroid Build Coastguard Worker         // returned to the SOC driver.
271*e1eccf28SAndroid Build Coastguard Worker         void * (*lock1D)(const Context *rsc, const Allocation *alloc);
272*e1eccf28SAndroid Build Coastguard Worker         void (*unlock1D)(const Context *rsc, const Allocation *alloc);
273*e1eccf28SAndroid Build Coastguard Worker 
274*e1eccf28SAndroid Build Coastguard Worker         // Allocation to allocation copies
275*e1eccf28SAndroid Build Coastguard Worker         void (*allocData1D)(const Context *rsc,
276*e1eccf28SAndroid Build Coastguard Worker                             const Allocation *dstAlloc,
277*e1eccf28SAndroid Build Coastguard Worker                             uint32_t dstXoff, uint32_t dstLod, size_t count,
278*e1eccf28SAndroid Build Coastguard Worker                             const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcLod);
279*e1eccf28SAndroid Build Coastguard Worker         void (*allocData2D)(const Context *rsc,
280*e1eccf28SAndroid Build Coastguard Worker                             const Allocation *dstAlloc,
281*e1eccf28SAndroid Build Coastguard Worker                             uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod,
282*e1eccf28SAndroid Build Coastguard Worker                             RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h,
283*e1eccf28SAndroid Build Coastguard Worker                             const Allocation *srcAlloc,
284*e1eccf28SAndroid Build Coastguard Worker                             uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod,
285*e1eccf28SAndroid Build Coastguard Worker                             RsAllocationCubemapFace srcFace);
286*e1eccf28SAndroid Build Coastguard Worker         void (*allocData3D)(const Context *rsc,
287*e1eccf28SAndroid Build Coastguard Worker                             const Allocation *dstAlloc,
288*e1eccf28SAndroid Build Coastguard Worker                             uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff,
289*e1eccf28SAndroid Build Coastguard Worker                             uint32_t dstLod,
290*e1eccf28SAndroid Build Coastguard Worker                             uint32_t w, uint32_t h, uint32_t d,
291*e1eccf28SAndroid Build Coastguard Worker                             const Allocation *srcAlloc,
292*e1eccf28SAndroid Build Coastguard Worker                             uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff,
293*e1eccf28SAndroid Build Coastguard Worker                             uint32_t srcLod);
294*e1eccf28SAndroid Build Coastguard Worker 
295*e1eccf28SAndroid Build Coastguard Worker         void (*elementData)(const Context *rsc, const Allocation *alloc,
296*e1eccf28SAndroid Build Coastguard Worker                             uint32_t x, uint32_t y, uint32_t z,
297*e1eccf28SAndroid Build Coastguard Worker                             const void *data, uint32_t elementOff, size_t sizeBytes);
298*e1eccf28SAndroid Build Coastguard Worker         void (*elementRead)(const Context *rsc, const Allocation *alloc,
299*e1eccf28SAndroid Build Coastguard Worker                             uint32_t x, uint32_t y, uint32_t z,
300*e1eccf28SAndroid Build Coastguard Worker                             void *data, uint32_t elementOff, size_t sizeBytes);
301*e1eccf28SAndroid Build Coastguard Worker 
302*e1eccf28SAndroid Build Coastguard Worker         void (*generateMipmaps)(const Context *rsc, const Allocation *alloc);
303*e1eccf28SAndroid Build Coastguard Worker 
304*e1eccf28SAndroid Build Coastguard Worker         void (*updateCachedObject)(const Context *rsc, const Allocation *alloc, rs_allocation *obj);
305*e1eccf28SAndroid Build Coastguard Worker 
306*e1eccf28SAndroid Build Coastguard Worker         void (*adapterOffset)(const Context *rsc, const Allocation *alloc);
307*e1eccf28SAndroid Build Coastguard Worker 
308*e1eccf28SAndroid Build Coastguard Worker         void (*getPointer)(const Context *rsc, const Allocation *alloc,
309*e1eccf28SAndroid Build Coastguard Worker                            uint32_t lod, RsAllocationCubemapFace face,
310*e1eccf28SAndroid Build Coastguard Worker                            uint32_t z, uint32_t array);
311*e1eccf28SAndroid Build Coastguard Worker #ifdef RS_COMPATIBILITY_LIB
312*e1eccf28SAndroid Build Coastguard Worker         bool (*initStrided)(const Context *rsc, Allocation *alloc, bool forceZero, size_t requiredAlignment);
313*e1eccf28SAndroid Build Coastguard Worker #endif
314*e1eccf28SAndroid Build Coastguard Worker     } allocation;
315*e1eccf28SAndroid Build Coastguard Worker 
316*e1eccf28SAndroid Build Coastguard Worker     struct {
317*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, const ProgramStore *ps);
318*e1eccf28SAndroid Build Coastguard Worker         void (*setActive)(const Context *rsc, const ProgramStore *ps);
319*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, const ProgramStore *ps);
320*e1eccf28SAndroid Build Coastguard Worker     } store;
321*e1eccf28SAndroid Build Coastguard Worker 
322*e1eccf28SAndroid Build Coastguard Worker     struct {
323*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, const ProgramRaster *ps);
324*e1eccf28SAndroid Build Coastguard Worker         void (*setActive)(const Context *rsc, const ProgramRaster *ps);
325*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, const ProgramRaster *ps);
326*e1eccf28SAndroid Build Coastguard Worker     } raster;
327*e1eccf28SAndroid Build Coastguard Worker 
328*e1eccf28SAndroid Build Coastguard Worker     struct {
329*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, const ProgramVertex *pv,
330*e1eccf28SAndroid Build Coastguard Worker                      const char* shader, size_t shaderLen,
331*e1eccf28SAndroid Build Coastguard Worker                      const char** textureNames, size_t textureNamesCount,
332*e1eccf28SAndroid Build Coastguard Worker                      const size_t *textureNamesLength);
333*e1eccf28SAndroid Build Coastguard Worker         void (*setActive)(const Context *rsc, const ProgramVertex *pv);
334*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, const ProgramVertex *pv);
335*e1eccf28SAndroid Build Coastguard Worker     } vertex;
336*e1eccf28SAndroid Build Coastguard Worker 
337*e1eccf28SAndroid Build Coastguard Worker     struct {
338*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, const ProgramFragment *pf,
339*e1eccf28SAndroid Build Coastguard Worker                      const char* shader, size_t shaderLen,
340*e1eccf28SAndroid Build Coastguard Worker                      const char** textureNames, size_t textureNamesCount,
341*e1eccf28SAndroid Build Coastguard Worker                      const size_t *textureNamesLength);
342*e1eccf28SAndroid Build Coastguard Worker         void (*setActive)(const Context *rsc, const ProgramFragment *pf);
343*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, const ProgramFragment *pf);
344*e1eccf28SAndroid Build Coastguard Worker     } fragment;
345*e1eccf28SAndroid Build Coastguard Worker 
346*e1eccf28SAndroid Build Coastguard Worker     struct {
347*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, const Mesh *m);
348*e1eccf28SAndroid Build Coastguard Worker         void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len);
349*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, const Mesh *m);
350*e1eccf28SAndroid Build Coastguard Worker     } mesh;
351*e1eccf28SAndroid Build Coastguard Worker 
352*e1eccf28SAndroid Build Coastguard Worker     struct {
353*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, const Sampler *m);
354*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, const Sampler *m);
355*e1eccf28SAndroid Build Coastguard Worker         void (*updateCachedObject)(const Context *rsc, const Sampler *s, rs_sampler *obj);
356*e1eccf28SAndroid Build Coastguard Worker     } sampler;
357*e1eccf28SAndroid Build Coastguard Worker 
358*e1eccf28SAndroid Build Coastguard Worker     struct {
359*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, const FBOCache *fb);
360*e1eccf28SAndroid Build Coastguard Worker         void (*setActive)(const Context *rsc, const FBOCache *fb);
361*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, const FBOCache *fb);
362*e1eccf28SAndroid Build Coastguard Worker     } framebuffer;
363*e1eccf28SAndroid Build Coastguard Worker 
364*e1eccf28SAndroid Build Coastguard Worker     struct {
365*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, ScriptGroupBase *sg);
366*e1eccf28SAndroid Build Coastguard Worker         void (*setInput)(const Context *rsc, const ScriptGroup *sg,
367*e1eccf28SAndroid Build Coastguard Worker                          const ScriptKernelID *kid, Allocation *);
368*e1eccf28SAndroid Build Coastguard Worker         void (*setOutput)(const Context *rsc, const ScriptGroup *sg,
369*e1eccf28SAndroid Build Coastguard Worker                           const ScriptKernelID *kid, Allocation *);
370*e1eccf28SAndroid Build Coastguard Worker         void (*execute)(const Context *rsc, const ScriptGroupBase *sg);
371*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, const ScriptGroupBase *sg);
372*e1eccf28SAndroid Build Coastguard Worker         void (*updateCachedObject)(const Context *rsc, const ScriptGroup *sg, rs_script_group *obj);
373*e1eccf28SAndroid Build Coastguard Worker     } scriptgroup;
374*e1eccf28SAndroid Build Coastguard Worker 
375*e1eccf28SAndroid Build Coastguard Worker     struct {
376*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, const Type *m);
377*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, const Type *m);
378*e1eccf28SAndroid Build Coastguard Worker         void (*updateCachedObject)(const Context *rsc, const Type *s, rs_type *obj);
379*e1eccf28SAndroid Build Coastguard Worker     } type;
380*e1eccf28SAndroid Build Coastguard Worker 
381*e1eccf28SAndroid Build Coastguard Worker     struct {
382*e1eccf28SAndroid Build Coastguard Worker         bool (*init)(const Context *rsc, const Element *m);
383*e1eccf28SAndroid Build Coastguard Worker         void (*destroy)(const Context *rsc, const Element *m);
384*e1eccf28SAndroid Build Coastguard Worker         void (*updateCachedObject)(const Context *rsc, const Element *s, rs_element *obj);
385*e1eccf28SAndroid Build Coastguard Worker     } element;
386*e1eccf28SAndroid Build Coastguard Worker 
387*e1eccf28SAndroid Build Coastguard Worker     void (*finish)(const Context *rsc);
388*e1eccf28SAndroid Build Coastguard Worker } RsdHalFunctions;
389*e1eccf28SAndroid Build Coastguard Worker 
390*e1eccf28SAndroid Build Coastguard Worker 
391*e1eccf28SAndroid Build Coastguard Worker enum RsHalInitEnums {
392*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_CORE_SHUTDOWN                                    = 1,
393*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_CORE_SET_PRIORITY                                = 2,
394*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_CORE_ALLOC_RUNTIME_MEM                           = 3,
395*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_CORE_FREE_RUNTIME_MEM                            = 4,
396*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_CORE_FINISH                                      = 5,
397*e1eccf28SAndroid Build Coastguard Worker 
398*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_INIT                                      = 1000,
399*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_INIT_INTRINSIC                            = 1001,
400*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_INVOKE_FUNCTION                           = 1002,
401*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_INVOKE_ROOT                               = 1003,
402*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_INVOKE_FOR_EACH                           = 1004,
403*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_INVOKE_INIT                               = 1005,
404*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_INVOKE_FREE_CHILDREN                      = 1006,
405*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_SET_GLOBAL_VAR                            = 1007,
406*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_GET_GLOBAL_VAR                            = 1008,
407*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_SET_GLOBAL_VAR_WITH_ELEMENT_DIM           = 1009,
408*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_SET_GLOBAL_BIND                           = 1010,
409*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_SET_GLOBAL_OBJECT                         = 1011,
410*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_DESTROY                                   = 1012,
411*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_INVOKE_FOR_EACH_MULTI                     = 1013,
412*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_UPDATE_CACHED_OBJECT                      = 1014,
413*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_INVOKE_REDUCE                             = 1015,
414*e1eccf28SAndroid Build Coastguard Worker 
415*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_INIT                                  = 2000,
416*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_INIT_ADAPTER                          = 2001,
417*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_DESTROY                               = 2002,
418*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_GET_GRALLOC_BITS                      = 2003,
419*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_RESIZE                                = 2004,
420*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_SYNC_ALL                              = 2005,
421*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_MARK_DIRTY                            = 2006,
422*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_SET_SURFACE                           = 2007,
423*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_IO_SEND                               = 2008,
424*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_IO_RECEIVE                            = 2009,
425*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_DATA_1D                               = 2010,
426*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_DATA_2D                               = 2011,
427*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_DATA_3D                               = 2012,
428*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_READ_1D                               = 2013,
429*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_READ_2D                               = 2014,
430*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_READ_3D                               = 2015,
431*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_LOCK_1D                               = 2016,
432*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_UNLOCK_1D                             = 2017,
433*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_COPY_1D                               = 2018,
434*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_COPY_2D                               = 2019,
435*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_COPY_3D                               = 2020,
436*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_ELEMENT_DATA                          = 2021,
437*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_ELEMENT_READ                          = 2022,
438*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_GENERATE_MIPMAPS                      = 2023,
439*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_UPDATE_CACHED_OBJECT                  = 2024,
440*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_ADAPTER_OFFSET                        = 2025,
441*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_INIT_OEM                              = 2026,
442*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_GET_POINTER                           = 2027,
443*e1eccf28SAndroid Build Coastguard Worker #ifdef RS_COMPATIBILITY_LIB
444*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ALLOCATION_INIT_STRIDED                          = 2999,
445*e1eccf28SAndroid Build Coastguard Worker #endif
446*e1eccf28SAndroid Build Coastguard Worker 
447*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SAMPLER_INIT                                     = 3000,
448*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SAMPLER_DESTROY                                  = 3001,
449*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SAMPLER_UPDATE_CACHED_OBJECT                     = 3002,
450*e1eccf28SAndroid Build Coastguard Worker 
451*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_TYPE_INIT                                        = 4000,
452*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_TYPE_DESTROY                                     = 4001,
453*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_TYPE_UPDATE_CACHED_OBJECT                        = 4002,
454*e1eccf28SAndroid Build Coastguard Worker 
455*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ELEMENT_INIT                                     = 5000,
456*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ELEMENT_DESTROY                                  = 5001,
457*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_ELEMENT_UPDATE_CACHED_OBJECT                     = 5002,
458*e1eccf28SAndroid Build Coastguard Worker 
459*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_GROUP_INIT                                = 6000,
460*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_GROUP_DESTROY                             = 6001,
461*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_GROUP_UPDATE_CACHED_OBJECT                = 6002,
462*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_GROUP_SET_INPUT                           = 6003,
463*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_GROUP_SET_OUTPUT                          = 6004,
464*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_SCRIPT_GROUP_EXECUTE                             = 6005,
465*e1eccf28SAndroid Build Coastguard Worker 
466*e1eccf28SAndroid Build Coastguard Worker 
467*e1eccf28SAndroid Build Coastguard Worker 
468*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_INIT                                    = 100001,
469*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_SHUTDOWN                                = 100002,
470*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_SWAP                                    = 100003,
471*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_SET_SURFACE                             = 100004,
472*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_RASTER_INIT                             = 101000,
473*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_RASTER_SET_ACTIVE                       = 101001,
474*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_RASTER_DESTROY                          = 101002,
475*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_VERTEX_INIT                             = 102000,
476*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_VERTEX_SET_ACTIVE                       = 102001,
477*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_VERTEX_DESTROY                          = 102002,
478*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_FRAGMENT_INIT                           = 103000,
479*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_FRAGMENT_SET_ACTIVE                     = 103001,
480*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_FRAGMENT_DESTROY                        = 103002,
481*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_MESH_INIT                               = 104000,
482*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_MESH_DRAW                               = 104001,
483*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_MESH_DESTROY                            = 104002,
484*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_FB_INIT                                 = 105000,
485*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_FB_SET_ACTIVE                           = 105001,
486*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_FB_DESTROY                              = 105002,
487*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_STORE_INIT                              = 106000,
488*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_STORE_SET_ACTIVE                        = 106001,
489*e1eccf28SAndroid Build Coastguard Worker     RS_HAL_GRAPHICS_STORE_DESTROY                           = 106002,
490*e1eccf28SAndroid Build Coastguard Worker };
491*e1eccf28SAndroid Build Coastguard Worker 
492*e1eccf28SAndroid Build Coastguard Worker } // namespace renderscript
493*e1eccf28SAndroid Build Coastguard Worker } // namespace android
494*e1eccf28SAndroid Build Coastguard Worker 
495*e1eccf28SAndroid Build Coastguard Worker #ifdef __cplusplus
496*e1eccf28SAndroid Build Coastguard Worker extern "C" {
497*e1eccf28SAndroid Build Coastguard Worker #endif
498*e1eccf28SAndroid Build Coastguard Worker 
499*e1eccf28SAndroid Build Coastguard Worker /**
500*e1eccf28SAndroid Build Coastguard Worker  * Get the major version number of the driver.  The major
501*e1eccf28SAndroid Build Coastguard Worker  * version should be the RS_HAL_VERSION against which the
502*e1eccf28SAndroid Build Coastguard Worker  * driver was built
503*e1eccf28SAndroid Build Coastguard Worker  *
504*e1eccf28SAndroid Build Coastguard Worker  * The Minor version number is vendor specific
505*e1eccf28SAndroid Build Coastguard Worker  *
506*e1eccf28SAndroid Build Coastguard Worker  * The caller should ensure that *version_major is the same as
507*e1eccf28SAndroid Build Coastguard Worker  * RS_HAL_VERSION -- i.e., that the driver (e.g., libRSDriver)
508*e1eccf28SAndroid Build Coastguard Worker  * is compatible with the shell (i.e., libRS_internal) responsible
509*e1eccf28SAndroid Build Coastguard Worker  * for loading the driver
510*e1eccf28SAndroid Build Coastguard Worker  *
511*e1eccf28SAndroid Build Coastguard Worker  * return: False will abort loading the driver, true indicates
512*e1eccf28SAndroid Build Coastguard Worker  * success
513*e1eccf28SAndroid Build Coastguard Worker  */
514*e1eccf28SAndroid Build Coastguard Worker bool rsdHalQueryVersion(uint32_t *version_major, uint32_t *version_minor);
515*e1eccf28SAndroid Build Coastguard Worker 
516*e1eccf28SAndroid Build Coastguard Worker 
517*e1eccf28SAndroid Build Coastguard Worker /**
518*e1eccf28SAndroid Build Coastguard Worker  * Get an entry point in the driver HAL
519*e1eccf28SAndroid Build Coastguard Worker  *
520*e1eccf28SAndroid Build Coastguard Worker  * The driver should set the function pointer to its
521*e1eccf28SAndroid Build Coastguard Worker  * implementation of the function.  If it does not have an entry
522*e1eccf28SAndroid Build Coastguard Worker  * for an enum, its should set the function pointer to NULL
523*e1eccf28SAndroid Build Coastguard Worker  *
524*e1eccf28SAndroid Build Coastguard Worker  * Returning NULL is expected in cases during development as new
525*e1eccf28SAndroid Build Coastguard Worker  * entry points are added that a driver may not understand.  If
526*e1eccf28SAndroid Build Coastguard Worker  * the runtime receives a NULL it will decide if the function is
527*e1eccf28SAndroid Build Coastguard Worker  * required and will either continue loading or abort as needed.
528*e1eccf28SAndroid Build Coastguard Worker  *
529*e1eccf28SAndroid Build Coastguard Worker  *
530*e1eccf28SAndroid Build Coastguard Worker  * return: False will abort loading the driver, true indicates
531*e1eccf28SAndroid Build Coastguard Worker  * success
532*e1eccf28SAndroid Build Coastguard Worker  *
533*e1eccf28SAndroid Build Coastguard Worker  */
534*e1eccf28SAndroid Build Coastguard Worker bool rsdHalQueryHal(android::renderscript::RsHalInitEnums entry, void **fnPtr);
535*e1eccf28SAndroid Build Coastguard Worker 
536*e1eccf28SAndroid Build Coastguard Worker 
537*e1eccf28SAndroid Build Coastguard Worker /**
538*e1eccf28SAndroid Build Coastguard Worker  * Called to initialize the context for use with a driver.
539*e1eccf28SAndroid Build Coastguard Worker  *
540*e1eccf28SAndroid Build Coastguard Worker  * return: False will abort loading the driver, true indicates
541*e1eccf28SAndroid Build Coastguard Worker  * success
542*e1eccf28SAndroid Build Coastguard Worker  */
543*e1eccf28SAndroid Build Coastguard Worker bool rsdHalInit(RsContext, uint32_t version_major, uint32_t version_minor);
544*e1eccf28SAndroid Build Coastguard Worker 
545*e1eccf28SAndroid Build Coastguard Worker /**
546*e1eccf28SAndroid Build Coastguard Worker  * Called if one of the loading functions above returns false.
547*e1eccf28SAndroid Build Coastguard Worker  * This is to clean up any resources allocated during an error
548*e1eccf28SAndroid Build Coastguard Worker  * condition. If this path is called it means the normal
549*e1eccf28SAndroid Build Coastguard Worker  * context->mHal.funcs.shutdown() will not be called.
550*e1eccf28SAndroid Build Coastguard Worker  */
551*e1eccf28SAndroid Build Coastguard Worker void rsdHalAbort(RsContext);
552*e1eccf28SAndroid Build Coastguard Worker 
553*e1eccf28SAndroid Build Coastguard Worker #ifdef __cplusplus
554*e1eccf28SAndroid Build Coastguard Worker }
555*e1eccf28SAndroid Build Coastguard Worker #endif
556*e1eccf28SAndroid Build Coastguard Worker 
557*e1eccf28SAndroid Build Coastguard Worker #endif
558