1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/*
2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2009 The Android Open Source Project
3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License.
6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at
7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software
11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and
14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License.
15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */
16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
17d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#ifndef ANDROID_RS_SCRIPT_H
18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define ANDROID_RS_SCRIPT_H
19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAllocation.h"
21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
223eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
24d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android {
25d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript {
26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
273eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsclass ProgramVertex;
283eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsclass ProgramFragment;
293eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsclass ProgramRaster;
3054db59c3594e887a412a24713fc3daa1c2404593Jason Samsclass ProgramStore;
31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
32ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchoukclass Script : public ObjectBase {
33d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic:
34e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    struct Hal {
35e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        void * drv;
36e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
37e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        struct DriverInfo {
38e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams            int mVersionMajor;
39e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams            int mVersionMinor;
40e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
41e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams            size_t exportedVariableCount;
42e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams            size_t exportedFunctionCount;
43e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams            size_t exportedPragmaCount;
44e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams            char const **exportedPragmaKeyList;
45e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams            char const **exportedPragmaValueList;
46e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
47e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams            int (* root)();
48e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams            bool isThreadable;
49e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        };
50e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        DriverInfo info;
51e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    };
52e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    Hal mHal;
53e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
54be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams    typedef void (* InvokeFunc_t)(void);
55d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
56a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    Script(Context *);
57d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    virtual ~Script();
58d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
59928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams    struct Enviroment_t {
6017966517a1ecbe38b276235967dbc03b58628bbcJason Sams        int64_t mStartTimeMillis;
6117966517a1ecbe38b276235967dbc03b58628bbcJason Sams        int64_t mLastDtTime;
62584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        const char* mTimeZone;
63584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
643eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams        ObjectBaseRef<ProgramVertex> mVertex;
653eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams        ObjectBaseRef<ProgramFragment> mFragment;
665235cf3f41cfcfe39c7072fddf1ead52db31292dJason Sams        ObjectBaseRef<ProgramRaster> mRaster;
6754db59c3594e887a412a24713fc3daa1c2404593Jason Sams        ObjectBaseRef<ProgramStore> mFragmentStore;
68928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams    };
69928f5cf2870177abd715e1dfb81da6ac1fe3e845Jason Sams    Enviroment_t mEnviroment;
70d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
716f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchouk    void initSlots();
726f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchouk    void setSlot(uint32_t slot, Allocation *a);
7317a8a1939d4cbc74de54954c67f3dd61882420aaAlex Sakhartchouk    void setVar(uint32_t slot, const void *val, size_t len);
746f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    void setVarObj(uint32_t slot, ObjectBase *val);
75be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
76514f9790fdf180ca3c58e508cbd36c520fa7be08Stephen Hines    virtual bool freeChildren();
77514f9790fdf180ca3c58e508cbd36c520fa7be08Stephen Hines
788f8a5724bee0f958ef81a7154e4fd40fb6f07a49Jason Sams    virtual void runForEach(Context *rsc,
798f8a5724bee0f958ef81a7154e4fd40fb6f07a49Jason Sams                            const Allocation * ain,
808f8a5724bee0f958ef81a7154e4fd40fb6f07a49Jason Sams                            Allocation * aout,
818f8a5724bee0f958ef81a7154e4fd40fb6f07a49Jason Sams                            const void * usr,
82fcf7231249822ff4dae852f1de1f799756689f91Jason Sams                            size_t usrBytes,
838f8a5724bee0f958ef81a7154e4fd40fb6f07a49Jason Sams                            const RsScriptCall *sc = NULL) = 0;
84f17bccc9050498f51a32a2ee78f5d5a306008e3dJason Sams
8517a8a1939d4cbc74de54954c67f3dd61882420aaAlex Sakhartchouk    virtual void Invoke(Context *rsc, uint32_t slot, const void *data, size_t len) = 0;
86f17bccc9050498f51a32a2ee78f5d5a306008e3dJason Sams    virtual void setupScript(Context *rsc) = 0;
87f17bccc9050498f51a32a2ee78f5d5a306008e3dJason Sams    virtual uint32_t run(Context *) = 0;
886f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchoukprotected:
896f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchouk    ObjectBaseRef<Allocation> *mSlots;
906f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchouk    ObjectBaseRef<const Type> *mTypes;
916f91cb6af7a8b20e3e001f90406e27f4580a1ccdAlex Sakhartchouk
92d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
93d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
94d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
95d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
96d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
97d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif
98d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
99