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