1709a0978ae141198018ca9769f8d96292a8928e6Jason Sams/* 2709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * Copyright (C) 2012 The Android Open Source Project 3709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * 4709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * you may not use this file except in compliance with the License. 6709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * You may obtain a copy of the License at 7709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * 8709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * 10709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * Unless required by applicable law or agreed to in writing, software 11709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * See the License for the specific language governing permissions and 14709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * limitations under the License. 15709a0978ae141198018ca9769f8d96292a8928e6Jason Sams */ 16709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 17709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 18709a0978ae141198018ca9769f8d96292a8928e6Jason Sams#include "rsCpuIntrinsic.h" 19709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 20709a0978ae141198018ca9769f8d96292a8928e6Jason Samsusing namespace android; 21709a0978ae141198018ca9769f8d96292a8928e6Jason Samsusing namespace android::renderscript; 22709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 23709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsic::RsdCpuScriptIntrinsic(RsdCpuReferenceImpl *ctx, const Script *s, 24c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams const Element *e, RsScriptIntrinsicID iid) 25709a0978ae141198018ca9769f8d96292a8928e6Jason Sams : RsdCpuScriptImpl(ctx, s) { 26709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 27709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mID = iid; 28c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams mElement.set(e); 29709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 30709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 31709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsic::~RsdCpuScriptIntrinsic() { 32709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 33709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 34709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsic::invokeFunction(uint32_t slot, const void *params, size_t paramLength) { 35709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mCtx->getContext()->setError(RS_ERROR_FATAL_DRIVER, 36709a0978ae141198018ca9769f8d96292a8928e6Jason Sams "Unexpected RsdCpuScriptIntrinsic::invokeFunction"); 37709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 38709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 39709a0978ae141198018ca9769f8d96292a8928e6Jason Samsint RsdCpuScriptIntrinsic::invokeRoot() { 40709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mCtx->getContext()->setError(RS_ERROR_FATAL_DRIVER, 41709a0978ae141198018ca9769f8d96292a8928e6Jason Sams "Unexpected RsdCpuScriptIntrinsic::invokeRoot"); 42709a0978ae141198018ca9769f8d96292a8928e6Jason Sams return 0; 43709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 44709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 45709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsic::invokeInit() { 46709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mCtx->getContext()->setError(RS_ERROR_FATAL_DRIVER, 47709a0978ae141198018ca9769f8d96292a8928e6Jason Sams "Unexpected RsdCpuScriptIntrinsic::invokeInit"); 48709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 49709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 50709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsic::setGlobalVar(uint32_t slot, const void *data, size_t dataLength) { 51709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mCtx->getContext()->setError(RS_ERROR_FATAL_DRIVER, 52709a0978ae141198018ca9769f8d96292a8928e6Jason Sams "Unexpected RsdCpuScriptIntrinsic::setGlobalVar"); 53709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 54709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 55709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsic::setGlobalVarWithElemDims(uint32_t slot, const void *data, 56709a0978ae141198018ca9769f8d96292a8928e6Jason Sams size_t dataLength, const Element *e, 57ac8d146a41f18afad5314ac8af440d6aedbe20bfStephen Hines const uint32_t *dims, size_t dimLength) { 58709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mCtx->getContext()->setError(RS_ERROR_FATAL_DRIVER, 59709a0978ae141198018ca9769f8d96292a8928e6Jason Sams "Unexpected RsdCpuScriptIntrinsic::setGlobalVarWithElemDims"); 60709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 61709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 62709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsic::setGlobalBind(uint32_t slot, Allocation *data) { 63709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mCtx->getContext()->setError(RS_ERROR_FATAL_DRIVER, 64709a0978ae141198018ca9769f8d96292a8928e6Jason Sams "Unexpected RsdCpuScriptIntrinsic::setGlobalBind"); 65709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 66709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 67709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsic::setGlobalObj(uint32_t slot, ObjectBase *data) { 68709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mCtx->getContext()->setError(RS_ERROR_FATAL_DRIVER, 69709a0978ae141198018ca9769f8d96292a8928e6Jason Sams "Unexpected RsdCpuScriptIntrinsic::setGlobalObj"); 70709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 71709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 72709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsic::invokeFreeChildren() { 73709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 74709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 75709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 76f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailesvoid RsdCpuScriptIntrinsic::preLaunch(uint32_t slot, const Allocation ** ains, 77f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes uint32_t inLen, Allocation * aout, 78f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes const void * usr, uint32_t usrLen, 79f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes const RsScriptCall *sc) { 802282e2816ac5f5de53f9bd4f3ecbdfd6d756d120Jason Sams} 812282e2816ac5f5de53f9bd4f3ecbdfd6d756d120Jason Sams 82f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailesvoid RsdCpuScriptIntrinsic::postLaunch(uint32_t slot, const Allocation ** ains, 83f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes uint32_t inLen, Allocation * aout, 84f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes const void * usr, uint32_t usrLen, 85f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes const RsScriptCall *sc) { 862282e2816ac5f5de53f9bd4f3ecbdfd6d756d120Jason Sams} 872282e2816ac5f5de53f9bd4f3ecbdfd6d756d120Jason Sams 88709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsic::invokeForEach(uint32_t slot, 89f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes const Allocation ** ains, 90f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes uint32_t inLen, 91709a0978ae141198018ca9769f8d96292a8928e6Jason Sams Allocation * aout, 92709a0978ae141198018ca9769f8d96292a8928e6Jason Sams const void * usr, 93709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t usrLen, 94709a0978ae141198018ca9769f8d96292a8928e6Jason Sams const RsScriptCall *sc) { 95709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 9614ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala MTLaunchStructForEach mtls; 972282e2816ac5f5de53f9bd4f3ecbdfd6d756d120Jason Sams 98f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes preLaunch(slot, ains, inLen, aout, usr, usrLen, sc); 994b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes 100bf2111d3b3de310932099514f06924e48fa1d7b2Jason Sams if (forEachMtlsSetup(ains, inLen, aout, usr, usrLen, sc, &mtls)) { 101bf2111d3b3de310932099514f06924e48fa1d7b2Jason Sams mtls.script = this; 102bf2111d3b3de310932099514f06924e48fa1d7b2Jason Sams mtls.fep.slot = slot; 1034b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes 10414ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala mtls.kernel = mRootPtr; 105bf2111d3b3de310932099514f06924e48fa1d7b2Jason Sams mtls.fep.usr = this; 1064b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes 107bf2111d3b3de310932099514f06924e48fa1d7b2Jason Sams RsdCpuScriptImpl * oldTLS = mCtx->setTLS(this); 10814ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala mCtx->launchForEach(ains, inLen, aout, sc, &mtls); 109bf2111d3b3de310932099514f06924e48fa1d7b2Jason Sams mCtx->setTLS(oldTLS); 110bf2111d3b3de310932099514f06924e48fa1d7b2Jason Sams } 1114b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes 112f37121300217d3b39ab66dd9c8881bcbcad932dfChris Wailes postLaunch(slot, ains, inLen, aout, usr, usrLen, sc); 1134b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes} 1144b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes 11514ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Walavoid RsdCpuScriptIntrinsic::forEachKernelSetup(uint32_t slot, MTLaunchStructForEach *mtls) { 116709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 117709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mtls->script = this; 118709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mtls->fep.slot = slot; 11914ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala mtls->kernel = mRootPtr; 120709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mtls->fep.usr = this; 121709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 122