rsCpuScriptGroup2.h revision eb9aa675754c49f613c6ad71d41472b30f38b007
11ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#ifndef CPU_REF_CPUSCRIPTGROUP2IMPL_H_ 21ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#define CPU_REF_CPUSCRIPTGROUP2IMPL_H_ 31ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 41ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#include <list> 51ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 61ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#include "rsd_cpu.h" 71ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 81ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niusing std::list; 91ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 101ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ninamespace android { 111ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ninamespace renderscript { 121ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 131ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass Closure; 141ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass RsdCpuScriptImpl; 151ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass RsdCpuReferenceImpl; 16da0f069871343119251d6b0586be356dc2146a62Yang Niclass ScriptExecutable; 171ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass ScriptGroup2; 181ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 191ffd86b448d78366190c540f98f8b6d641cdb6cfYang Nistruct RsExpandKernelParams; 201ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 211ffd86b448d78366190c540f98f8b6d641cdb6cfYang Nitypedef void (*ExpandFuncTy)(const RsExpandKernelParams*, uint32_t, uint32_t, 221ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni uint32_t); 23eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nitypedef void (*InvokeFuncTy)(const void*, uint32_t); 241ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 251ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass CPUClosure { 26eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 27eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni CPUClosure(const Closure* closure, RsdCpuScriptImpl* si, ExpandFuncTy func, 28eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const void* usrPtr, const size_t usrSize) : 29eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni mClosure(closure), mSi(si), mFunc(func), 30eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni mUsrPtr(usrPtr), mUsrSize(usrSize) {} 31eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 32eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni CPUClosure(const Closure* closure, RsdCpuScriptImpl* si) : 33eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni mClosure(closure), mSi(si), mFunc(nullptr), 34eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni mUsrPtr(nullptr), mUsrSize(0) {} 35eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 36eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // It's important to do forwarding here than inheritance for unbound value 37eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // binding to work. 38eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const Closure* mClosure; 39eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni RsdCpuScriptImpl* mSi; 40eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const ExpandFuncTy mFunc; 41eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const void* mUsrPtr; 42eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const size_t mUsrSize; 431ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni}; 441ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 45da0f069871343119251d6b0586be356dc2146a62Yang Niclass CpuScriptGroup2Impl; 46da0f069871343119251d6b0586be356dc2146a62Yang Ni 47da0f069871343119251d6b0586be356dc2146a62Yang Niclass Batch { 48eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 49eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni Batch(CpuScriptGroup2Impl* group) : mGroup(group), mExecutable(nullptr) {} 50da0f069871343119251d6b0586be356dc2146a62Yang Ni 51eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ~Batch(); 52da0f069871343119251d6b0586be356dc2146a62Yang Ni 53eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // Returns true if closure depends on any closure in this batch for a global 54eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // variable 55eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni bool conflict(CPUClosure* closure) const; 56da0f069871343119251d6b0586be356dc2146a62Yang Ni 57eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni void tryToCreateFusedKernel(const char* cacheDir); 58eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni void setGlobalsForBatch(); 59eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni void run(); 60da0f069871343119251d6b0586be356dc2146a62Yang Ni 61eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni CpuScriptGroup2Impl* mGroup; 62eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ScriptExecutable* mExecutable; 63eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni void* mScriptObj; 64eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni list<CPUClosure*> mClosures; 65da0f069871343119251d6b0586be356dc2146a62Yang Ni}; 66da0f069871343119251d6b0586be356dc2146a62Yang Ni 671ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass CpuScriptGroup2Impl : public RsdCpuReference::CpuScriptGroup2 { 68eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 69eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni CpuScriptGroup2Impl(RsdCpuReferenceImpl *cpuRefImpl, const ScriptGroupBase* group); 70eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual ~CpuScriptGroup2Impl(); 711ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 72eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni bool init(); 73eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual void execute(); 741ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 75eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni RsdCpuReferenceImpl* getCpuRefImpl() const { return mCpuRefImpl; } 761ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 77eb9aa675754c49f613c6ad71d41472b30f38b007Yang Niprivate: 78eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni RsdCpuReferenceImpl* mCpuRefImpl; 79eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const ScriptGroup2* mGroup; 80eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni list<Batch*> mBatches; 811ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni}; 821ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 831ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni} // namespace renderscript 841ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni} // namespace android 851ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 861ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#endif // CPU_REF_CPUSCRIPTGROUP2IMPL_H_ 87