rs_hal.h revision 7257c7ee4b66f00c43d9235f3ac600061ae79968
1bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/* 2bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Copyright (C) 2011 The Android Open Source Project 3bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * 4bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * you may not use this file except in compliance with the License. 6bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * You may obtain a copy of the License at 7bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * 8bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * 10bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Unless required by applicable law or agreed to in writing, software 11bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * See the License for the specific language governing permissions and 14bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * limitations under the License. 15bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */ 16bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 17bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#ifndef RS_HAL_H 18bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#define RS_HAL_H 19bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 20bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#include <RenderScriptDefines.h> 214b3de47071d875faaa7d419d050a464b09538797Jason Sams#include <ui/egl/android_natives.h> 22bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 23bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace android { 24bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace renderscript { 25bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 26bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Context; 27bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ObjectBase; 28bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Element; 29bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Type; 30bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Allocation; 31bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Script; 32bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ScriptC; 337f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass Program; 348feea4e0dec48ea03bd6d32706d058b86dddc5baJason Samsclass ProgramStore; 35721acc495b859c6d884725a4f9b5523583dd11c7Jason Samsclass ProgramRaster; 36a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass ProgramVertex; 37a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass ProgramFragment; 38a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass Mesh; 397f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass Sampler; 40da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchoukclass FBOCache; 41bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 42bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName); 43bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 44bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/** 45bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Script management functions 46bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */ 47bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef struct { 484b3de47071d875faaa7d419d050a464b09538797Jason Sams bool (*initGraphics)(const Context *); 494b3de47071d875faaa7d419d050a464b09538797Jason Sams void (*shutdownGraphics)(const Context *); 507257c7ee4b66f00c43d9235f3ac600061ae79968Alex Sakhartchouk bool (*setSurface)(const Context *, uint32_t w, uint32_t h, RsNativeWindow); 514b3de47071d875faaa7d419d050a464b09538797Jason Sams void (*swap)(const Context *); 524b3de47071d875faaa7d419d050a464b09538797Jason Sams 53cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*shutdownDriver)(Context *); 54bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*getVersion)(unsigned int *major, unsigned int *minor); 55cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*setPriority)(const Context *, int32_t priority); 56bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 57bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 58bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 59bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams struct { 608feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool (*init)(const Context *rsc, ScriptC *s, 618feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams char const *resName, 628feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams char const *cacheDir, 638feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams uint8_t const *bitcode, 648feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams size_t bitcodeSize, 6587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams uint32_t flags); 66bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 67cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeFunction)(const Context *rsc, Script *s, 68bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 69bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams const void *params, 70bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t paramLength); 71cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams int (*invokeRoot)(const Context *rsc, Script *s); 72cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeForEach)(const Context *rsc, 73cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams Script *s, 74cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const Allocation * ain, 75cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams Allocation * aout, 76cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const void * usr, 77cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams uint32_t usrLen, 78cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const RsScriptCall *sc); 79cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeInit)(const Context *rsc, Script *s); 80bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 81bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalVar)(const Context *rsc, const Script *s, 82bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 83bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void *data, 84bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t dataLength); 85bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalBind)(const Context *rsc, const Script *s, 86bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 87bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void *data); 88bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalObj)(const Context *rsc, const Script *s, 89bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 90bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams ObjectBase *data); 91bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 92bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*destroy)(const Context *rsc, Script *s); 93bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams } script; 94bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 958feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams struct { 968feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool (*init)(const Context *rsc, const ProgramStore *ps); 978feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*setActive)(const Context *rsc, const ProgramStore *ps); 988feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*destroy)(const Context *rsc, const ProgramStore *ps); 998feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams } store; 1008feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 101721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams struct { 102721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams bool (*init)(const Context *rsc, const ProgramRaster *ps); 103721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*setActive)(const Context *rsc, const ProgramRaster *ps); 104721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*destroy)(const Context *rsc, const ProgramRaster *ps); 105721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams } raster; 1068feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 107a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 108a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramVertex *pv, 109a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk const char* shader, uint32_t shaderLen); 110a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramVertex *pv); 111a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramVertex *pv); 112a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } vertex; 113a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 114a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 115a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramFragment *pf, 116a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk const char* shader, uint32_t shaderLen); 117a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramFragment *pf); 118a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramFragment *pf); 119a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } fragment; 120a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 121a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 122a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const Mesh *m); 123a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len); 124a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const Mesh *m); 125a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } mesh; 126bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 1277f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk struct { 1287f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk bool (*init)(const Context *rsc, const Sampler *m); 1297f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk void (*destroy)(const Context *rsc, const Sampler *m); 1307f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk } sampler; 1317f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk 132da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk struct { 133da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk bool (*init)(const Context *rsc, const FBOCache *fb); 134da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*setActive)(const Context *rsc, const FBOCache *fb); 135da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*destroy)(const Context *rsc, const FBOCache *fb); 136da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk } framebuffer; 137da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk 138bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} RsdHalFunctions; 139bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 140bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 141bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 142bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 143bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 144bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 145bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsbool rsdHalInit(android::renderscript::Context *, uint32_t version_major, uint32_t version_minor); 146bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 147bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#endif 148bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 149