10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/*
20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2009-2012 The Android Open Source Project
30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License.
60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at
70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software
110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and
140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License.
150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef ANDROID_RS_SCRIPT_H
180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define ANDROID_RS_SCRIPT_H
190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsAllocation.h"
210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ---------------------------------------------------------------------------
240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android {
250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript {
260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
27ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ScriptKernelID : public ObjectBase {
28ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samspublic:
29ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    ScriptKernelID(Context *rsc, Script *s, int slot, int sig);
30ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    virtual ~ScriptKernelID();
31ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
32ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    virtual void serialize(Context *rsc, OStream *stream) const;
33ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    virtual RsA3DClassID getClassId() const;
34ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
35ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    Script *mScript;
36ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    int mSlot;
37ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    bool mHasKernelInput;
38ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    bool mHasKernelOutput;
39ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams};
40ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
41ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsclass ScriptFieldID : public ObjectBase {
42ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samspublic:
43ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    ScriptFieldID(Context *rsc, Script *s, int slot);
44ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    virtual ~ScriptFieldID();
45ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
46ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    virtual void serialize(Context *rsc, OStream *stream) const;
47ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    virtual RsA3DClassID getClassId() const;
48ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
49ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    Script *mScript;
50ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams    int mSlot;
51ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams};
52ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Script : public ObjectBase {
540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinespublic:
55ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams
560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    struct Hal {
570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        void * drv;
580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        struct DriverInfo {
600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            int mVersionMajor;
610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            int mVersionMinor;
620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            size_t exportedVariableCount;
640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            size_t exportedFunctionCount;
650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            size_t exportedPragmaCount;
660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            char const **exportedPragmaKeyList;
670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            char const **exportedPragmaValueList;
680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            int (* root)();
700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines            bool isThreadable;
710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        };
720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        DriverInfo info;
730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    };
740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    Hal mHal;
750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    typedef void (* InvokeFunc_t)(void);
770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    Script(Context *);
790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    virtual ~Script();
800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    struct Enviroment_t {
820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        int64_t mStartTimeMillis;
830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines        int64_t mLastDtTime;
840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    };
850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    Enviroment_t mEnviroment;
860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void setSlot(uint32_t slot, Allocation *a);
880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void setVar(uint32_t slot, const void *val, size_t len);
890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void setVar(uint32_t slot, const void *val, size_t len, Element *e,
900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                const size_t *dims, size_t dimLen);
910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void setVarObj(uint32_t slot, ObjectBase *val);
920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    virtual bool freeChildren();
940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    virtual void runForEach(Context *rsc,
960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                            uint32_t slot,
970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                            const Allocation * ain,
980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                            Allocation * aout,
990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                            const void * usr,
1000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                            size_t usrBytes,
1010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                            const RsScriptCall *sc = NULL) = 0;
1020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    virtual void Invoke(Context *rsc, uint32_t slot, const void *data, size_t len) = 0;
1040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    virtual void setupScript(Context *rsc) = 0;
1050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    virtual uint32_t run(Context *) = 0;
1060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesprotected:
1070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bool mInitialized;
1080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ObjectBaseRef<Allocation> *mSlots;
1090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ObjectBaseRef<const Type> *mTypes;
1100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines};
1120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
1160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif
1170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
118