10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2011-2012 The Android Open Source Project 30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License. 60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at 70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software 110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and 140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License. 150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */ 160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef RSD_BCC_H 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define RSD_BCC_H 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include <rs_hal.h> 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include <rsRuntime.h> 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesbool rsdScriptInit(const android::renderscript::Context *, android::renderscript::ScriptC *, 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines char const *resName, char const *cacheDir, 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint8_t const *bitcode, size_t bitcodeSize, uint32_t flags); 27ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsbool rsdInitIntrinsic(const android::renderscript::Context *rsc, 28ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::Script *s, 29ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams RsScriptIntrinsicID iid, 30ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::Element *e); 31ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdScriptInvokeFunction(const android::renderscript::Context *dc, 330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines android::renderscript::Script *script, 340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *params, 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t paramLength); 370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdScriptInvokeForEach(const android::renderscript::Context *rsc, 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines android::renderscript::Script *s, 400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const android::renderscript::Allocation * ain, 420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines android::renderscript::Allocation * aout, 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void * usr, 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t usrLen, 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const RsScriptCall *sc); 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesint rsdScriptInvokeRoot(const android::renderscript::Context *dc, 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines android::renderscript::Script *script); 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdScriptInvokeInit(const android::renderscript::Context *dc, 500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines android::renderscript::Script *script); 510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdScriptInvokeFreeChildren(const android::renderscript::Context *dc, 520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines android::renderscript::Script *script); 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdScriptSetGlobalVar(const android::renderscript::Context *, 550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const android::renderscript::Script *, 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, void *data, size_t dataLen); 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdScriptSetGlobalVarWithElemDims(const android::renderscript::Context *, 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const android::renderscript::Script *, 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, void *data, 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t dataLength, 610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const android::renderscript::Element *, 620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const size_t *dims, 630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t dimLength); 640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdScriptSetGlobalBind(const android::renderscript::Context *, 650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const android::renderscript::Script *, 660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, android::renderscript::Allocation *data); 670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdScriptSetGlobalObj(const android::renderscript::Context *, 680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const android::renderscript::Script *, 690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, android::renderscript::ObjectBase *data); 700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdScriptSetGlobal(const android::renderscript::Context *dc, 720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const android::renderscript::Script *script, 730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void *data, 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t dataLength); 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdScriptGetGlobal(const android::renderscript::Context *dc, 770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const android::renderscript::Script *script, 780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines uint32_t slot, 790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines void *data, 800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines size_t dataLength); 810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsdScriptDestroy(const android::renderscript::Context *dc, 820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines android::renderscript::Script *script); 830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesandroid::renderscript::Allocation * rsdScriptGetAllocationForPointer( 850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const android::renderscript::Context *dc, 860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const android::renderscript::Script *script, 870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *); 880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 89ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 90ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef void (*outer_foreach_t)( 91ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const android::renderscript::RsForEachStubParamStruct *, 92ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t x1, uint32_t x2, 93ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t instep, uint32_t outstep); 94ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 95ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef struct RsdIntriniscFuncs_rec { 96ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 97ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void (*bind)(const android::renderscript::Context *dc, 98ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const android::renderscript::Script *script, 99ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void * intrinsicData, 100ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t slot, android::renderscript::Allocation *data); 101ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void (*setVar)(const android::renderscript::Context *dc, 102ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const android::renderscript::Script *script, 103ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void * intrinsicData, 104ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t slot, void *data, size_t dataLength); 105ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void (*root)(const android::renderscript::RsForEachStubParamStruct *, 106ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t x1, uint32_t x2, uint32_t instep, uint32_t outstep); 107ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 108ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void (*destroy)(const android::renderscript::Context *dc, 109ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const android::renderscript::Script *script, 110ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void * intrinsicData); 111ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} RsdIntriniscFuncs_t; 112ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 113ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstruct DrvScript { 114ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams RsScriptIntrinsicID mIntrinsicID; 115ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void *mScriptSO; 116ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams RootFunc_t mRoot; 117ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams RootFunc_t mRootExpand; 118ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams InvokeFunc_t mInit; 119ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams InvokeFunc_t mFreeChildren; 120ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 121ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams InvokeFunc_t *mInvokeFunctions; 122ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ForEachFunc_t *mForEachFunctions; 123ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void **mFieldAddress; 124ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams bool *mFieldIsObject; 125ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t *mForEachSignatures; 126ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 127ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::Allocation **mBoundAllocs; 128ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams RsdIntriniscFuncs_t mIntrinsicFuncs; 129ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams void * mIntrinsicData; 130ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams}; 131ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 132ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef struct { 133ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::RsForEachStubParamStruct fep; 134ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t cpuIdx; 135ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 136ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} MTThreadStuct; 137ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 138ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef struct { 139ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::RsForEachStubParamStruct fep; 140ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 141ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::Context *rsc; 142ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::Script *script; 143ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ForEachFunc_t kernel; 144ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t sig; 145ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const android::renderscript::Allocation * ain; 146ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::Allocation * aout; 147ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 148ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t mSliceSize; 149ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams volatile int mSliceNum; 150ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 151ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t xStart; 152ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t xEnd; 153ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t yStart; 154ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t yEnd; 155ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t zStart; 156ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t zEnd; 157ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t arrayStart; 158ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t arrayEnd; 159ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} MTLaunchStruct; 160ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 161ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsvoid rsdScriptLaunchThreads(const android::renderscript::Context *rsc, 162ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::Script *s, 163ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t slot, 164ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const android::renderscript::Allocation * ain, 165ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::Allocation * aout, 166ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const void * usr, 167ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t usrLen, 168ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const RsScriptCall *sc, 169ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams MTLaunchStruct *mtls); 170ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 171ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsvoid rsdScriptInvokeForEachMtlsSetup(const android::renderscript::Context *rsc, 172ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const android::renderscript::Allocation * ain, 173ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams android::renderscript::Allocation * aout, 174ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const void * usr, 175ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uint32_t usrLen, 176ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams const RsScriptCall *sc, 177ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams MTLaunchStruct *mtls); 178ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 179ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 180ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 181ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 1820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif 183