rsCpuScriptGroup2.h revision 1ffd86b448d78366190c540f98f8b6d641cdb6cf
1#ifndef CPU_REF_CPUSCRIPTGROUP2IMPL_H_ 2#define CPU_REF_CPUSCRIPTGROUP2IMPL_H_ 3 4#include <list> 5 6#include "rsd_cpu.h" 7 8using std::list; 9 10namespace android { 11namespace renderscript { 12 13class Closure; 14class RsdCpuScriptImpl; 15class RsdCpuReferenceImpl; 16class ScriptGroup2; 17 18struct RsExpandKernelParams; 19 20typedef void (*ExpandFuncTy)(const RsExpandKernelParams*, uint32_t, uint32_t, 21 uint32_t); 22 23class CPUClosure { 24 public: 25 CPUClosure(const Closure* closure, RsdCpuScriptImpl* si, ExpandFuncTy func, 26 const void* usrPtr, const size_t usrSize) : 27 mClosure(closure), mSi(si), mFunc(func), mUsrPtr(usrPtr), 28 mUsrSize(usrSize) {} 29 30 // It's important to do forwarding here than inheritance for unbound value 31 // binding to work. 32 const Closure* mClosure; 33 RsdCpuScriptImpl* mSi; 34 const ExpandFuncTy mFunc; 35 const void* mUsrPtr; 36 const size_t mUsrSize; 37}; 38 39class CpuScriptGroup2Impl : public RsdCpuReference::CpuScriptGroup2 { 40 public: 41 CpuScriptGroup2Impl(RsdCpuReferenceImpl *cpuRefImpl, const ScriptGroupBase* group); 42 virtual ~CpuScriptGroup2Impl(); 43 44 bool init(); 45 virtual void execute(); 46 47 private: 48 void setGlobalsForBatch(const list<CPUClosure*>& batch); 49 void runBatch(const list<CPUClosure*>& batch); 50 51 RsdCpuReferenceImpl* mCpuRefImpl; 52 const ScriptGroup2* mGroup; 53 54 list<list<CPUClosure*>*> mBatches; 55}; 56 57} // namespace renderscript 58} // namespace android 59 60#endif // CPU_REF_CPUSCRIPTGROUP2IMPL_H_ 61