diff options
author | Yang Ni <yangni@google.com> | 2015-05-26 16:47:30 -0700 |
---|---|---|
committer | Yang Ni <yangni@google.com> | 2015-05-29 11:13:30 -0700 |
commit | 09c2224337ccf2ea9939ee7f1f5dc8ededfdd4b4 (patch) | |
tree | 3a935b6e38d719414cf8cbe32d0a0e10a50d0665 | |
parent | 01c19c30a73d4a3ad42ad5630ad790db01a853cc (diff) | |
download | rs-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.cpp | 15 |
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) { |