diff options
| author | Yang Ni <yangni@google.com> | 2015-05-26 16:47:30 -0700 |
|---|---|---|
| committer | Yang Ni <yangni@google.com> | 2015-05-27 16:45:21 +0000 |
| commit | cbff7bcc4aacdc39d56628fa5c7c50518d52748c (patch) | |
| tree | 9e0e874fed14979160cd52ab907651f9ace71b4e /cpu_ref/rsCpuScriptGroup2.cpp | |
| parent | cee9e9898ed549d00c1fd1c911feff66dbb4225e (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.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) { |
