123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*
- * Copyright (C) 2009-2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef ANDROID_RS_SCRIPT_H
- #define ANDROID_RS_SCRIPT_H
- #include "rsAllocation.h"
- #include "rsMap.h"
- #include <utility>
- // ---------------------------------------------------------------------------
- namespace android {
- namespace renderscript {
- #if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB)
- class ProgramVertex;
- class ProgramFragment;
- class ProgramRaster;
- class ProgramStore;
- #endif
- class IDBase : public ObjectBase {
- public:
- IDBase(Context *rsc, Script *s, int slot) :
- ObjectBase(rsc), mScript(s), mSlot(slot) {}
- virtual ~IDBase() {}
- virtual void serialize(Context *rsc, OStream *stream) const {}
- virtual RsA3DClassID getClassId() const = 0;
- Script *mScript;
- int mSlot;
- };
- class ScriptKernelID : public IDBase {
- public:
- ScriptKernelID(Context *rsc, Script *s, int slot, int sig);
- virtual ~ScriptKernelID() {}
- virtual RsA3DClassID getClassId() const;
- bool mHasKernelInput;
- bool mHasKernelOutput;
- };
- class ScriptInvokeID : public IDBase {
- public:
- ScriptInvokeID(Context *rsc, Script *s, int slot);
- virtual ~ScriptInvokeID() {}
- virtual RsA3DClassID getClassId() const;
- };
- class ScriptFieldID : public IDBase {
- public:
- ScriptFieldID(Context *rsc, Script *s, int slot);
- virtual ~ScriptFieldID() {}
- virtual RsA3DClassID getClassId() const;
- };
- class Script : public ObjectBase {
- public:
- struct Hal {
- void * drv;
- struct DriverInfo {
- int mVersionMajor;
- int mVersionMinor;
- size_t exportedVariableCount;
- size_t exportedForEachCount;
- size_t exportedReduceCount;
- size_t exportedFunctionCount;
- size_t exportedPragmaCount;
- char const **exportedPragmaKeyList;
- char const **exportedPragmaValueList;
- const Pair<const char *, uint32_t> *exportedForeachFuncList;
- int (* root)();
- };
- DriverInfo info;
- };
- Hal mHal;
- explicit Script(Context *);
- virtual ~Script();
- struct Enviroment_t {
- int64_t mStartTimeMillis;
- mutable int64_t mLastDtTime;
- #if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB)
- ObjectBaseRef<ProgramVertex> mVertex;
- ObjectBaseRef<ProgramFragment> mFragment;
- ObjectBaseRef<ProgramRaster> mRaster;
- ObjectBaseRef<ProgramStore> mFragmentStore;
- #endif
- };
- Enviroment_t mEnviroment;
- void setSlot(uint32_t slot, Allocation *a);
- void setVar(uint32_t slot, const void *val, size_t len);
- void getVar(uint32_t slot, const void *val, size_t len);
- void setVar(uint32_t slot, const void *val, size_t len, Element *e,
- const uint32_t *dims, size_t dimLen);
- void setVarObj(uint32_t slot, ObjectBase *val);
- virtual bool freeChildren();
- virtual void runForEach(Context* rsc,
- uint32_t slot,
- const Allocation ** ains,
- size_t inLen,
- Allocation* aout,
- const void* usr,
- size_t usrBytes,
- const RsScriptCall *sc = nullptr) = 0;
- virtual void runReduce(Context *rsc, uint32_t slot,
- const Allocation **ains, size_t inLen,
- Allocation *aout, const RsScriptCall *sc) = 0;
- virtual void Invoke(Context *rsc, uint32_t slot, const void *data, size_t len) = 0;
- virtual void setupScript(Context *rsc) = 0;
- virtual uint32_t run(Context *) = 0;
- virtual bool isIntrinsic() const { return false; }
- bool hasObjectSlots() const {
- return mHasObjectSlots;
- }
- virtual void callUpdateCacheObject(const Context *rsc, void *dstObj) const;
- uint32_t getApiLevel() const {
- return mApiLevel;
- }
- protected:
- bool mInitialized;
- bool mHasObjectSlots;
- uint32_t mApiLevel;
- ObjectBaseRef<Allocation> *mSlots;
- ObjectBaseRef<const Type> *mTypes;
- };
- } // namespace renderscript
- } // namespace android
- #endif
|