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