Avoid casting for CpuScript object

b/20894664

Vendor driver may have different layout for the Script object.
Avoid casting mHal.drv but use the vendor provided lookupScript callback
instead.

Change-Id: Ie492dd98a435b35843ca222a8430c51ccfc8aea9
diff --git a/cpu_ref/rsCpuScriptGroup2.cpp b/cpu_ref/rsCpuScriptGroup2.cpp
index d26c0c4..b145311 100644
--- a/cpu_ref/rsCpuScriptGroup2.cpp
+++ b/cpu_ref/rsCpuScriptGroup2.cpp
@@ -264,7 +264,8 @@
     args->push_back(outputFileName);
 }
 
-void generateSourceSlot(const Closure& closure,
+void generateSourceSlot(RsdCpuReferenceImpl* ctxt,
+                        const Closure& closure,
                         const std::vector<const char*>& inputs,
                         std::stringstream& ss) {
     const IDBase* funcID = (const IDBase*)closure.mFunctionID.get();
@@ -273,7 +274,7 @@
     rsAssert (!script->isIntrinsic());
 
     const RsdCpuScriptImpl *cpuScript =
-            (const RsdCpuScriptImpl*)script->mHal.drv;
+            (const RsdCpuScriptImpl *)ctxt->lookupScript(script);
     const string& bitcodeFilename = cpuScript->getBitcodeFilePath();
 
     const int index = find(inputs.begin(), inputs.end(), bitcodeFilename) -
@@ -306,7 +307,8 @@
         }
 
         const RsdCpuScriptImpl *cpuScript =
-                (const RsdCpuScriptImpl*)script->mHal.drv;
+            (const RsdCpuScriptImpl *)mCpuRefImpl->lookupScript(script);
+
         const char* bitcodeFilename = cpuScript->getBitcodeFilePath();
         inputSet.insert(bitcodeFilename);
     }
@@ -325,11 +327,11 @@
 
         if (!batch->mClosures.front()->mClosure->mIsKernel) {
             rsAssert(batch->size() == 1);
-            generateSourceSlot(*batch->mClosures.front()->mClosure, inputs, ss);
+            generateSourceSlot(mCpuRefImpl, *batch->mClosures.front()->mClosure, inputs, ss);
             invokeBatches.push_back(ss.str());
         } else {
             for (const auto& cpuClosure : batch->mClosures) {
-                generateSourceSlot(*cpuClosure->mClosure, inputs, ss);
+                generateSourceSlot(mCpuRefImpl, *cpuClosure->mClosure, inputs, ss);
             }
             kernelBatches.push_back(ss.str());
         }
@@ -453,8 +455,9 @@
             }
             rsAssert(p.first != nullptr);
             Script* script = p.first->mScript;
+            RsdCpuReferenceImpl* ctxt = mGroup->getCpuRefImpl();
             const RsdCpuScriptImpl *cpuScript =
-                    (const RsdCpuScriptImpl*)script->mHal.drv;
+                    (const RsdCpuScriptImpl *)ctxt->lookupScript(script);
             int slot = p.first->mSlot;
             ScriptExecutable* exec = mGroup->getExecutable();
             if (exec != nullptr) {