1*e1eccf28SAndroid Build Coastguard Worker #ifndef ANDROID_RENDERSCRIPT_CLOSURE_H_ 2*e1eccf28SAndroid Build Coastguard Worker #define ANDROID_RENDERSCRIPT_CLOSURE_H_ 3*e1eccf28SAndroid Build Coastguard Worker 4*e1eccf28SAndroid Build Coastguard Worker #include "rsDefines.h" 5*e1eccf28SAndroid Build Coastguard Worker #include "rsMap.h" 6*e1eccf28SAndroid Build Coastguard Worker #include "rsObjectBase.h" 7*e1eccf28SAndroid Build Coastguard Worker 8*e1eccf28SAndroid Build Coastguard Worker namespace android { 9*e1eccf28SAndroid Build Coastguard Worker namespace renderscript { 10*e1eccf28SAndroid Build Coastguard Worker 11*e1eccf28SAndroid Build Coastguard Worker class Allocation; 12*e1eccf28SAndroid Build Coastguard Worker class Context; 13*e1eccf28SAndroid Build Coastguard Worker class IDBase; 14*e1eccf28SAndroid Build Coastguard Worker class ObjectBase; 15*e1eccf28SAndroid Build Coastguard Worker class ScriptFieldID; 16*e1eccf28SAndroid Build Coastguard Worker class ScriptInvokeID; 17*e1eccf28SAndroid Build Coastguard Worker class ScriptKernelID; 18*e1eccf28SAndroid Build Coastguard Worker class Type; 19*e1eccf28SAndroid Build Coastguard Worker 20*e1eccf28SAndroid Build Coastguard Worker class Closure : public ObjectBase { 21*e1eccf28SAndroid Build Coastguard Worker public: 22*e1eccf28SAndroid Build Coastguard Worker Closure(Context* context, 23*e1eccf28SAndroid Build Coastguard Worker const ScriptKernelID* kernelID, 24*e1eccf28SAndroid Build Coastguard Worker Allocation* returnValue, 25*e1eccf28SAndroid Build Coastguard Worker const int numValues, 26*e1eccf28SAndroid Build Coastguard Worker const ScriptFieldID** fieldIDs, 27*e1eccf28SAndroid Build Coastguard Worker const int64_t* values, // Allocations or primitive (numeric) types 28*e1eccf28SAndroid Build Coastguard Worker const int* sizes, // size for data type. -1 indicates an allocation. 29*e1eccf28SAndroid Build Coastguard Worker const Closure** depClosures, 30*e1eccf28SAndroid Build Coastguard Worker const ScriptFieldID** depFieldIDs); 31*e1eccf28SAndroid Build Coastguard Worker Closure(Context* context, 32*e1eccf28SAndroid Build Coastguard Worker const ScriptInvokeID* invokeID, 33*e1eccf28SAndroid Build Coastguard Worker const void* params, 34*e1eccf28SAndroid Build Coastguard Worker const size_t paramLength, 35*e1eccf28SAndroid Build Coastguard Worker const size_t numValues, 36*e1eccf28SAndroid Build Coastguard Worker const ScriptFieldID** fieldIDs, 37*e1eccf28SAndroid Build Coastguard Worker const int64_t* values, // Allocations or primitive (numeric) types 38*e1eccf28SAndroid Build Coastguard Worker const int* sizes); // size for data type. -1 indicates an allocation. 39*e1eccf28SAndroid Build Coastguard Worker 40*e1eccf28SAndroid Build Coastguard Worker virtual ~Closure(); 41*e1eccf28SAndroid Build Coastguard Worker serialize(Context * rsc,OStream * stream)42*e1eccf28SAndroid Build Coastguard Worker virtual void serialize(Context *rsc, OStream *stream) const {} 43*e1eccf28SAndroid Build Coastguard Worker getClassId()44*e1eccf28SAndroid Build Coastguard Worker virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_CLOSURE; } 45*e1eccf28SAndroid Build Coastguard Worker 46*e1eccf28SAndroid Build Coastguard Worker // Set the value of an argument or a global. 47*e1eccf28SAndroid Build Coastguard Worker // The special value -1 for the size indicates the value is an Allocation. 48*e1eccf28SAndroid Build Coastguard Worker void setArg(const uint32_t index, const void* value, const int size); 49*e1eccf28SAndroid Build Coastguard Worker void setGlobal(const ScriptFieldID* fieldID, const int64_t value, 50*e1eccf28SAndroid Build Coastguard Worker const int size); 51*e1eccf28SAndroid Build Coastguard Worker 52*e1eccf28SAndroid Build Coastguard Worker Context* mContext; 53*e1eccf28SAndroid Build Coastguard Worker 54*e1eccf28SAndroid Build Coastguard Worker // KernelId or InvokeID 55*e1eccf28SAndroid Build Coastguard Worker const ObjectBaseRef<IDBase> mFunctionID; 56*e1eccf28SAndroid Build Coastguard Worker // Flag indicating if this closure is for a kernel (true) or invocable 57*e1eccf28SAndroid Build Coastguard Worker // function (false) 58*e1eccf28SAndroid Build Coastguard Worker const bool mIsKernel; 59*e1eccf28SAndroid Build Coastguard Worker 60*e1eccf28SAndroid Build Coastguard Worker // Values referrenced in arguments and globals cannot be futures. They must be 61*e1eccf28SAndroid Build Coastguard Worker // either a known value or unbound value. 62*e1eccf28SAndroid Build Coastguard Worker // For now, all arguments should be Allocations. 63*e1eccf28SAndroid Build Coastguard Worker const void** mArgs; 64*e1eccf28SAndroid Build Coastguard Worker size_t mNumArg; 65*e1eccf28SAndroid Build Coastguard Worker 66*e1eccf28SAndroid Build Coastguard Worker // A global could be allocation or any primitive data type. 67*e1eccf28SAndroid Build Coastguard Worker Map<const ScriptFieldID*, Pair<int64_t, int>> mGlobals; 68*e1eccf28SAndroid Build Coastguard Worker 69*e1eccf28SAndroid Build Coastguard Worker Allocation* mReturnValue; 70*e1eccf28SAndroid Build Coastguard Worker 71*e1eccf28SAndroid Build Coastguard Worker // All the other closures which this closure depends on for one of its 72*e1eccf28SAndroid Build Coastguard Worker // arguments, and the fields which it depends on. 73*e1eccf28SAndroid Build Coastguard Worker Map<const Closure*, Map<int, ObjectBaseRef<ScriptFieldID>>*> mArgDeps; 74*e1eccf28SAndroid Build Coastguard Worker 75*e1eccf28SAndroid Build Coastguard Worker // All the other closures that this closure depends on for one of its fields, 76*e1eccf28SAndroid Build Coastguard Worker // and the fields that it depends on. 77*e1eccf28SAndroid Build Coastguard Worker Map<const Closure*, Map<const ScriptFieldID*, 78*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<ScriptFieldID>>*> mGlobalDeps; 79*e1eccf28SAndroid Build Coastguard Worker 80*e1eccf28SAndroid Build Coastguard Worker uint8_t* mParams; 81*e1eccf28SAndroid Build Coastguard Worker const size_t mParamLength; 82*e1eccf28SAndroid Build Coastguard Worker }; 83*e1eccf28SAndroid Build Coastguard Worker 84*e1eccf28SAndroid Build Coastguard Worker } // namespace renderscript 85*e1eccf28SAndroid Build Coastguard Worker } // namespace android 86*e1eccf28SAndroid Build Coastguard Worker 87*e1eccf28SAndroid Build Coastguard Worker #endif // ANDROID_RENDERSCRIPT_CLOSURE_H_ 88