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