xref: /aosp_15_r20/frameworks/rs/rsScript.h (revision e1eccf28f96817838ad6867f7f39d2351ec11f56)
1*e1eccf28SAndroid Build Coastguard Worker /*
2*e1eccf28SAndroid Build Coastguard Worker  * Copyright (C) 2009-2012 The Android Open Source Project
3*e1eccf28SAndroid Build Coastguard Worker  *
4*e1eccf28SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*e1eccf28SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*e1eccf28SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*e1eccf28SAndroid Build Coastguard Worker  *
8*e1eccf28SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*e1eccf28SAndroid Build Coastguard Worker  *
10*e1eccf28SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*e1eccf28SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*e1eccf28SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e1eccf28SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*e1eccf28SAndroid Build Coastguard Worker  * limitations under the License.
15*e1eccf28SAndroid Build Coastguard Worker  */
16*e1eccf28SAndroid Build Coastguard Worker 
17*e1eccf28SAndroid Build Coastguard Worker #ifndef ANDROID_RS_SCRIPT_H
18*e1eccf28SAndroid Build Coastguard Worker #define ANDROID_RS_SCRIPT_H
19*e1eccf28SAndroid Build Coastguard Worker 
20*e1eccf28SAndroid Build Coastguard Worker #include "rsAllocation.h"
21*e1eccf28SAndroid Build Coastguard Worker #include "rsMap.h"
22*e1eccf28SAndroid Build Coastguard Worker 
23*e1eccf28SAndroid Build Coastguard Worker #include <utility>
24*e1eccf28SAndroid Build Coastguard Worker 
25*e1eccf28SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
26*e1eccf28SAndroid Build Coastguard Worker namespace android {
27*e1eccf28SAndroid Build Coastguard Worker namespace renderscript {
28*e1eccf28SAndroid Build Coastguard Worker 
29*e1eccf28SAndroid Build Coastguard Worker #if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB)
30*e1eccf28SAndroid Build Coastguard Worker class ProgramVertex;
31*e1eccf28SAndroid Build Coastguard Worker class ProgramFragment;
32*e1eccf28SAndroid Build Coastguard Worker class ProgramRaster;
33*e1eccf28SAndroid Build Coastguard Worker class ProgramStore;
34*e1eccf28SAndroid Build Coastguard Worker #endif
35*e1eccf28SAndroid Build Coastguard Worker 
36*e1eccf28SAndroid Build Coastguard Worker class IDBase : public ObjectBase {
37*e1eccf28SAndroid Build Coastguard Worker public:
IDBase(Context * rsc,Script * s,int slot)38*e1eccf28SAndroid Build Coastguard Worker     IDBase(Context *rsc, Script *s, int slot) :
39*e1eccf28SAndroid Build Coastguard Worker         ObjectBase(rsc), mScript(s), mSlot(slot) {}
~IDBase()40*e1eccf28SAndroid Build Coastguard Worker     virtual ~IDBase() {}
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     virtual RsA3DClassID getClassId() const = 0;
44*e1eccf28SAndroid Build Coastguard Worker 
45*e1eccf28SAndroid Build Coastguard Worker     Script *mScript;
46*e1eccf28SAndroid Build Coastguard Worker     int mSlot;
47*e1eccf28SAndroid Build Coastguard Worker };
48*e1eccf28SAndroid Build Coastguard Worker 
49*e1eccf28SAndroid Build Coastguard Worker class ScriptKernelID : public IDBase {
50*e1eccf28SAndroid Build Coastguard Worker public:
51*e1eccf28SAndroid Build Coastguard Worker     ScriptKernelID(Context *rsc, Script *s, int slot, int sig);
~ScriptKernelID()52*e1eccf28SAndroid Build Coastguard Worker     virtual ~ScriptKernelID() {}
53*e1eccf28SAndroid Build Coastguard Worker 
54*e1eccf28SAndroid Build Coastguard Worker     virtual RsA3DClassID getClassId() const;
55*e1eccf28SAndroid Build Coastguard Worker 
56*e1eccf28SAndroid Build Coastguard Worker     bool mHasKernelInput;
57*e1eccf28SAndroid Build Coastguard Worker     bool mHasKernelOutput;
58*e1eccf28SAndroid Build Coastguard Worker };
59*e1eccf28SAndroid Build Coastguard Worker 
60*e1eccf28SAndroid Build Coastguard Worker class ScriptInvokeID : public IDBase {
61*e1eccf28SAndroid Build Coastguard Worker public:
62*e1eccf28SAndroid Build Coastguard Worker     ScriptInvokeID(Context *rsc, Script *s, int slot);
~ScriptInvokeID()63*e1eccf28SAndroid Build Coastguard Worker     virtual ~ScriptInvokeID() {}
64*e1eccf28SAndroid Build Coastguard Worker 
65*e1eccf28SAndroid Build Coastguard Worker     virtual RsA3DClassID getClassId() const;
66*e1eccf28SAndroid Build Coastguard Worker };
67*e1eccf28SAndroid Build Coastguard Worker 
68*e1eccf28SAndroid Build Coastguard Worker class ScriptFieldID : public IDBase {
69*e1eccf28SAndroid Build Coastguard Worker public:
70*e1eccf28SAndroid Build Coastguard Worker     ScriptFieldID(Context *rsc, Script *s, int slot);
~ScriptFieldID()71*e1eccf28SAndroid Build Coastguard Worker     virtual ~ScriptFieldID() {}
72*e1eccf28SAndroid Build Coastguard Worker 
73*e1eccf28SAndroid Build Coastguard Worker     virtual RsA3DClassID getClassId() const;
74*e1eccf28SAndroid Build Coastguard Worker };
75*e1eccf28SAndroid Build Coastguard Worker 
76*e1eccf28SAndroid Build Coastguard Worker class Script : public ObjectBase {
77*e1eccf28SAndroid Build Coastguard Worker public:
78*e1eccf28SAndroid Build Coastguard Worker 
79*e1eccf28SAndroid Build Coastguard Worker     struct Hal {
80*e1eccf28SAndroid Build Coastguard Worker         void * drv;
81*e1eccf28SAndroid Build Coastguard Worker 
82*e1eccf28SAndroid Build Coastguard Worker         struct DriverInfo {
83*e1eccf28SAndroid Build Coastguard Worker             int mVersionMajor;
84*e1eccf28SAndroid Build Coastguard Worker             int mVersionMinor;
85*e1eccf28SAndroid Build Coastguard Worker 
86*e1eccf28SAndroid Build Coastguard Worker             size_t exportedVariableCount;
87*e1eccf28SAndroid Build Coastguard Worker             size_t exportedForEachCount;
88*e1eccf28SAndroid Build Coastguard Worker             size_t exportedReduceCount;
89*e1eccf28SAndroid Build Coastguard Worker             size_t exportedFunctionCount;
90*e1eccf28SAndroid Build Coastguard Worker             size_t exportedPragmaCount;
91*e1eccf28SAndroid Build Coastguard Worker             char const **exportedPragmaKeyList;
92*e1eccf28SAndroid Build Coastguard Worker             char const **exportedPragmaValueList;
93*e1eccf28SAndroid Build Coastguard Worker             const Pair<const char *, uint32_t> *exportedForeachFuncList;
94*e1eccf28SAndroid Build Coastguard Worker 
95*e1eccf28SAndroid Build Coastguard Worker             int (* root)();
96*e1eccf28SAndroid Build Coastguard Worker         };
97*e1eccf28SAndroid Build Coastguard Worker         DriverInfo info;
98*e1eccf28SAndroid Build Coastguard Worker     };
99*e1eccf28SAndroid Build Coastguard Worker     Hal mHal;
100*e1eccf28SAndroid Build Coastguard Worker 
101*e1eccf28SAndroid Build Coastguard Worker     explicit Script(Context *);
102*e1eccf28SAndroid Build Coastguard Worker     virtual ~Script();
103*e1eccf28SAndroid Build Coastguard Worker 
104*e1eccf28SAndroid Build Coastguard Worker     struct Enviroment_t {
105*e1eccf28SAndroid Build Coastguard Worker         int64_t mStartTimeMillis;
106*e1eccf28SAndroid Build Coastguard Worker         mutable int64_t mLastDtTime;
107*e1eccf28SAndroid Build Coastguard Worker 
108*e1eccf28SAndroid Build Coastguard Worker #if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB)
109*e1eccf28SAndroid Build Coastguard Worker         ObjectBaseRef<ProgramVertex> mVertex;
110*e1eccf28SAndroid Build Coastguard Worker         ObjectBaseRef<ProgramFragment> mFragment;
111*e1eccf28SAndroid Build Coastguard Worker         ObjectBaseRef<ProgramRaster> mRaster;
112*e1eccf28SAndroid Build Coastguard Worker         ObjectBaseRef<ProgramStore> mFragmentStore;
113*e1eccf28SAndroid Build Coastguard Worker #endif
114*e1eccf28SAndroid Build Coastguard Worker     };
115*e1eccf28SAndroid Build Coastguard Worker     Enviroment_t mEnviroment;
116*e1eccf28SAndroid Build Coastguard Worker 
117*e1eccf28SAndroid Build Coastguard Worker     void setSlot(uint32_t slot, Allocation *a);
118*e1eccf28SAndroid Build Coastguard Worker     void setVar(uint32_t slot, const void *val, size_t len);
119*e1eccf28SAndroid Build Coastguard Worker     void getVar(uint32_t slot, const void *val, size_t len);
120*e1eccf28SAndroid Build Coastguard Worker     void setVar(uint32_t slot, const void *val, size_t len, Element *e,
121*e1eccf28SAndroid Build Coastguard Worker                 const uint32_t *dims, size_t dimLen);
122*e1eccf28SAndroid Build Coastguard Worker     void setVarObj(uint32_t slot, ObjectBase *val);
123*e1eccf28SAndroid Build Coastguard Worker 
124*e1eccf28SAndroid Build Coastguard Worker     virtual bool freeChildren();
125*e1eccf28SAndroid Build Coastguard Worker 
126*e1eccf28SAndroid Build Coastguard Worker     virtual void runForEach(Context* rsc,
127*e1eccf28SAndroid Build Coastguard Worker                             uint32_t slot,
128*e1eccf28SAndroid Build Coastguard Worker                             const Allocation ** ains,
129*e1eccf28SAndroid Build Coastguard Worker                             size_t inLen,
130*e1eccf28SAndroid Build Coastguard Worker                             Allocation* aout,
131*e1eccf28SAndroid Build Coastguard Worker                             const void* usr,
132*e1eccf28SAndroid Build Coastguard Worker                             size_t usrBytes,
133*e1eccf28SAndroid Build Coastguard Worker                             const RsScriptCall *sc = nullptr) = 0;
134*e1eccf28SAndroid Build Coastguard Worker 
135*e1eccf28SAndroid Build Coastguard Worker     virtual void runReduce(Context *rsc, uint32_t slot,
136*e1eccf28SAndroid Build Coastguard Worker                            const Allocation **ains, size_t inLen,
137*e1eccf28SAndroid Build Coastguard Worker                            Allocation *aout, const RsScriptCall *sc) = 0;
138*e1eccf28SAndroid Build Coastguard Worker 
139*e1eccf28SAndroid Build Coastguard Worker     virtual void Invoke(Context *rsc, uint32_t slot, const void *data, size_t len) = 0;
140*e1eccf28SAndroid Build Coastguard Worker     virtual void setupScript(Context *rsc) = 0;
141*e1eccf28SAndroid Build Coastguard Worker     virtual uint32_t run(Context *) = 0;
isIntrinsic()142*e1eccf28SAndroid Build Coastguard Worker     virtual bool isIntrinsic() const { return false; }
143*e1eccf28SAndroid Build Coastguard Worker 
hasObjectSlots()144*e1eccf28SAndroid Build Coastguard Worker     bool hasObjectSlots() const {
145*e1eccf28SAndroid Build Coastguard Worker         return mHasObjectSlots;
146*e1eccf28SAndroid Build Coastguard Worker     }
147*e1eccf28SAndroid Build Coastguard Worker     virtual void callUpdateCacheObject(const Context *rsc, void *dstObj) const;
148*e1eccf28SAndroid Build Coastguard Worker 
getApiLevel()149*e1eccf28SAndroid Build Coastguard Worker     uint32_t getApiLevel() const {
150*e1eccf28SAndroid Build Coastguard Worker         return mApiLevel;
151*e1eccf28SAndroid Build Coastguard Worker     }
152*e1eccf28SAndroid Build Coastguard Worker 
153*e1eccf28SAndroid Build Coastguard Worker protected:
154*e1eccf28SAndroid Build Coastguard Worker     bool mInitialized;
155*e1eccf28SAndroid Build Coastguard Worker     bool mHasObjectSlots;
156*e1eccf28SAndroid Build Coastguard Worker     uint32_t mApiLevel;
157*e1eccf28SAndroid Build Coastguard Worker     ObjectBaseRef<Allocation> *mSlots;
158*e1eccf28SAndroid Build Coastguard Worker     ObjectBaseRef<const Type> *mTypes;
159*e1eccf28SAndroid Build Coastguard Worker 
160*e1eccf28SAndroid Build Coastguard Worker };
161*e1eccf28SAndroid Build Coastguard Worker 
162*e1eccf28SAndroid Build Coastguard Worker 
163*e1eccf28SAndroid Build Coastguard Worker } // namespace renderscript
164*e1eccf28SAndroid Build Coastguard Worker } // namespace android
165*e1eccf28SAndroid Build Coastguard Worker #endif
166