18eaba4fee0c7b5325742c87187622fdff51d5effJason Sams/*
28eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * Copyright (C) 2012 The Android Open Source Project
38eaba4fee0c7b5325742c87187622fdff51d5effJason Sams *
48eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
58eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * you may not use this file except in compliance with the License.
68eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * You may obtain a copy of the License at
78eaba4fee0c7b5325742c87187622fdff51d5effJason Sams *
88eaba4fee0c7b5325742c87187622fdff51d5effJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
98eaba4fee0c7b5325742c87187622fdff51d5effJason Sams *
108eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * Unless required by applicable law or agreed to in writing, software
118eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
128eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * See the License for the specific language governing permissions and
148eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * limitations under the License.
158eaba4fee0c7b5325742c87187622fdff51d5effJason Sams */
168eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
178eaba4fee0c7b5325742c87187622fdff51d5effJason Sams#include "rsContext.h"
188eaba4fee0c7b5325742c87187622fdff51d5effJason Sams#include "rsScriptIntrinsic.h"
198eaba4fee0c7b5325742c87187622fdff51d5effJason Sams#include <time.h>
208eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
218eaba4fee0c7b5325742c87187622fdff51d5effJason Samsusing namespace android;
228eaba4fee0c7b5325742c87187622fdff51d5effJason Samsusing namespace android::renderscript;
238eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
248eaba4fee0c7b5325742c87187622fdff51d5effJason SamsScriptIntrinsic::ScriptIntrinsic(Context *rsc) : Script(rsc) {
2575adb8213f045bf3ffbc5deb1350b36d486e228aJason Sams    mIntrinsicID = 0;
268eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
278eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
288eaba4fee0c7b5325742c87187622fdff51d5effJason SamsScriptIntrinsic::~ScriptIntrinsic() {
2975adb8213f045bf3ffbc5deb1350b36d486e228aJason Sams    if (mIntrinsicID != 0) {
3075adb8213f045bf3ffbc5deb1350b36d486e228aJason Sams        mRSC->mHal.funcs.script.destroy(mRSC, this);
3175adb8213f045bf3ffbc5deb1350b36d486e228aJason Sams    }
328eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
338eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
3441d6c769f5fa21da3cbc116af95d88949a4a5c76Stephen Hinesbool ScriptIntrinsic::init(Context *rsc, RsScriptIntrinsicID iid, Element *e) {
358eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    mIntrinsicID = iid;
368eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    mElement.set(e);
3717f03fc9552551024fa9ec50e3b020c7e3100ceeJason Sams    mSlots = new ObjectBaseRef<Allocation>[2];
3817f03fc9552551024fa9ec50e3b020c7e3100ceeJason Sams    mTypes = new ObjectBaseRef<const Type>[2];
3917f03fc9552551024fa9ec50e3b020c7e3100ceeJason Sams
408eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    rsc->mHal.funcs.script.initIntrinsic(rsc, this, iid, e);
418eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
4217f03fc9552551024fa9ec50e3b020c7e3100ceeJason Sams
438eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    return true;
448eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
458eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
468eaba4fee0c7b5325742c87187622fdff51d5effJason Samsbool ScriptIntrinsic::freeChildren() {
478eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    return false;
488eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
498eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
508eaba4fee0c7b5325742c87187622fdff51d5effJason Samsvoid ScriptIntrinsic::setupScript(Context *rsc) {
518eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
528eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
538eaba4fee0c7b5325742c87187622fdff51d5effJason Samsuint32_t ScriptIntrinsic::run(Context *rsc) {
548eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    rsAssert(!"ScriptIntrinsic::run - should not happen");
558eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    return 0;
568eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
578eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
588eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
598eaba4fee0c7b5325742c87187622fdff51d5effJason Samsvoid ScriptIntrinsic::runForEach(Context *rsc,
608eaba4fee0c7b5325742c87187622fdff51d5effJason Sams                         uint32_t slot,
618eaba4fee0c7b5325742c87187622fdff51d5effJason Sams                         const Allocation * ain,
628eaba4fee0c7b5325742c87187622fdff51d5effJason Sams                         Allocation * aout,
638eaba4fee0c7b5325742c87187622fdff51d5effJason Sams                         const void * usr,
648eaba4fee0c7b5325742c87187622fdff51d5effJason Sams                         size_t usrBytes,
658eaba4fee0c7b5325742c87187622fdff51d5effJason Sams                         const RsScriptCall *sc) {
668eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
678eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    rsc->mHal.funcs.script.invokeForEach(rsc, this, slot, ain, aout, usr, usrBytes, sc);
688eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
698eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
704b3c34e6833e39bc89c2128002806b654b8e623dChris Wailesvoid ScriptIntrinsic::runForEach(Context* rsc,
714b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes                         uint32_t slot,
724b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes                         const Allocation** ains,
734b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes                         size_t inLen,
744b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes                         Allocation* aout,
754b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes                         const void* usr,
764b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes                         size_t usrBytes,
774b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes                         const RsScriptCall* sc) {
784b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes
794b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes    rsc->mHal.funcs.script.invokeForEachMulti(rsc, this, slot, ains, inLen, aout, usr, usrBytes, sc);
804b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes}
814b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes
828eaba4fee0c7b5325742c87187622fdff51d5effJason Samsvoid ScriptIntrinsic::Invoke(Context *rsc, uint32_t slot, const void *data, size_t len) {
838eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
848eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
858eaba4fee0c7b5325742c87187622fdff51d5effJason Samsvoid ScriptIntrinsic::serialize(Context *rsc, OStream *stream) const {
868eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
878eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
888eaba4fee0c7b5325742c87187622fdff51d5effJason SamsRsA3DClassID ScriptIntrinsic::getClassId() const {
898eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    return (RsA3DClassID)0;
908eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
918eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
928eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
938eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
948eaba4fee0c7b5325742c87187622fdff51d5effJason Samsnamespace android {
958eaba4fee0c7b5325742c87187622fdff51d5effJason Samsnamespace renderscript {
968eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
978eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
988eaba4fee0c7b5325742c87187622fdff51d5effJason SamsRsScript rsi_ScriptIntrinsicCreate(Context *rsc, uint32_t id, RsElement ve) {
998eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    ScriptIntrinsic *si = new ScriptIntrinsic(rsc);
10041d6c769f5fa21da3cbc116af95d88949a4a5c76Stephen Hines    if (!si->init(rsc, (RsScriptIntrinsicID)id, (Element *)ve)) {
1018eaba4fee0c7b5325742c87187622fdff51d5effJason Sams        delete si;
1028eaba4fee0c7b5325742c87187622fdff51d5effJason Sams        return NULL;
1038eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    }
104c5c744ab52b06f7621cbcc8952d4a5eba3d7254cJason Sams    si->incUserRef();
1058eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    return si;
1068eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
1078eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
1088eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
1098eaba4fee0c7b5325742c87187622fdff51d5effJason Sams}
1108eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
1118eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
112