Separate CPU driver impl from reference driver.
Change-Id: Ifb484edda665959b81d7b1f890d108bfa20a535d
diff --git a/cpu_ref/rsCpuScript.h b/cpu_ref/rsCpuScript.h
new file mode 100644
index 0000000..2197a20
--- /dev/null
+++ b/cpu_ref/rsCpuScript.h
@@ -0,0 +1,112 @@
+/*
+ * 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>
+
+#include "rsCpuCore.h"
+
+namespace bcc {
+ class BCCContext;
+ class RSCompilerDriver;
+ class RSExecutable;
+}
+
+namespace android {
+namespace renderscript {
+
+
+
+class RsdCpuScriptImpl : public RsdCpuReferenceImpl::CpuScript {
+public:
+ typedef void (*outer_foreach_t)(
+ const RsForEachStubParamStruct *,
+ uint32_t x1, uint32_t x2,
+ uint32_t instep, uint32_t outstep);
+
+ bool init(char const *resName, char const *cacheDir,
+ uint8_t const *bitcode, size_t bitcodeSize, uint32_t flags);
+ virtual void populateScript(Script *);
+
+ virtual void invokeFunction(uint32_t slot, const void *params, size_t paramLength);
+ virtual int invokeRoot();
+ virtual void invokeForEach(uint32_t slot,
+ const Allocation * ain,
+ Allocation * aout,
+ const void * usr,
+ uint32_t usrLen,
+ const RsScriptCall *sc);
+ virtual void invokeInit();
+ virtual void invokeFreeChildren();
+
+ virtual void setGlobalVar(uint32_t slot, const void *data, size_t dataLength);
+ virtual void setGlobalVarWithElemDims(uint32_t slot, const void *data, size_t dataLength,
+ const Element *e, const size_t *dims, size_t dimLength);
+ virtual void setGlobalBind(uint32_t slot, Allocation *data);
+ virtual void setGlobalObj(uint32_t slot, ObjectBase *data);
+
+
+ virtual ~RsdCpuScriptImpl();
+ RsdCpuScriptImpl(RsdCpuReferenceImpl *ctx, const Script *s);
+
+ const Script * getScript() {return mScript;}
+
+ void forEachMtlsSetup(const Allocation * ain, Allocation * aout,
+ const void * usr, uint32_t usrLen,
+ const RsScriptCall *sc, MTLaunchStruct *mtls);
+ virtual void forEachKernelSetup(uint32_t slot, MTLaunchStruct *mtls);
+
+
+ const RsdCpuReference::CpuSymbol * lookupSymbolMath(const char *sym);
+ static void * lookupRuntimeStub(void* pContext, char const* name);
+
+ virtual Allocation * getAllocationForPointer(const void *ptr) const;
+
+
+protected:
+ RsdCpuReferenceImpl *mCtx;
+ const Script *mScript;
+
+ int (*mRoot)();
+ int (*mRootExpand)();
+ void (*mInit)();
+ void (*mFreeChildren)();
+
+ bcc::BCCContext *mCompilerContext;
+ bcc::RSCompilerDriver *mCompilerDriver;
+ bcc::RSExecutable *mExecutable;
+
+ Allocation **mBoundAllocs;
+ void * mIntrinsicData;
+ bool mIsThreadable;
+
+};
+
+
+Allocation * rsdScriptGetAllocationForPointer(
+ const Context *dc,
+ const Script *script,
+ const void *);
+
+
+
+}
+}
+
+#endif