xref: /aosp_15_r20/frameworks/rs/rsClosure.h (revision e1eccf28f96817838ad6867f7f39d2351ec11f56)
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