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