blob: 811fa3e371242a98d0ff85a8b5957b394eb86d42 [file] [log] [blame]
Jason Samsbad80742011-03-16 16:29:28 -07001/*
Stephen Hinesee7aa2e2012-01-12 18:56:23 -08002 * Copyright (C) 2011-2012 The Android Open Source Project
Jason Samsbad80742011-03-16 16:29:28 -07003 *
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
Chris Wailes93d6bc82014-07-28 16:54:38 -070017#include <vector>
18
Jason Sams709a0972012-11-15 18:18:04 -080019#include "../cpu_ref/rsd_cpu.h"
20
Jason Samsbad80742011-03-16 16:29:28 -070021#include "rsdCore.h"
Jason Samsbad80742011-03-16 16:29:28 -070022
Jason Samsdbe66d62012-09-17 13:54:41 -070023#include "rsdBcc.h"
Jason Samsdbe66d62012-09-17 13:54:41 -070024#include "rsdAllocation.h"
Jason Samsdbe66d62012-09-17 13:54:41 -070025
Jason Samsbad80742011-03-16 16:29:28 -070026#include "rsContext.h"
Stephen Hines2980f072012-04-09 18:26:29 -070027#include "rsElement.h"
Jason Samsbad80742011-03-16 16:29:28 -070028#include "rsScriptC.h"
29
Stephen Hinesb0934b62013-07-03 17:27:38 -070030#if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB)
Jason Samsbad80742011-03-16 16:29:28 -070031#include "utils/Timers.h"
32#include "utils/StopWatch.h"
Tim Murray0b575de2013-03-15 15:56:43 -070033#endif
Jason Samsbad80742011-03-16 16:29:28 -070034
Jason Samsbad80742011-03-16 16:29:28 -070035using namespace android;
36using namespace android::renderscript;
37
Jason Sams83c451a2011-04-21 11:46:50 -070038
Jason Samsbad80742011-03-16 16:29:28 -070039bool rsdScriptInit(const Context *rsc,
40 ScriptC *script,
41 char const *resName,
42 char const *cacheDir,
43 uint8_t const *bitcode,
44 size_t bitcodeSize,
Jason Sams87fe59a2011-04-20 15:09:01 -070045 uint32_t flags) {
Jason Sams709a0972012-11-15 18:18:04 -080046 RsdHal *dc = (RsdHal *)rsc->mHal.drv;
Chris Wailesf3712132014-07-16 15:18:30 -070047 RsdCpuReference::CpuScript * cs =
48 dc->mCpuRef->createScript(script, resName, cacheDir, bitcode,
49 bitcodeSize, flags);
Chris Wailes44bef6f2014-08-12 13:51:10 -070050 if (cs == nullptr) {
Jason Sams709a0972012-11-15 18:18:04 -080051 return false;
Jason Samsbad80742011-03-16 16:29:28 -070052 }
Jason Sams709a0972012-11-15 18:18:04 -080053 script->mHal.drv = cs;
54 cs->populateScript(script);
Jason Samsbad80742011-03-16 16:29:28 -070055 return true;
Jason Samsbad80742011-03-16 16:29:28 -070056}
57
Chris Wailesf3712132014-07-16 15:18:30 -070058bool rsdInitIntrinsic(const Context *rsc, Script *s, RsScriptIntrinsicID iid,
59 Element *e) {
Jason Sams709a0972012-11-15 18:18:04 -080060 RsdHal *dc = (RsdHal *)rsc->mHal.drv;
61 RsdCpuReference::CpuScript * cs = dc->mCpuRef->createIntrinsic(s, iid, e);
Chris Wailes44bef6f2014-08-12 13:51:10 -070062 if (cs == nullptr) {
Jason Sams709a0972012-11-15 18:18:04 -080063 return false;
Jason Sams8eaba4f2012-08-14 14:38:05 -070064 }
Jason Sams709a0972012-11-15 18:18:04 -080065 s->mHal.drv = cs;
66 cs->populateScript(s);
Jason Sams8eaba4f2012-08-14 14:38:05 -070067 return true;
Jason Samsdbe66d62012-09-17 13:54:41 -070068}
69
Jason Samscdfdb8f2011-03-17 16:12:47 -070070void rsdScriptInvokeForEach(const Context *rsc,
71 Script *s,
Jason Sams35e429e2011-07-13 11:26:26 -070072 uint32_t slot,
Jason Samscdfdb8f2011-03-17 16:12:47 -070073 const Allocation * ain,
74 Allocation * aout,
75 const void * usr,
Tim Murray099bc262013-03-20 16:54:03 -070076 size_t usrLen,
Jason Samscdfdb8f2011-03-17 16:12:47 -070077 const RsScriptCall *sc) {
78
Chris Wailes44bef6f2014-08-12 13:51:10 -070079 if (ain == nullptr) {
80 rsdScriptInvokeForEachMulti(rsc, s, slot, nullptr, 0, aout, usr, usrLen,
Chris Wailesf3712132014-07-16 15:18:30 -070081 sc);
82 } else {
83 const Allocation *ains[1] = {ain};
84
85 rsdScriptInvokeForEachMulti(rsc, s, slot, ains, 1, aout, usr, usrLen,
86 sc);
87 }
Jason Samscdfdb8f2011-03-17 16:12:47 -070088}
89
Chris Wailes4b3c34e2014-06-11 12:00:29 -070090void rsdScriptInvokeForEachMulti(const Context *rsc,
91 Script *s,
92 uint32_t slot,
93 const Allocation ** ains,
94 size_t inLen,
95 Allocation * aout,
96 const void * usr,
97 size_t usrLen,
98 const RsScriptCall *sc) {
99
100 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
Chris Wailesf3712132014-07-16 15:18:30 -0700101 cs->invokeForEach(slot, ains, inLen, aout, usr, usrLen, sc);
Chris Wailes4b3c34e2014-06-11 12:00:29 -0700102}
103
Jason Samscdfdb8f2011-03-17 16:12:47 -0700104
Jason Sams709a0972012-11-15 18:18:04 -0800105int rsdScriptInvokeRoot(const Context *dc, Script *s) {
106 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
107 return cs->invokeRoot();
Jason Samscdfdb8f2011-03-17 16:12:47 -0700108}
109
Jason Sams709a0972012-11-15 18:18:04 -0800110void rsdScriptInvokeInit(const Context *dc, Script *s) {
111 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
112 cs->invokeInit();
Jason Samsbad80742011-03-16 16:29:28 -0700113}
114
Jason Sams709a0972012-11-15 18:18:04 -0800115void rsdScriptInvokeFreeChildren(const Context *dc, Script *s) {
116 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
117 cs->invokeFreeChildren();
Stephen Hines4ee16ff2011-08-31 17:41:39 -0700118}
Jason Samsbad80742011-03-16 16:29:28 -0700119
Jason Sams709a0972012-11-15 18:18:04 -0800120void rsdScriptInvokeFunction(const Context *dc, Script *s,
Jason Samsbad80742011-03-16 16:29:28 -0700121 uint32_t slot,
122 const void *params,
123 size_t paramLength) {
Jason Sams709a0972012-11-15 18:18:04 -0800124 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
125 cs->invokeFunction(slot, params, paramLength);
Jason Samsbad80742011-03-16 16:29:28 -0700126}
127
Jason Sams709a0972012-11-15 18:18:04 -0800128void rsdScriptSetGlobalVar(const Context *dc, const Script *s,
Jason Samsbad80742011-03-16 16:29:28 -0700129 uint32_t slot, void *data, size_t dataLength) {
Jason Sams709a0972012-11-15 18:18:04 -0800130 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
131 cs->setGlobalVar(slot, data, dataLength);
Jason Samsbad80742011-03-16 16:29:28 -0700132}
133
Tim Murray9c642392013-04-11 13:29:59 -0700134void rsdScriptGetGlobalVar(const Context *dc, const Script *s,
135 uint32_t slot, void *data, size_t dataLength) {
136 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
137 cs->getGlobalVar(slot, data, dataLength);
138}
139
140
Jason Sams709a0972012-11-15 18:18:04 -0800141void rsdScriptSetGlobalVarWithElemDims(const Context *dc, const Script *s,
142 uint32_t slot, void *data, size_t dataLength,
143 const android::renderscript::Element *elem,
Stephen Hinesac8d1462014-06-25 00:01:23 -0700144 const uint32_t *dims, size_t dimLength) {
Jason Sams709a0972012-11-15 18:18:04 -0800145 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
146 cs->setGlobalVarWithElemDims(slot, data, dataLength, elem, dims, dimLength);
Stephen Hines2980f072012-04-09 18:26:29 -0700147}
148
Jason Sams709a0972012-11-15 18:18:04 -0800149void rsdScriptSetGlobalBind(const Context *dc, const Script *s, uint32_t slot, Allocation *data) {
150 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
151 cs->setGlobalBind(slot, data);
Jason Samsbad80742011-03-16 16:29:28 -0700152}
153
Jason Sams709a0972012-11-15 18:18:04 -0800154void rsdScriptSetGlobalObj(const Context *dc, const Script *s, uint32_t slot, ObjectBase *data) {
155 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
156 cs->setGlobalObj(slot, data);
Jason Samsbad80742011-03-16 16:29:28 -0700157}
158
Jason Sams709a0972012-11-15 18:18:04 -0800159void rsdScriptDestroy(const Context *dc, Script *s) {
160 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
161 delete cs;
Chris Wailes44bef6f2014-08-12 13:51:10 -0700162 s->mHal.drv = nullptr;
Jason Samsbad80742011-03-16 16:29:28 -0700163}
Jason Sams807fdc42012-07-25 17:55:39 -0700164
Jason Sams709a0972012-11-15 18:18:04 -0800165
Jason Sams807fdc42012-07-25 17:55:39 -0700166Allocation * rsdScriptGetAllocationForPointer(const android::renderscript::Context *dc,
167 const android::renderscript::Script *sc,
168 const void *ptr) {
Jason Sams709a0972012-11-15 18:18:04 -0800169 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)sc->mHal.drv;
170 return cs->getAllocationForPointer(ptr);
Jason Sams807fdc42012-07-25 17:55:39 -0700171}
Jason Samsa36c50a2014-06-17 12:06:06 -0700172
173void rsdScriptUpdateCachedObject(const Context *rsc,
174 const Script *script,
175 rs_script *obj)
176{
177 obj->p = script;
178#ifdef __LP64__
Chris Wailes44bef6f2014-08-12 13:51:10 -0700179 obj->r = nullptr;
180 if (script != nullptr) {
Jason Samsa36c50a2014-06-17 12:06:06 -0700181 obj->v1 = script->mHal.drv;
182 } else {
Chris Wailes44bef6f2014-08-12 13:51:10 -0700183 obj->v1 = nullptr;
Jason Samsa36c50a2014-06-17 12:06:06 -0700184 }
Chris Wailes44bef6f2014-08-12 13:51:10 -0700185 obj->v2 = nullptr;
Jason Samsa36c50a2014-06-17 12:06:06 -0700186#endif
187}