123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #ifndef CPU_REF_CPUSCRIPTGROUP2IMPL_H_
- #define CPU_REF_CPUSCRIPTGROUP2IMPL_H_
- #include "rsd_cpu.h"
- #include "rsList.h"
- struct RsExpandKernelDriverInfo;
- namespace android {
- namespace renderscript {
- class Closure;
- class RsdCpuScriptImpl;
- class RsdCpuReferenceImpl;
- class ScriptExecutable;
- class ScriptGroup2;
- typedef void (*ExpandFuncTy)(const RsExpandKernelDriverInfo*, uint32_t, uint32_t,
- uint32_t);
- typedef void (*InvokeFuncTy)(const void*, uint32_t);
- class CPUClosure {
- public:
- CPUClosure(const Closure* closure, RsdCpuScriptImpl* si, ExpandFuncTy func) :
- mClosure(closure), mSi(si), mFunc(func) {}
- CPUClosure(const Closure* closure, RsdCpuScriptImpl* si) :
- mClosure(closure), mSi(si), mFunc(nullptr) {}
- // It's important to do forwarding here than inheritance for unbound value
- // binding to work.
- const Closure* mClosure;
- RsdCpuScriptImpl* mSi;
- const ExpandFuncTy mFunc;
- };
- class CpuScriptGroup2Impl;
- class Batch {
- public:
- Batch(CpuScriptGroup2Impl* group, const char* name);
- ~Batch();
- // Returns true if closure depends on any closure in this batch for a global
- // variable
- bool conflict(CPUClosure* closure) const;
- void resolveFuncPtr(void* sharedObj);
- void setGlobalsForBatch();
- void run();
- size_t size() const { return mClosures.size(); }
- CpuScriptGroup2Impl* mGroup;
- List<CPUClosure*> mClosures;
- char* mName;
- void* mFunc;
- };
- class CpuScriptGroup2Impl : public RsdCpuReference::CpuScriptGroup2 {
- public:
- CpuScriptGroup2Impl(RsdCpuReferenceImpl *cpuRefImpl, const ScriptGroupBase* group);
- ~CpuScriptGroup2Impl() override;
- bool init();
- void execute() override;
- RsdCpuReferenceImpl* getCpuRefImpl() const { return mCpuRefImpl; }
- ScriptExecutable* getExecutable() const { return mExecutable; }
- void compile(const char* cacheDir);
- private:
- RsdCpuReferenceImpl* mCpuRefImpl;
- const ScriptGroup2* mGroup;
- List<Batch*> mBatches;
- ScriptExecutable* mExecutable;
- void* mScriptObj;
- };
- } // namespace renderscript
- } // namespace android
- #endif // CPU_REF_CPUSCRIPTGROUP2IMPL_H_
|