/*
* Copyright (C) 2011-2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef RSD_BCC_H
#define RSD_BCC_H
#include <rs_hal.h>
#include <rsRuntime.h>
namespace bcc {
class BCCContext;
class RSCompilerDriver;
class RSExecutable;
}
bool rsdScriptInit(const android::renderscript::Context *, android::renderscript::ScriptC *,
char const *resName, char const *cacheDir,
uint8_t const *bitcode, size_t bitcodeSize, uint32_t flags);
bool rsdInitIntrinsic(const android::renderscript::Context *rsc,
android::renderscript::Script *s,
RsScriptIntrinsicID iid,
android::renderscript::Element *e);
void rsdScriptInvokeFunction(const android::renderscript::Context *dc,
android::renderscript::Script *script,
uint32_t slot,
const void *params,
size_t paramLength);
void rsdScriptInvokeForEach(const android::renderscript::Context *rsc,
android::renderscript::Script *s,
uint32_t slot,
const android::renderscript::Allocation * ain,
android::renderscript::Allocation * aout,
const void * usr,
uint32_t usrLen,
const RsScriptCall *sc);
int rsdScriptInvokeRoot(const android::renderscript::Context *dc,
android::renderscript::Script *script);
void rsdScriptInvokeInit(const android::renderscript::Context *dc,
android::renderscript::Script *script);
void rsdScriptInvokeFreeChildren(const android::renderscript::Context *dc,
android::renderscript::Script *script);
void rsdScriptSetGlobalVar(const android::renderscript::Context *,
const android::renderscript::Script *,
uint32_t slot, void *data, size_t dataLen);
void rsdScriptSetGlobalVarWithElemDims(const android::renderscript::Context *,
const android::renderscript::Script *,
uint32_t slot, void *data,
size_t dataLength,
const android::renderscript::Element *,
const size_t *dims,
size_t dimLength);
void rsdScriptSetGlobalBind(const android::renderscript::Context *,
const android::renderscript::Script *,
uint32_t slot, android::renderscript::Allocation *data);
void rsdScriptSetGlobalObj(const android::renderscript::Context *,
const android::renderscript::Script *,
uint32_t slot, android::renderscript::ObjectBase *data);
void rsdScriptSetGlobal(const android::renderscript::Context *dc,
const android::renderscript::Script *script,
uint32_t slot,
void *data,
size_t dataLength);
void rsdScriptGetGlobal(const android::renderscript::Context *dc,
const android::renderscript::Script *script,
uint32_t slot,
void *data,
size_t dataLength);
void rsdScriptDestroy(const android::renderscript::Context *dc,
android::renderscript::Script *script);
android::renderscript::Allocation * rsdScriptGetAllocationForPointer(
const android::renderscript::Context *dc,
const android::renderscript::Script *script,
const void *);
typedef void (*outer_foreach_t)(
const android::renderscript::RsForEachStubParamStruct *,
uint32_t x1, uint32_t x2,
uint32_t instep, uint32_t outstep);
typedef struct RsdIntriniscFuncs_rec {
void (*setVarObj)(const android::renderscript::Context *dc,
const android::renderscript::Script *script,
void * intrinsicData,
uint32_t slot, android::renderscript::Allocation *data);
void (*setVar)(const android::renderscript::Context *dc,
const android::renderscript::Script *script,
void * intrinsicData,
uint32_t slot, void *data, size_t dataLength);
void (*root)(const android::renderscript::RsForEachStubParamStruct *,
uint32_t x1, uint32_t x2, uint32_t instep, uint32_t outstep);
void (*destroy)(const android::renderscript::Context *dc,
const android::renderscript::Script *script,
void * intrinsicData);
} RsdIntriniscFuncs_t;
struct DrvScript {
RsScriptIntrinsicID mIntrinsicID;
int (*mRoot)();
int (*mRootExpand)();
void (*mInit)();
void (*mFreeChildren)();
bcc::BCCContext *mCompilerContext;
bcc::RSCompilerDriver *mCompilerDriver;
bcc::RSExecutable *mExecutable;
android::renderscript::Allocation **mBoundAllocs;
RsdIntriniscFuncs_t mIntrinsicFuncs;
void * mIntrinsicData;
};
typedef struct {
android::renderscript::RsForEachStubParamStruct fep;
uint32_t cpuIdx;
} MTThreadStuct;
typedef struct {
android::renderscript::RsForEachStubParamStruct fep;
android::renderscript::Context *rsc;
android::renderscript::Script *script;
ForEachFunc_t kernel;
uint32_t sig;
const android::renderscript::Allocation * ain;
android::renderscript::Allocation * aout;
uint32_t mSliceSize;
volatile int mSliceNum;
uint32_t xStart;
uint32_t xEnd;
uint32_t yStart;
uint32_t yEnd;
uint32_t zStart;
uint32_t zEnd;
uint32_t arrayStart;
uint32_t arrayEnd;
} MTLaunchStruct;
void rsdScriptLaunchThreads(const android::renderscript::Context *rsc,
android::renderscript::Script *s,
uint32_t slot,
const android::renderscript::Allocation * ain,
android::renderscript::Allocation * aout,
const void * usr,
uint32_t usrLen,
const RsScriptCall *sc,
MTLaunchStruct *mtls);
void rsdScriptInvokeForEachMtlsSetup(const android::renderscript::Context *rsc,
const android::renderscript::Allocation * ain,
android::renderscript::Allocation * aout,
const void * usr,
uint32_t usrLen,
const RsScriptCall *sc,
MTLaunchStruct *mtls);
#endif