rs_hal.h revision 807fdc4b6f3fb893015ee136565d6151bb2332d3
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 <rsDefines.h> 21 22struct ANativeWindow; 23 24namespace android { 25namespace renderscript { 26 27class Context; 28class ObjectBase; 29class Element; 30class Type; 31class Allocation; 32class Script; 33class ScriptC; 34class Path; 35class Program; 36class ProgramStore; 37class ProgramRaster; 38class ProgramVertex; 39class ProgramFragment; 40class Mesh; 41class Sampler; 42class FBOCache; 43 44typedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName); 45 46typedef struct { 47 const void *in; 48 void *out; 49 const void *usr; 50 size_t usr_len; 51 uint32_t x; 52 uint32_t y; 53 uint32_t z; 54 uint32_t lod; 55 RsAllocationCubemapFace face; 56 uint32_t ar[16]; 57} RsForEachStubParamStruct; 58 59/** 60 * Script management functions 61 */ 62typedef struct { 63 bool (*initGraphics)(const Context *); 64 void (*shutdownGraphics)(const Context *); 65 bool (*setSurface)(const Context *, uint32_t w, uint32_t h, RsNativeWindow); 66 void (*swap)(const Context *); 67 68 void (*shutdownDriver)(Context *); 69 void (*getVersion)(unsigned int *major, unsigned int *minor); 70 void (*setPriority)(const Context *, int32_t priority); 71 72 73 74 struct { 75 bool (*init)(const Context *rsc, ScriptC *s, 76 char const *resName, 77 char const *cacheDir, 78 uint8_t const *bitcode, 79 size_t bitcodeSize, 80 uint32_t flags); 81 82 void (*invokeFunction)(const Context *rsc, Script *s, 83 uint32_t slot, 84 const void *params, 85 size_t paramLength); 86 int (*invokeRoot)(const Context *rsc, Script *s); 87 void (*invokeForEach)(const Context *rsc, 88 Script *s, 89 uint32_t slot, 90 const Allocation * ain, 91 Allocation * aout, 92 const void * usr, 93 uint32_t usrLen, 94 const RsScriptCall *sc); 95 void (*invokeInit)(const Context *rsc, Script *s); 96 void (*invokeFreeChildren)(const Context *rsc, Script *s); 97 98 void (*setGlobalVar)(const Context *rsc, const Script *s, 99 uint32_t slot, 100 void *data, 101 size_t dataLength); 102 void (*setGlobalVarWithElemDims)(const Context *rsc, const Script *s, 103 uint32_t slot, 104 void *data, 105 size_t dataLength, 106 const Element *e, 107 const size_t *dims, 108 size_t dimLength); 109 void (*setGlobalBind)(const Context *rsc, const Script *s, 110 uint32_t slot, 111 Allocation *data); 112 void (*setGlobalObj)(const Context *rsc, const Script *s, 113 uint32_t slot, 114 ObjectBase *data); 115 116 void (*destroy)(const Context *rsc, Script *s); 117 } script; 118 119 struct { 120 bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero); 121 void (*destroy)(const Context *rsc, Allocation *alloc); 122 123 void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType, 124 bool zeroNew); 125 void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src); 126 void (*markDirty)(const Context *rsc, const Allocation *alloc); 127 128 int32_t (*initSurfaceTexture)(const Context *rsc, const Allocation *alloc); 129 void (*setSurfaceTexture)(const Context *rsc, Allocation *alloc, ANativeWindow *sur); 130 void (*ioSend)(const Context *rsc, Allocation *alloc); 131 void (*ioReceive)(const Context *rsc, Allocation *alloc); 132 133 void (*data1D)(const Context *rsc, const Allocation *alloc, 134 uint32_t xoff, uint32_t lod, uint32_t count, 135 const void *data, size_t sizeBytes); 136 void (*data2D)(const Context *rsc, const Allocation *alloc, 137 uint32_t xoff, uint32_t yoff, uint32_t lod, 138 RsAllocationCubemapFace face, uint32_t w, uint32_t h, 139 const void *data, size_t sizeBytes); 140 void (*data3D)(const Context *rsc, const Allocation *alloc, 141 uint32_t xoff, uint32_t yoff, uint32_t zoff, 142 uint32_t lod, RsAllocationCubemapFace face, 143 uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes); 144 145 void (*read1D)(const Context *rsc, const Allocation *alloc, 146 uint32_t xoff, uint32_t lod, uint32_t count, 147 void *data, size_t sizeBytes); 148 void (*read2D)(const Context *rsc, const Allocation *alloc, 149 uint32_t xoff, uint32_t yoff, uint32_t lod, 150 RsAllocationCubemapFace face, uint32_t w, uint32_t h, 151 void *data, size_t sizeBytes); 152 void (*read3D)(const Context *rsc, const Allocation *alloc, 153 uint32_t xoff, uint32_t yoff, uint32_t zoff, 154 uint32_t lod, RsAllocationCubemapFace face, 155 uint32_t w, uint32_t h, uint32_t d, void *data, size_t sizeBytes); 156 157 // Lock and unlock make a 1D region of memory available to the CPU 158 // for direct access by pointer. Once unlock is called control is 159 // returned to the SOC driver. 160 void * (*lock1D)(const Context *rsc, const Allocation *alloc); 161 void (*unlock1D)(const Context *rsc, const Allocation *alloc); 162 163 // Allocation to allocation copies 164 void (*allocData1D)(const Context *rsc, 165 const Allocation *dstAlloc, 166 uint32_t dstXoff, uint32_t dstLod, uint32_t count, 167 const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcLod); 168 void (*allocData2D)(const Context *rsc, 169 const Allocation *dstAlloc, 170 uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod, 171 RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h, 172 const Allocation *srcAlloc, 173 uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod, 174 RsAllocationCubemapFace srcFace); 175 void (*allocData3D)(const Context *rsc, 176 const Allocation *dstAlloc, 177 uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff, 178 uint32_t dstLod, RsAllocationCubemapFace dstFace, 179 uint32_t w, uint32_t h, uint32_t d, 180 const Allocation *srcAlloc, 181 uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, 182 uint32_t srcLod, RsAllocationCubemapFace srcFace); 183 184 void (*elementData1D)(const Context *rsc, const Allocation *alloc, uint32_t x, 185 const void *data, uint32_t elementOff, size_t sizeBytes); 186 void (*elementData2D)(const Context *rsc, const Allocation *alloc, uint32_t x, uint32_t y, 187 const void *data, uint32_t elementOff, size_t sizeBytes); 188 189 190 } allocation; 191 192 struct { 193 bool (*init)(const Context *rsc, const ProgramStore *ps); 194 void (*setActive)(const Context *rsc, const ProgramStore *ps); 195 void (*destroy)(const Context *rsc, const ProgramStore *ps); 196 } store; 197 198 struct { 199 bool (*init)(const Context *rsc, const ProgramRaster *ps); 200 void (*setActive)(const Context *rsc, const ProgramRaster *ps); 201 void (*destroy)(const Context *rsc, const ProgramRaster *ps); 202 } raster; 203 204 struct { 205 bool (*init)(const Context *rsc, const ProgramVertex *pv, 206 const char* shader, size_t shaderLen, 207 const char** textureNames, size_t textureNamesCount, 208 const size_t *textureNamesLength); 209 void (*setActive)(const Context *rsc, const ProgramVertex *pv); 210 void (*destroy)(const Context *rsc, const ProgramVertex *pv); 211 } vertex; 212 213 struct { 214 bool (*init)(const Context *rsc, const ProgramFragment *pf, 215 const char* shader, size_t shaderLen, 216 const char** textureNames, size_t textureNamesCount, 217 const size_t *textureNamesLength); 218 void (*setActive)(const Context *rsc, const ProgramFragment *pf); 219 void (*destroy)(const Context *rsc, const ProgramFragment *pf); 220 } fragment; 221 222 struct { 223 bool (*init)(const Context *rsc, const Mesh *m); 224 void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len); 225 void (*destroy)(const Context *rsc, const Mesh *m); 226 } mesh; 227 228 struct { 229 bool (*initStatic)(const Context *rsc, const Path *m, const Allocation *vtx, const Allocation *loops); 230 bool (*initDynamic)(const Context *rsc, const Path *m); 231 void (*draw)(const Context *rsc, const Path *m); 232 void (*destroy)(const Context *rsc, const Path *m); 233 } path; 234 235 struct { 236 bool (*init)(const Context *rsc, const Sampler *m); 237 void (*destroy)(const Context *rsc, const Sampler *m); 238 } sampler; 239 240 struct { 241 bool (*init)(const Context *rsc, const FBOCache *fb); 242 void (*setActive)(const Context *rsc, const FBOCache *fb); 243 void (*destroy)(const Context *rsc, const FBOCache *fb); 244 } framebuffer; 245 246} RsdHalFunctions; 247 248 249} 250} 251 252 253bool rsdHalInit(android::renderscript::Context *, uint32_t version_major, uint32_t version_minor); 254 255#endif 256 257