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) {