123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #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<IDBase> 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<const ScriptFieldID*, Pair<int64_t, int>> 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<const Closure*, Map<int, ObjectBaseRef<ScriptFieldID>>*> mArgDeps;
- // All the other closures that this closure depends on for one of its fields,
- // and the fields that it depends on.
- Map<const Closure*, Map<const ScriptFieldID*,
- ObjectBaseRef<ScriptFieldID>>*> mGlobalDeps;
- uint8_t* mParams;
- const size_t mParamLength;
- };
- } // namespace renderscript
- } // namespace android
- #endif // ANDROID_RENDERSCRIPT_CLOSURE_H_
|