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