rsCpuScriptGroup2.h revision ff2bb54ebf593b1d19d3a2e4cfa70a8ea4432c0d
11ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#ifndef CPU_REF_CPUSCRIPTGROUP2IMPL_H_ 21ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#define CPU_REF_CPUSCRIPTGROUP2IMPL_H_ 31ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 41ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#include "rsd_cpu.h" 5ff2bb54ebf593b1d19d3a2e4cfa70a8ea4432c0dYang Ni#include "rsList.h" 61ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 71ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ninamespace android { 81ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ninamespace renderscript { 91ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 101ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass Closure; 111ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass RsdCpuScriptImpl; 121ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass RsdCpuReferenceImpl; 13da0f069871343119251d6b0586be356dc2146a62Yang Niclass ScriptExecutable; 141ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass ScriptGroup2; 151ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 161ffd86b448d78366190c540f98f8b6d641cdb6cfYang Nistruct RsExpandKernelParams; 171ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 181ffd86b448d78366190c540f98f8b6d641cdb6cfYang Nitypedef void (*ExpandFuncTy)(const RsExpandKernelParams*, uint32_t, uint32_t, 191ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni uint32_t); 20eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nitypedef void (*InvokeFuncTy)(const void*, uint32_t); 211ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 221ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass CPUClosure { 23eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 24eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni CPUClosure(const Closure* closure, RsdCpuScriptImpl* si, ExpandFuncTy func, 25eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const void* usrPtr, const size_t usrSize) : 26eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni mClosure(closure), mSi(si), mFunc(func), 27eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni mUsrPtr(usrPtr), mUsrSize(usrSize) {} 28eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 29eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni CPUClosure(const Closure* closure, RsdCpuScriptImpl* si) : 30eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni mClosure(closure), mSi(si), mFunc(nullptr), 31eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni mUsrPtr(nullptr), mUsrSize(0) {} 32eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 33eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // It's important to do forwarding here than inheritance for unbound value 34eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // binding to work. 35eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const Closure* mClosure; 36eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni RsdCpuScriptImpl* mSi; 37eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const ExpandFuncTy mFunc; 38eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const void* mUsrPtr; 39eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const size_t mUsrSize; 401ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni}; 411ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 42da0f069871343119251d6b0586be356dc2146a62Yang Niclass CpuScriptGroup2Impl; 43da0f069871343119251d6b0586be356dc2146a62Yang Ni 44da0f069871343119251d6b0586be356dc2146a62Yang Niclass Batch { 45eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 46eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni Batch(CpuScriptGroup2Impl* group) : mGroup(group), mExecutable(nullptr) {} 47da0f069871343119251d6b0586be356dc2146a62Yang Ni 48eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ~Batch(); 49da0f069871343119251d6b0586be356dc2146a62Yang Ni 50eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // Returns true if closure depends on any closure in this batch for a global 51eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // variable 52eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni bool conflict(CPUClosure* closure) const; 53da0f069871343119251d6b0586be356dc2146a62Yang Ni 54eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni void tryToCreateFusedKernel(const char* cacheDir); 55eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni void setGlobalsForBatch(); 56eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni void run(); 57da0f069871343119251d6b0586be356dc2146a62Yang Ni 58eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni CpuScriptGroup2Impl* mGroup; 59eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ScriptExecutable* mExecutable; 60eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni void* mScriptObj; 61ff2bb54ebf593b1d19d3a2e4cfa70a8ea4432c0dYang Ni List<CPUClosure*> mClosures; 62da0f069871343119251d6b0586be356dc2146a62Yang Ni}; 63da0f069871343119251d6b0586be356dc2146a62Yang Ni 641ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass CpuScriptGroup2Impl : public RsdCpuReference::CpuScriptGroup2 { 65eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 66eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni CpuScriptGroup2Impl(RsdCpuReferenceImpl *cpuRefImpl, const ScriptGroupBase* group); 67eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual ~CpuScriptGroup2Impl(); 681ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 69eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni bool init(); 70eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni virtual void execute(); 711ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 72eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni RsdCpuReferenceImpl* getCpuRefImpl() const { return mCpuRefImpl; } 731ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 74eb9aa675754c49f613c6ad71d41472b30f38b007Yang Niprivate: 75eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni RsdCpuReferenceImpl* mCpuRefImpl; 76eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const ScriptGroup2* mGroup; 77ff2bb54ebf593b1d19d3a2e4cfa70a8ea4432c0dYang Ni List<Batch*> mBatches; 781ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni}; 791ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 801ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni} // namespace renderscript 811ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni} // namespace android 821ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 831ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#endif // CPU_REF_CPUSCRIPTGROUP2IMPL_H_ 84