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 7b0abb140ac51b93d1a85aadaa63fe057f2d29850David Grossstruct RsExpandKernelDriverInfo; 8dced5c96bc53c45a1aac782ea9bd738b0d50fd09David Gross 91ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ninamespace android { 101ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ninamespace renderscript { 111ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 121ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass Closure; 131ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass RsdCpuScriptImpl; 141ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass RsdCpuReferenceImpl; 15da0f069871343119251d6b0586be356dc2146a62Yang Niclass ScriptExecutable; 161ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass ScriptGroup2; 171ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 18b0abb140ac51b93d1a85aadaa63fe057f2d29850David Grosstypedef void (*ExpandFuncTy)(const RsExpandKernelDriverInfo*, uint32_t, uint32_t, 191ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni uint32_t); 20eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nitypedef void (*InvokeFuncTy)(const void*, uint32_t); 211ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 221ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass CPUClosure { 23eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 24062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni CPUClosure(const Closure* closure, RsdCpuScriptImpl* si, ExpandFuncTy func) : 25062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni mClosure(closure), mSi(si), mFunc(func) {} 26eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 27eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni CPUClosure(const Closure* closure, RsdCpuScriptImpl* si) : 28062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni mClosure(closure), mSi(si), mFunc(nullptr) {} 29eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni 30eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // It's important to do forwarding here than inheritance for unbound value 31eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // binding to work. 32eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const Closure* mClosure; 33eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni RsdCpuScriptImpl* mSi; 34eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const ExpandFuncTy mFunc; 351ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni}; 361ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 37da0f069871343119251d6b0586be356dc2146a62Yang Niclass CpuScriptGroup2Impl; 38da0f069871343119251d6b0586be356dc2146a62Yang Ni 39da0f069871343119251d6b0586be356dc2146a62Yang Niclass Batch { 40eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 41062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni Batch(CpuScriptGroup2Impl* group, const char* name); 42eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni ~Batch(); 43da0f069871343119251d6b0586be356dc2146a62Yang Ni 44eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // Returns true if closure depends on any closure in this batch for a global 45eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni // variable 46eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni bool conflict(CPUClosure* closure) const; 47da0f069871343119251d6b0586be356dc2146a62Yang Ni 48062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni void resolveFuncPtr(void* sharedObj); 49eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni void setGlobalsForBatch(); 50eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni void run(); 51da0f069871343119251d6b0586be356dc2146a62Yang Ni 52062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni size_t size() const { return mClosures.size(); } 53062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni 54eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni CpuScriptGroup2Impl* mGroup; 55ff2bb54ebf593b1d19d3a2e4cfa70a8ea4432c0dYang Ni List<CPUClosure*> mClosures; 56062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni char* mName; 57062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni void* mFunc; 58da0f069871343119251d6b0586be356dc2146a62Yang Ni}; 59da0f069871343119251d6b0586be356dc2146a62Yang Ni 601ffd86b448d78366190c540f98f8b6d641cdb6cfYang Niclass CpuScriptGroup2Impl : public RsdCpuReference::CpuScriptGroup2 { 61eb9aa675754c49f613c6ad71d41472b30f38b007Yang Nipublic: 62eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni CpuScriptGroup2Impl(RsdCpuReferenceImpl *cpuRefImpl, const ScriptGroupBase* group); 63c060f1435e7b9405f3be8974417fa6f410f03753Stephen Hines ~CpuScriptGroup2Impl() override; 641ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 65eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni bool init(); 66c060f1435e7b9405f3be8974417fa6f410f03753Stephen Hines void execute() override; 671ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 68eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni RsdCpuReferenceImpl* getCpuRefImpl() const { return mCpuRefImpl; } 69062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni ScriptExecutable* getExecutable() const { return mExecutable; } 70062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni 71062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni void compile(const char* cacheDir); 721ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 73eb9aa675754c49f613c6ad71d41472b30f38b007Yang Niprivate: 74eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni RsdCpuReferenceImpl* mCpuRefImpl; 75eb9aa675754c49f613c6ad71d41472b30f38b007Yang Ni const ScriptGroup2* mGroup; 76ff2bb54ebf593b1d19d3a2e4cfa70a8ea4432c0dYang Ni List<Batch*> mBatches; 77062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni ScriptExecutable* mExecutable; 78062c287f573ecc06c38ee4295e5627e12c52ac3dYang Ni void* mScriptObj; 791ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni}; 801ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 811ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni} // namespace renderscript 821ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni} // namespace android 831ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni 841ffd86b448d78366190c540f98f8b6d641cdb6cfYang Ni#endif // CPU_REF_CPUSCRIPTGROUP2IMPL_H_ 85