blob: 0e07aafdfa6ee9440b1dd63bae54ae3cbf474a80 [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
Jason Sams709a0972012-11-15 18:18:04 -080017#include "../cpu_ref/rsd_cpu.h"
18
Jason Samsbad80742011-03-16 16:29:28 -070019#include "rsdCore.h"
Jason Samsbad80742011-03-16 16:29:28 -070020
Jason Samsdbe66d62012-09-17 13:54:41 -070021#include "rsdBcc.h"
Jason Samsdbe66d62012-09-17 13:54:41 -070022#include "rsdAllocation.h"
Jason Samsdbe66d62012-09-17 13:54:41 -070023
Jason Samsbad80742011-03-16 16:29:28 -070024#include "rsContext.h"
Stephen Hines2980f072012-04-09 18:26:29 -070025#include "rsElement.h"
Jason Samsbad80742011-03-16 16:29:28 -070026#include "rsScriptC.h"
27
Chih-Hung Hsiehe939ce72016-11-15 16:27:11 -080028using android::renderscript::Allocation;
29using android::renderscript::Context;
30using android::renderscript::Element;
31using android::renderscript::ObjectBase;
32using android::renderscript::RsdCpuReference;
33using android::renderscript::Script;
34using android::renderscript::ScriptC;
35using android::renderscript::rs_script;
Jason Sams83c451a2011-04-21 11:46:50 -070036
Jason Samsbad80742011-03-16 16:29:28 -070037bool rsdScriptInit(const Context *rsc,
38 ScriptC *script,
39 char const *resName,
40 char const *cacheDir,
41 uint8_t const *bitcode,
42 size_t bitcodeSize,
Jason Sams87fe59a2011-04-20 15:09:01 -070043 uint32_t flags) {
Jason Sams709a0972012-11-15 18:18:04 -080044 RsdHal *dc = (RsdHal *)rsc->mHal.drv;
Chris Wailesf3712132014-07-16 15:18:30 -070045 RsdCpuReference::CpuScript * cs =
46 dc->mCpuRef->createScript(script, resName, cacheDir, bitcode,
47 bitcodeSize, flags);
Chris Wailes44bef6f2014-08-12 13:51:10 -070048 if (cs == nullptr) {
Jason Sams709a0972012-11-15 18:18:04 -080049 return false;
Jason Samsbad80742011-03-16 16:29:28 -070050 }
Jason Sams709a0972012-11-15 18:18:04 -080051 script->mHal.drv = cs;
52 cs->populateScript(script);
Jason Samsbad80742011-03-16 16:29:28 -070053 return true;
Jason Samsbad80742011-03-16 16:29:28 -070054}
55
Chris Wailesf3712132014-07-16 15:18:30 -070056bool rsdInitIntrinsic(const Context *rsc, Script *s, RsScriptIntrinsicID iid,
57 Element *e) {
Jason Sams709a0972012-11-15 18:18:04 -080058 RsdHal *dc = (RsdHal *)rsc->mHal.drv;
59 RsdCpuReference::CpuScript * cs = dc->mCpuRef->createIntrinsic(s, iid, e);
Chris Wailes44bef6f2014-08-12 13:51:10 -070060 if (cs == nullptr) {
Jason Sams709a0972012-11-15 18:18:04 -080061 return false;
Jason Sams8eaba4f2012-08-14 14:38:05 -070062 }
Jason Sams709a0972012-11-15 18:18:04 -080063 s->mHal.drv = cs;
64 cs->populateScript(s);
Jason Sams8eaba4f2012-08-14 14:38:05 -070065 return true;
Jason Samsdbe66d62012-09-17 13:54:41 -070066}
67
Jason Samscdfdb8f2011-03-17 16:12:47 -070068void rsdScriptInvokeForEach(const Context *rsc,
69 Script *s,
Jason Sams35e429e2011-07-13 11:26:26 -070070 uint32_t slot,
Jason Samscdfdb8f2011-03-17 16:12:47 -070071 const Allocation * ain,
72 Allocation * aout,
73 const void * usr,
Tim Murray099bc262013-03-20 16:54:03 -070074 size_t usrLen,
Jason Samscdfdb8f2011-03-17 16:12:47 -070075 const RsScriptCall *sc) {
76
Chris Wailes44bef6f2014-08-12 13:51:10 -070077 if (ain == nullptr) {
78 rsdScriptInvokeForEachMulti(rsc, s, slot, nullptr, 0, aout, usr, usrLen,
Chris Wailesf3712132014-07-16 15:18:30 -070079 sc);
80 } else {
81 const Allocation *ains[1] = {ain};
82
83 rsdScriptInvokeForEachMulti(rsc, s, slot, ains, 1, aout, usr, usrLen,
84 sc);
85 }
Jason Samscdfdb8f2011-03-17 16:12:47 -070086}
87
Chris Wailes4b3c34e2014-06-11 12:00:29 -070088void rsdScriptInvokeForEachMulti(const Context *rsc,
89 Script *s,
90 uint32_t slot,
91 const Allocation ** ains,
92 size_t inLen,
93 Allocation * aout,
94 const void * usr,
95 size_t usrLen,
96 const RsScriptCall *sc) {
97
98 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
Chris Wailesf3712132014-07-16 15:18:30 -070099 cs->invokeForEach(slot, ains, inLen, aout, usr, usrLen, sc);
Chris Wailes4b3c34e2014-06-11 12:00:29 -0700100}
101
Jason Samscdfdb8f2011-03-17 16:12:47 -0700102
Jason Sams709a0972012-11-15 18:18:04 -0800103int rsdScriptInvokeRoot(const Context *dc, Script *s) {
104 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
105 return cs->invokeRoot();
Jason Samscdfdb8f2011-03-17 16:12:47 -0700106}
107
Jason Sams709a0972012-11-15 18:18:04 -0800108void rsdScriptInvokeInit(const Context *dc, Script *s) {
109 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
110 cs->invokeInit();
Jason Samsbad80742011-03-16 16:29:28 -0700111}
112
Jason Sams709a0972012-11-15 18:18:04 -0800113void rsdScriptInvokeFreeChildren(const Context *dc, Script *s) {
114 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
115 cs->invokeFreeChildren();
Stephen Hines4ee16ff2011-08-31 17:41:39 -0700116}
Jason Samsbad80742011-03-16 16:29:28 -0700117
Jason Sams709a0972012-11-15 18:18:04 -0800118void rsdScriptInvokeFunction(const Context *dc, Script *s,
Jason Samsbad80742011-03-16 16:29:28 -0700119 uint32_t slot,
120 const void *params,
121 size_t paramLength) {
Jason Sams709a0972012-11-15 18:18:04 -0800122 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
123 cs->invokeFunction(slot, params, paramLength);
Jason Samsbad80742011-03-16 16:29:28 -0700124}
125
Matt Wala14ce0072015-07-30 17:30:25 -0700126void rsdScriptInvokeReduce(const Context *dc, Script *s,
127 uint32_t slot,
David Grossae2ec3f2016-06-01 14:45:47 -0700128 const Allocation ** ains, size_t inLen,
Matt Wala14ce0072015-07-30 17:30:25 -0700129 Allocation *aout,
130 const RsScriptCall *sc) {
131 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
David Grossae2ec3f2016-06-01 14:45:47 -0700132 cs->invokeReduce(slot, ains, inLen, aout, sc);
David Gross6c1876b2016-01-15 11:52:14 -0800133}
134
Jason Sams709a0972012-11-15 18:18:04 -0800135void rsdScriptSetGlobalVar(const Context *dc, const Script *s,
Jason Samsbad80742011-03-16 16:29:28 -0700136 uint32_t slot, void *data, size_t dataLength) {
Jason Sams709a0972012-11-15 18:18:04 -0800137 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
138 cs->setGlobalVar(slot, data, dataLength);
Jason Samsbad80742011-03-16 16:29:28 -0700139}
140
Tim Murray9c642392013-04-11 13:29:59 -0700141void rsdScriptGetGlobalVar(const Context *dc, const Script *s,
142 uint32_t slot, void *data, size_t dataLength) {
143 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
144 cs->getGlobalVar(slot, data, dataLength);
145}
146
147
Jason Sams709a0972012-11-15 18:18:04 -0800148void rsdScriptSetGlobalVarWithElemDims(const Context *dc, const Script *s,
149 uint32_t slot, void *data, size_t dataLength,
150 const android::renderscript::Element *elem,
Stephen Hinesac8d1462014-06-25 00:01:23 -0700151 const uint32_t *dims, size_t dimLength) {
Jason Sams709a0972012-11-15 18:18:04 -0800152 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
153 cs->setGlobalVarWithElemDims(slot, data, dataLength, elem, dims, dimLength);
Stephen Hines2980f072012-04-09 18:26:29 -0700154}
155
Jason Sams709a0972012-11-15 18:18:04 -0800156void rsdScriptSetGlobalBind(const Context *dc, const Script *s, uint32_t slot, Allocation *data) {
157 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
158 cs->setGlobalBind(slot, data);
Jason Samsbad80742011-03-16 16:29:28 -0700159}
160
Jason Sams709a0972012-11-15 18:18:04 -0800161void rsdScriptSetGlobalObj(const Context *dc, const Script *s, uint32_t slot, ObjectBase *data) {
162 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
163 cs->setGlobalObj(slot, data);
Jason Samsbad80742011-03-16 16:29:28 -0700164}
165
Jason Sams709a0972012-11-15 18:18:04 -0800166void rsdScriptDestroy(const Context *dc, Script *s) {
167 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)s->mHal.drv;
168 delete cs;
Chris Wailes44bef6f2014-08-12 13:51:10 -0700169 s->mHal.drv = nullptr;
Jason Samsbad80742011-03-16 16:29:28 -0700170}
Jason Sams807fdc42012-07-25 17:55:39 -0700171
Jason Sams709a0972012-11-15 18:18:04 -0800172
Jason Sams807fdc42012-07-25 17:55:39 -0700173Allocation * rsdScriptGetAllocationForPointer(const android::renderscript::Context *dc,
174 const android::renderscript::Script *sc,
175 const void *ptr) {
Jason Sams709a0972012-11-15 18:18:04 -0800176 RsdCpuReference::CpuScript *cs = (RsdCpuReference::CpuScript *)sc->mHal.drv;
177 return cs->getAllocationForPointer(ptr);
Jason Sams807fdc42012-07-25 17:55:39 -0700178}
Jason Samsa36c50a2014-06-17 12:06:06 -0700179
180void rsdScriptUpdateCachedObject(const Context *rsc,
181 const Script *script,
182 rs_script *obj)
183{
184 obj->p = script;
185#ifdef __LP64__
I-Jui (Ray) Sung700e6882017-03-06 14:42:53 -0800186 obj->unused1 = nullptr;
187 obj->unused2 = nullptr;
188 obj->unused3 = nullptr;
Jason Samsa36c50a2014-06-17 12:06:06 -0700189#endif
190}