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