rsdBcc.h revision dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48
1bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams/* 22980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines * Copyright (C) 2011-2012 The Android Open Source Project 3bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * 4bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * you may not use this file except in compliance with the License. 6bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * You may obtain a copy of the License at 7bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * 8bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * 10bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * Unless required by applicable law or agreed to in writing, software 11bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * See the License for the specific language governing permissions and 14bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams * limitations under the License. 15bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams */ 16bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 17bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#ifndef RSD_BCC_H 18bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#define RSD_BCC_H 19bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 20bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#include <rs_hal.h> 2187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include <rsRuntime.h> 22bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 23dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsnamespace bcc { 24dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams class BCCContext; 25dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams class RSCompilerDriver; 26dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams class RSExecutable; 27dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams} 28bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 29bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsbool rsdScriptInit(const android::renderscript::Context *, android::renderscript::ScriptC *, 30bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams char const *resName, char const *cacheDir, 3187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams uint8_t const *bitcode, size_t bitcodeSize, uint32_t flags); 328eaba4fee0c7b5325742c87187622fdff51d5effJason Samsbool rsdInitIntrinsic(const android::renderscript::Context *rsc, 338eaba4fee0c7b5325742c87187622fdff51d5effJason Sams android::renderscript::Script *s, 3441d6c769f5fa21da3cbc116af95d88949a4a5c76Stephen Hines RsScriptIntrinsicID iid, 358eaba4fee0c7b5325742c87187622fdff51d5effJason Sams android::renderscript::Element *e); 368eaba4fee0c7b5325742c87187622fdff51d5effJason Sams 37bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptInvokeFunction(const android::renderscript::Context *dc, 38cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams android::renderscript::Script *script, 39bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 40bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams const void *params, 41bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t paramLength); 42cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 43cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Samsvoid rsdScriptInvokeForEach(const android::renderscript::Context *rsc, 44cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams android::renderscript::Script *s, 4535e429ebf817130d8590d11d441a77aa697bd7d4Jason Sams uint32_t slot, 46cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const android::renderscript::Allocation * ain, 47cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams android::renderscript::Allocation * aout, 48cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const void * usr, 49cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams uint32_t usrLen, 50cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams const RsScriptCall *sc); 51cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams 52bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsint rsdScriptInvokeRoot(const android::renderscript::Context *dc, 53cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams android::renderscript::Script *script); 54bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptInvokeInit(const android::renderscript::Context *dc, 55cdfdb8f2cdf4668c476cac842212892b2505ff3fJason Sams android::renderscript::Script *script); 564ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hinesvoid rsdScriptInvokeFreeChildren(const android::renderscript::Context *dc, 574ee16ffbd9d1d72e1757c9b26715597fdc044117Stephen Hines android::renderscript::Script *script); 58bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 59bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptSetGlobalVar(const android::renderscript::Context *, 60bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams const android::renderscript::Script *, 61bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, void *data, size_t dataLen); 622980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hinesvoid rsdScriptSetGlobalVarWithElemDims(const android::renderscript::Context *, 632980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines const android::renderscript::Script *, 642980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines uint32_t slot, void *data, 652980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines size_t dataLength, 662980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines const android::renderscript::Element *, 672980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines const size_t *dims, 682980f07d3dbbca727e8efe24ace7e7928a935648Stephen Hines size_t dimLength); 69bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptSetGlobalBind(const android::renderscript::Context *, 70bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams const android::renderscript::Script *, 71807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams uint32_t slot, android::renderscript::Allocation *data); 72bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptSetGlobalObj(const android::renderscript::Context *, 73bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams const android::renderscript::Script *, 74bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, android::renderscript::ObjectBase *data); 75bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 76bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptSetGlobal(const android::renderscript::Context *dc, 77bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams const android::renderscript::Script *script, 78bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 79bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void *data, 80bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t dataLength); 81bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptGetGlobal(const android::renderscript::Context *dc, 82bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams const android::renderscript::Script *script, 83bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams uint32_t slot, 84bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams void *data, 85bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams size_t dataLength); 86bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Samsvoid rsdScriptDestroy(const android::renderscript::Context *dc, 87bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams android::renderscript::Script *script); 88bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 89807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsandroid::renderscript::Allocation * rsdScriptGetAllocationForPointer( 90807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams const android::renderscript::Context *dc, 91807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams const android::renderscript::Script *script, 92807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams const void *); 93bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams 94dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 95dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samstypedef void (*outer_foreach_t)( 96dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const android::renderscript::RsForEachStubParamStruct *, 97dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t x1, uint32_t x2, 98dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t instep, uint32_t outstep); 99dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 100dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samstypedef struct RsdIntriniscFuncs_rec { 101dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 102dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*bind)(const android::renderscript::Context *dc, 103dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const android::renderscript::Script *script, 104dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void * intrinsicData, 105dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t slot, android::renderscript::Allocation *data); 106dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*setVar)(const android::renderscript::Context *dc, 107dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const android::renderscript::Script *script, 108dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void * intrinsicData, 109dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t slot, void *data, size_t dataLength); 110dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*root)(const android::renderscript::RsForEachStubParamStruct *, 111dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t x1, uint32_t x2, uint32_t instep, uint32_t outstep); 112dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 113dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*destroy)(const android::renderscript::Context *dc, 114dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const android::renderscript::Script *script, 115dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void * intrinsicData); 116dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams} RsdIntriniscFuncs_t; 117dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 118dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsstruct DrvScript { 119dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams RsScriptIntrinsicID mIntrinsicID; 120dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams int (*mRoot)(); 121dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams int (*mRootExpand)(); 122dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*mInit)(); 123dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void (*mFreeChildren)(); 124dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 125dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams bcc::BCCContext *mCompilerContext; 126dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams bcc::RSCompilerDriver *mCompilerDriver; 127dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams bcc::RSExecutable *mExecutable; 128dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 129dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams android::renderscript::Allocation **mBoundAllocs; 130dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams RsdIntriniscFuncs_t mIntrinsicFuncs; 131dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams void * mIntrinsicData; 132dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams}; 133dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 134dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samstypedef struct { 135dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams android::renderscript::RsForEachStubParamStruct fep; 136dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t cpuIdx; 137dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 138dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams} MTThreadStuct; 139dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 140dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samstypedef struct { 141dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams android::renderscript::RsForEachStubParamStruct fep; 142dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 143dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams android::renderscript::Context *rsc; 144dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams android::renderscript::Script *script; 145dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams ForEachFunc_t kernel; 146dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t sig; 147dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const android::renderscript::Allocation * ain; 148dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams android::renderscript::Allocation * aout; 149dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 150dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t mSliceSize; 151dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams volatile int mSliceNum; 152dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 153dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t xStart; 154dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t xEnd; 155dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t yStart; 156dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t yEnd; 157dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t zStart; 158dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t zEnd; 159dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t arrayStart; 160dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t arrayEnd; 161dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams} MTLaunchStruct; 162dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 163dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsvoid rsdScriptLaunchThreads(const android::renderscript::Context *rsc, 164dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams android::renderscript::Script *s, 165dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t slot, 166dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const android::renderscript::Allocation * ain, 167dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams android::renderscript::Allocation * aout, 168dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const void * usr, 169dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t usrLen, 170dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const RsScriptCall *sc, 171dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams MTLaunchStruct *mtls); 172dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 173dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Samsvoid rsdScriptInvokeForEachMtlsSetup(const android::renderscript::Context *rsc, 174dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const android::renderscript::Allocation * ain, 175dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams android::renderscript::Allocation * aout, 176dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const void * usr, 177dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams uint32_t usrLen, 178dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams const RsScriptCall *sc, 179dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams MTLaunchStruct *mtls); 180dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 181dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 182dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 183dbe66d6783c1e53cd1572de0ef6ef6fdf6f76f48Jason Sams 184bad807405b2b9764372af1ad24bcfd4fb1f33d8eJason Sams#endif 185