summaryrefslogtreecommitdiff
path: root/cpu_ref/rsCpuScriptGroup2.cpp
diff options
context:
space:
mode:
authorYang Ni <yangni@google.com>2015-05-26 16:47:30 -0700
committerYang Ni <yangni@google.com>2015-05-27 16:45:21 +0000
commitcbff7bcc4aacdc39d56628fa5c7c50518d52748c (patch)
tree9e0e874fed14979160cd52ab907651f9ace71b4e /cpu_ref/rsCpuScriptGroup2.cpp
parentcee9e9898ed549d00c1fd1c911feff66dbb4225e (diff)
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
Diffstat (limited to 'cpu_ref/rsCpuScriptGroup2.cpp')
-rw-r--r--cpu_ref/rsCpuScriptGroup2.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/cpu_ref/rsCpuScriptGroup2.cpp b/cpu_ref/rsCpuScriptGroup2.cpp
index d26c0c44..b1453110 100644
--- a/cpu_ref/rsCpuScriptGroup2.cpp
+++ b/cpu_ref/rsCpuScriptGroup2.cpp
@@ -264,7 +264,8 @@ void setupCompileArguments(
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 @@ void generateSourceSlot(const Closure& closure,
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 @@ void CpuScriptGroup2Impl::compile(const char* cacheDir) {
}
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 @@ void CpuScriptGroup2Impl::compile(const char* cacheDir) {
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 @@ void Batch::setGlobalsForBatch() {
}
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) {