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