summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Ni <yangni@google.com>2015-05-26 16:47:30 -0700
committerYang Ni <yangni@google.com>2015-05-29 11:13:30 -0700
commit09c2224337ccf2ea9939ee7f1f5dc8ededfdd4b4 (patch)
tree3a935b6e38d719414cf8cbe32d0a0e10a50d0665
parent01c19c30a73d4a3ad42ad5630ad790db01a853cc (diff)
downloadrs-09c2224337ccf2ea9939ee7f1f5dc8ededfdd4b4.tar.gz
Avoid casting for CpuScript object
b/20894664 Vendor driver may have different layout for the Script object. Avoid casting mHal.drv but use lookupScript virtual calls instead. Change-Id: Ie492dd98a435b35843ca222a8430c51ccfc8aea9 (cherry picked from commit 999e6b9ec115be28e1e175f6e1aabfe18969aca8)
-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) {