#ifndef ANDROID_RENDERSCRIPT_CLOSURE_H_ #define ANDROID_RENDERSCRIPT_CLOSURE_H_ #include "rsDefines.h" #include "rsMap.h" #include "rsObjectBase.h" namespace android { namespace renderscript { class Allocation; class Context; class IDBase; class ObjectBase; class ScriptFieldID; class ScriptInvokeID; class ScriptKernelID; class Type; class Closure : public ObjectBase { public: Closure(Context* context, const ScriptKernelID* kernelID, Allocation* returnValue, const int numValues, const ScriptFieldID** fieldIDs, const int64_t* values, // Allocations or primitive (numeric) types const int* sizes, // size for data type. -1 indicates an allocation. const Closure** depClosures, const ScriptFieldID** depFieldIDs); Closure(Context* context, const ScriptInvokeID* invokeID, const void* params, const size_t paramLength, const size_t numValues, const ScriptFieldID** fieldIDs, const int64_t* values, // Allocations or primitive (numeric) types const int* sizes); // size for data type. -1 indicates an allocation. virtual ~Closure(); virtual void serialize(Context *rsc, OStream *stream) const {} virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_CLOSURE; } // Set the value of an argument or a global. // The special value -1 for the size indicates the value is an Allocation. void setArg(const uint32_t index, const void* value, const int size); void setGlobal(const ScriptFieldID* fieldID, const int64_t value, const int size); Context* mContext; // KernelId or InvokeID const ObjectBaseRef mFunctionID; // Flag indicating if this closure is for a kernel (true) or invocable // function (false) const bool mIsKernel; // Values referrenced in arguments and globals cannot be futures. They must be // either a known value or unbound value. // For now, all arguments should be Allocations. const void** mArgs; size_t mNumArg; // A global could be allocation or any primitive data type. Map> mGlobals; Allocation* mReturnValue; // All the other closures which this closure depends on for one of its // arguments, and the fields which it depends on. Map>*> mArgDeps; // All the other closures that this closure depends on for one of its fields, // and the fields that it depends on. Map>*> mGlobalDeps; uint8_t* mParams; const size_t mParamLength; }; } // namespace renderscript } // namespace android #endif // ANDROID_RENDERSCRIPT_CLOSURE_H_