rs_hal.h revision 451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7
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> 21bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 22bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace android { 23bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsnamespace renderscript { 24bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 25bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Context; 26bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ObjectBase; 27bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Element; 28bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Type; 29bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Allocation; 30bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass Script; 31bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsclass ScriptC; 327f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass Program; 338feea4e0dec48ea03bd6d32706d058b86dddc5baJason Samsclass ProgramStore; 34721acc495b859c6d884725a4f9b5523583dd11c7Jason Samsclass ProgramRaster; 35a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass ProgramVertex; 36a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass ProgramFragment; 37a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass Mesh; 387f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass Sampler; 39da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchoukclass FBOCache; 40bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 41bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef void *(*RsHalSymbolLookupFunc)(void *usrptr, char const *symbolName); 42bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 43451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Samstypedef struct { 44451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams const void *in; 45451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams void *out; 46451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams const void *usr; 47451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams size_t usr_len; 48451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams uint32_t x; 49451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams uint32_t y; 50451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams uint32_t z; 51451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams uint32_t lod; 52451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams RsAllocationCubemapFace face; 53451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams uint32_t ar[16]; 54451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams} RsForEachStubParamStruct; 55451cf2e16555c96eaaf9d8180e29dd97a5d6cbd7Jason Sams 56bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/** 57bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Script management functions 58bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */ 59bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samstypedef struct { 604b3de47071d875faaa7d419d050a464b09538797Jason Sams bool (*initGraphics)(const Context *); 614b3de47071d875faaa7d419d050a464b09538797Jason Sams void (*shutdownGraphics)(const Context *); 627257c7ee4b66f00c43d9235f3ac600061ae79968Alex Sakhartchouk bool (*setSurface)(const Context *, uint32_t w, uint32_t h, RsNativeWindow); 634b3de47071d875faaa7d419d050a464b09538797Jason Sams void (*swap)(const Context *); 644b3de47071d875faaa7d419d050a464b09538797Jason Sams 65cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*shutdownDriver)(Context *); 66bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*getVersion)(unsigned int *major, unsigned int *minor); 67cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*setPriority)(const Context *, int32_t priority); 68bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 69bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 70bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 71bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams struct { 728feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool (*init)(const Context *rsc, ScriptC *s, 738feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams char const *resName, 748feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams char const *cacheDir, 758feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams uint8_t const *bitcode, 768feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams size_t bitcodeSize, 7787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams uint32_t flags); 78bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 79cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeFunction)(const Context *rsc, Script *s, 80bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 81bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams const void *params, 82bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t paramLength); 83cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams int (*invokeRoot)(const Context *rsc, Script *s); 84cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeForEach)(const Context *rsc, 85cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams Script *s, 8635e429ebf817130d8590d11d441a77aa697bd7d4Jason Sams uint32_t slot, 87cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const Allocation * ain, 88cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams Allocation * aout, 89cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const void * usr, 90cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams uint32_t usrLen, 91cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const RsScriptCall *sc); 92cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams void (*invokeInit)(const Context *rsc, Script *s); 93bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 94bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalVar)(const Context *rsc, const Script *s, 95bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 96bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void *data, 97bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t dataLength); 98bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalBind)(const Context *rsc, const Script *s, 99bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 100bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void *data); 101bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*setGlobalObj)(const Context *rsc, const Script *s, 102bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 103bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams ObjectBase *data); 104bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 105bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void (*destroy)(const Context *rsc, Script *s); 106bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams } script; 107bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 1088feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams struct { 109eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams bool (*init)(const Context *rsc, Allocation *alloc, bool forceZero); 110eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*destroy)(const Context *rsc, Allocation *alloc); 111eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 112eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*resize)(const Context *rsc, const Allocation *alloc, const Type *newType, 113eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams bool zeroNew); 114eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*syncAll)(const Context *rsc, const Allocation *alloc, RsAllocationUsageType src); 115eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*markDirty)(const Context *rsc, const Allocation *alloc); 116eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 117eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data1D)(const Context *rsc, const Allocation *alloc, 118eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t xoff, uint32_t lod, uint32_t count, 119eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams const void *data, uint32_t sizeBytes); 120eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data2D)(const Context *rsc, const Allocation *alloc, 121eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t xoff, uint32_t yoff, uint32_t lod, 122eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams RsAllocationCubemapFace face, uint32_t w, uint32_t h, 123eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams const void *data, uint32_t sizeBytes); 124eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*data3D)(const Context *rsc, const Allocation *alloc, 125eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t xoff, uint32_t yoff, uint32_t zoff, 126eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t lod, RsAllocationCubemapFace face, 127eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams uint32_t w, uint32_t h, uint32_t d, const void *data, uint32_t sizeBytes); 128eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 12974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk // Allocation to allocation copies 13074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData1D)(const Context *rsc, 13174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 13274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstLod, uint32_t count, 13374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, uint32_t srcXoff, uint32_t srcLod); 13474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData2D)(const Context *rsc, 13574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 13674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod, 13774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h, 13874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, 13974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod, 14074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk RsAllocationCubemapFace srcFace); 14174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk void (*allocData3D)(const Context *rsc, 14274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *dstAlloc, 14374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff, 14474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstLod, RsAllocationCubemapFace dstFace, 14574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t w, uint32_t h, uint32_t d, 14674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk const Allocation *srcAlloc, 14774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, 14874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcLod, RsAllocationCubemapFace srcFace); 14974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 150eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*elementData1D)(const Context *rsc, const Allocation *alloc, uint32_t x, 151eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams const void *data, uint32_t elementOff, uint32_t sizeBytes); 152eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams void (*elementData2D)(const Context *rsc, const Allocation *alloc, uint32_t x, uint32_t y, 153eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams const void *data, uint32_t elementOff, uint32_t sizeBytes); 154eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 155eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 156eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams } allocation; 157eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams 158eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams struct { 1598feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool (*init)(const Context *rsc, const ProgramStore *ps); 1608feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*setActive)(const Context *rsc, const ProgramStore *ps); 1618feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void (*destroy)(const Context *rsc, const ProgramStore *ps); 1628feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams } store; 1638feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 164721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams struct { 165721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams bool (*init)(const Context *rsc, const ProgramRaster *ps); 166721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*setActive)(const Context *rsc, const ProgramRaster *ps); 167721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams void (*destroy)(const Context *rsc, const ProgramRaster *ps); 168721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams } raster; 1698feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 170a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 171a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramVertex *pv, 172a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk const char* shader, uint32_t shaderLen); 173a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramVertex *pv); 174a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramVertex *pv); 175a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } vertex; 176a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 177a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 178a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const ProgramFragment *pf, 179a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk const char* shader, uint32_t shaderLen); 180a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*setActive)(const Context *rsc, const ProgramFragment *pf); 181a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const ProgramFragment *pf); 182a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } fragment; 183a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 184a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct { 185a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool (*init)(const Context *rsc, const Mesh *m); 186a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*draw)(const Context *rsc, const Mesh *m, uint32_t primIndex, uint32_t start, uint32_t len); 187a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void (*destroy)(const Context *rsc, const Mesh *m); 188a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } mesh; 189bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 1907f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk struct { 1917f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk bool (*init)(const Context *rsc, const Sampler *m); 1927f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk void (*destroy)(const Context *rsc, const Sampler *m); 1937f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk } sampler; 1947f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk 195da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk struct { 196da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk bool (*init)(const Context *rsc, const FBOCache *fb); 197da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*setActive)(const Context *rsc, const FBOCache *fb); 198da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk void (*destroy)(const Context *rsc, const FBOCache *fb); 199da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk } framebuffer; 200da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk 201bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} RsdHalFunctions; 202bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 203bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 204bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 205bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams} 206bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 207bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 208bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsbool rsdHalInit(android::renderscript::Context *, uint32_t version_major, uint32_t version_minor); 209bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 210bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#endif 211bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 212