You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.1 KiB
85 lines
2.1 KiB
#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_
|