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 #include "../cpu_ref/rsd_cpu.h" 18 19 #include "rsdCore.h" 20 21 #include "rsdBcc.h" 22 #include "rsdAllocation.h" 23 24 #include "rsContext.h" 25 #include "rsElement.h" 26 #include "rsScriptC.h" 27 28 #if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB) 29 #include "utils/Vector.h" 30 #include "utils/Timers.h" 31 #include "utils/StopWatch.h" 32 #endif 33 34 using namespace android; 35 using namespace android::renderscript; 36 37 38 bool rsdScriptInit(const Context *rsc, 39 ScriptC *script, 40 char const *resName, 41 char const *cacheDir, 42 uint8_t const *bitcode, 43 size_t bitcodeSize, 44 uint32_t flags) { 45 RsdHal *dc = (RsdHal *)rsc->mHal.drv; 46 RsdCpuReference::CpuScript * cs = dc->mCpuRef->createScript(script, resName, cacheDir, 47 bitcode, bitcodeSize, flags); 48 if (cs == NULL) { 49 return false; 50 } 51 script->mHal.drv = cs; 52 cs->populateScript(script); 53 return true; 54 } 55 56 bool rsdInitIntrinsic(const Context *rsc, Script *s, RsScriptIntrinsicID iid, Element *e) { 57 RsdHal *dc = (RsdHal *)rsc->mHal.drv; 58 RsdCpuReference::CpuScript * cs = dc->mCpuRef->createIntrinsic(s, iid, e); 59 if (cs == NULL) { 60 return false; 61 } 62 s->mHal.drv = cs; 63 cs->populateScript(s); 64 return true; 65 } 66 67 void rsdScriptInvokeForEach(const Context *rsc, 68 Script *s, 69 uint32_t slot, 70 const Allocation * ain, 71 Allocation * aout, 72 const void * usr, 73 size_t usrLen, 74 const RsScriptCall *sc) { 75 76 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv; 77 cs->invokeForEach(slot, ain, aout, usr, usrLen, sc); 78 } 79 80 81 int rsdScriptInvokeRoot(const Context *dc, Script *s) { 82 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv; 83 return cs->invokeRoot(); 84 } 85 86 void rsdScriptInvokeInit(const Context *dc, Script *s) { 87 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv; 88 cs->invokeInit(); 89 } 90 91 void rsdScriptInvokeFreeChildren(const Context *dc, Script *s) { 92 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv; 93 cs->invokeFreeChildren(); 94 } 95 96 void rsdScriptInvokeFunction(const Context *dc, Script *s, 97 uint32_t slot, 98 const void *params, 99 size_t paramLength) { 100 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv; 101 cs->invokeFunction(slot, params, paramLength); 102 } 103 104 void rsdScriptSetGlobalVar(const Context *dc, const Script *s, 105 uint32_t slot, void *data, size_t dataLength) { 106 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv; 107 cs->setGlobalVar(slot, data, dataLength); 108 } 109 110 void rsdScriptGetGlobalVar(const Context *dc, const Script *s, 111 uint32_t slot, void *data, size_t dataLength) { 112 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv; 113 cs->getGlobalVar(slot, data, dataLength); 114 } 115 116 117 void rsdScriptSetGlobalVarWithElemDims(const Context *dc, const Script *s, 118 uint32_t slot, void *data, size_t dataLength, 119 const android::renderscript::Element *elem, 120 const size_t *dims, size_t dimLength) { 121 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv; 122 cs->setGlobalVarWithElemDims(slot, data, dataLength, elem, dims, dimLength); 123 } 124 125 void rsdScriptSetGlobalBind(const Context *dc, const Script *s, uint32_t slot, Allocation *data) { 126 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv; 127 cs->setGlobalBind(slot, data); 128 } 129 130 void rsdScriptSetGlobalObj(const Context *dc, const Script *s, uint32_t slot, ObjectBase *data) { 131 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv; 132 cs->setGlobalObj(slot, data); 133 } 134 135 void rsdScriptDestroy(const Context *dc, Script *s) { 136 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv; 137 delete cs; 138 s->mHal.drv = NULL; 139 } 140 141 142 Allocation * rsdScriptGetAllocationForPointer(const android::renderscript::Context *dc, 143 const android::renderscript::Script *sc, 144 const void *ptr) { 145 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)sc->mHal.drv; 146 return cs->getAllocationForPointer(ptr); 147 } 148 149