1*e1eccf28SAndroid Build Coastguard Worker /* 2*e1eccf28SAndroid Build Coastguard Worker * Copyright (C) 2011 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_CONTEXT_H 18*e1eccf28SAndroid Build Coastguard Worker #define ANDROID_RS_CONTEXT_H 19*e1eccf28SAndroid Build Coastguard Worker 20*e1eccf28SAndroid Build Coastguard Worker #include "rsUtils.h" 21*e1eccf28SAndroid Build Coastguard Worker #include "rs_hal.h" 22*e1eccf28SAndroid Build Coastguard Worker #include <string.h> 23*e1eccf28SAndroid Build Coastguard Worker 24*e1eccf28SAndroid Build Coastguard Worker #include "rsThreadIO.h" 25*e1eccf28SAndroid Build Coastguard Worker #include "rsScriptC.h" 26*e1eccf28SAndroid Build Coastguard Worker #include "rsScriptGroup.h" 27*e1eccf28SAndroid Build Coastguard Worker #include "rsSampler.h" 28*e1eccf28SAndroid Build Coastguard Worker 29*e1eccf28SAndroid Build Coastguard Worker #define ATRACE_ENABLED(...) false 30*e1eccf28SAndroid Build Coastguard Worker #define ATRACE_NAME(...) 31*e1eccf28SAndroid Build Coastguard Worker #define ATRACE_CALL(...) 32*e1eccf28SAndroid Build Coastguard Worker 33*e1eccf28SAndroid Build Coastguard Worker #ifndef RS_COMPATIBILITY_LIB 34*e1eccf28SAndroid Build Coastguard Worker #include "rsFont.h" 35*e1eccf28SAndroid Build Coastguard Worker #include "rsProgramFragment.h" 36*e1eccf28SAndroid Build Coastguard Worker #include "rsProgramStore.h" 37*e1eccf28SAndroid Build Coastguard Worker #include "rsProgramRaster.h" 38*e1eccf28SAndroid Build Coastguard Worker #include "rsProgramVertex.h" 39*e1eccf28SAndroid Build Coastguard Worker #include "rsFBOCache.h" 40*e1eccf28SAndroid Build Coastguard Worker 41*e1eccf28SAndroid Build Coastguard Worker #endif 42*e1eccf28SAndroid Build Coastguard Worker 43*e1eccf28SAndroid Build Coastguard Worker #include <vector> 44*e1eccf28SAndroid Build Coastguard Worker 45*e1eccf28SAndroid Build Coastguard Worker // --------------------------------------------------------------------------- 46*e1eccf28SAndroid Build Coastguard Worker namespace android { 47*e1eccf28SAndroid Build Coastguard Worker 48*e1eccf28SAndroid Build Coastguard Worker namespace renderscript { 49*e1eccf28SAndroid Build Coastguard Worker 50*e1eccf28SAndroid Build Coastguard Worker class Device; 51*e1eccf28SAndroid Build Coastguard Worker 52*e1eccf28SAndroid Build Coastguard Worker #if 0 53*e1eccf28SAndroid Build Coastguard Worker #define CHECK_OBJ(o) { \ 54*e1eccf28SAndroid Build Coastguard Worker GET_TLS(); \ 55*e1eccf28SAndroid Build Coastguard Worker if (!ObjectBase::isValid(rsc, (const ObjectBase *)o)) { \ 56*e1eccf28SAndroid Build Coastguard Worker ALOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__); \ 57*e1eccf28SAndroid Build Coastguard Worker } \ 58*e1eccf28SAndroid Build Coastguard Worker } 59*e1eccf28SAndroid Build Coastguard Worker #define CHECK_OBJ_OR_NULL(o) { \ 60*e1eccf28SAndroid Build Coastguard Worker GET_TLS(); \ 61*e1eccf28SAndroid Build Coastguard Worker if (o && !ObjectBase::isValid(rsc, (const ObjectBase *)o)) { \ 62*e1eccf28SAndroid Build Coastguard Worker ALOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__); \ 63*e1eccf28SAndroid Build Coastguard Worker } \ 64*e1eccf28SAndroid Build Coastguard Worker } 65*e1eccf28SAndroid Build Coastguard Worker #else 66*e1eccf28SAndroid Build Coastguard Worker #define CHECK_OBJ(o) 67*e1eccf28SAndroid Build Coastguard Worker #define CHECK_OBJ_OR_NULL(o) 68*e1eccf28SAndroid Build Coastguard Worker #endif 69*e1eccf28SAndroid Build Coastguard Worker 70*e1eccf28SAndroid Build Coastguard Worker 71*e1eccf28SAndroid Build Coastguard Worker 72*e1eccf28SAndroid Build Coastguard Worker class Context { 73*e1eccf28SAndroid Build Coastguard Worker public: 74*e1eccf28SAndroid Build Coastguard Worker struct Hal { 75*e1eccf28SAndroid Build Coastguard Worker void * drv; 76*e1eccf28SAndroid Build Coastguard Worker 77*e1eccf28SAndroid Build Coastguard Worker RsdHalFunctions funcs; 78*e1eccf28SAndroid Build Coastguard Worker uint32_t flags; 79*e1eccf28SAndroid Build Coastguard Worker }; 80*e1eccf28SAndroid Build Coastguard Worker Hal mHal; 81*e1eccf28SAndroid Build Coastguard Worker 82*e1eccf28SAndroid Build Coastguard Worker static Context * createContext(Device *, const RsSurfaceConfig *sc, 83*e1eccf28SAndroid Build Coastguard Worker RsContextType ct = RS_CONTEXT_TYPE_NORMAL, 84*e1eccf28SAndroid Build Coastguard Worker uint32_t flags = 0, 85*e1eccf28SAndroid Build Coastguard Worker const char* vendorDriverName = nullptr); 86*e1eccf28SAndroid Build Coastguard Worker static Context * createContextLite(); 87*e1eccf28SAndroid Build Coastguard Worker ~Context(); 88*e1eccf28SAndroid Build Coastguard Worker 89*e1eccf28SAndroid Build Coastguard Worker static pthread_mutex_t gMessageMutex; 90*e1eccf28SAndroid Build Coastguard Worker static pthread_mutex_t gInitMutex; 91*e1eccf28SAndroid Build Coastguard Worker // Library mutex (for providing thread-safe calls from the runtime) 92*e1eccf28SAndroid Build Coastguard Worker static pthread_mutex_t gLibMutex; 93*e1eccf28SAndroid Build Coastguard Worker 94*e1eccf28SAndroid Build Coastguard Worker class PushState { 95*e1eccf28SAndroid Build Coastguard Worker public: 96*e1eccf28SAndroid Build Coastguard Worker explicit PushState(Context *); 97*e1eccf28SAndroid Build Coastguard Worker ~PushState(); 98*e1eccf28SAndroid Build Coastguard Worker 99*e1eccf28SAndroid Build Coastguard Worker private: 100*e1eccf28SAndroid Build Coastguard Worker #if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB) 101*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<ProgramFragment> mFragment; 102*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<ProgramVertex> mVertex; 103*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<ProgramStore> mStore; 104*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<ProgramRaster> mRaster; 105*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<Font> mFont; 106*e1eccf28SAndroid Build Coastguard Worker #endif 107*e1eccf28SAndroid Build Coastguard Worker Context *mRsc; 108*e1eccf28SAndroid Build Coastguard Worker }; 109*e1eccf28SAndroid Build Coastguard Worker 110*e1eccf28SAndroid Build Coastguard Worker RsSurfaceConfig mUserSurfaceConfig; 111*e1eccf28SAndroid Build Coastguard Worker 112*e1eccf28SAndroid Build Coastguard Worker ElementState mStateElement; 113*e1eccf28SAndroid Build Coastguard Worker TypeState mStateType; 114*e1eccf28SAndroid Build Coastguard Worker SamplerState mStateSampler; 115*e1eccf28SAndroid Build Coastguard Worker isSynchronous()116*e1eccf28SAndroid Build Coastguard Worker bool isSynchronous() {return mSynchronous;} 117*e1eccf28SAndroid Build Coastguard Worker bool setupCheck(); 118*e1eccf28SAndroid Build Coastguard Worker 119*e1eccf28SAndroid Build Coastguard Worker #if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB) 120*e1eccf28SAndroid Build Coastguard Worker FBOCache mFBOCache; 121*e1eccf28SAndroid Build Coastguard Worker ProgramFragmentState mStateFragment; 122*e1eccf28SAndroid Build Coastguard Worker ProgramStoreState mStateFragmentStore; 123*e1eccf28SAndroid Build Coastguard Worker ProgramRasterState mStateRaster; 124*e1eccf28SAndroid Build Coastguard Worker ProgramVertexState mStateVertex; 125*e1eccf28SAndroid Build Coastguard Worker FontState mStateFont; 126*e1eccf28SAndroid Build Coastguard Worker 127*e1eccf28SAndroid Build Coastguard Worker 128*e1eccf28SAndroid Build Coastguard Worker void swapBuffers(); 129*e1eccf28SAndroid Build Coastguard Worker void setRootScript(Script *); 130*e1eccf28SAndroid Build Coastguard Worker void setProgramRaster(ProgramRaster *); 131*e1eccf28SAndroid Build Coastguard Worker void setProgramVertex(ProgramVertex *); 132*e1eccf28SAndroid Build Coastguard Worker void setProgramFragment(ProgramFragment *); 133*e1eccf28SAndroid Build Coastguard Worker void setProgramStore(ProgramStore *); 134*e1eccf28SAndroid Build Coastguard Worker void setFont(Font *); 135*e1eccf28SAndroid Build Coastguard Worker 136*e1eccf28SAndroid Build Coastguard Worker void updateSurface(void *sur); 137*e1eccf28SAndroid Build Coastguard Worker getProgramFragment()138*e1eccf28SAndroid Build Coastguard Worker ProgramFragment * getProgramFragment() {return mFragment.get();} getProgramStore()139*e1eccf28SAndroid Build Coastguard Worker ProgramStore * getProgramStore() {return mFragmentStore.get();} getProgramRaster()140*e1eccf28SAndroid Build Coastguard Worker ProgramRaster * getProgramRaster() {return mRaster.get();} getProgramVertex()141*e1eccf28SAndroid Build Coastguard Worker ProgramVertex * getProgramVertex() {return mVertex.get();} getFont()142*e1eccf28SAndroid Build Coastguard Worker Font * getFont() {return mFont.get();} 143*e1eccf28SAndroid Build Coastguard Worker 144*e1eccf28SAndroid Build Coastguard Worker void setupProgramStore(); 145*e1eccf28SAndroid Build Coastguard Worker 146*e1eccf28SAndroid Build Coastguard Worker void pause(); 147*e1eccf28SAndroid Build Coastguard Worker void resume(); 148*e1eccf28SAndroid Build Coastguard Worker void setSurface(uint32_t w, uint32_t h, RsNativeWindow sur); 149*e1eccf28SAndroid Build Coastguard Worker #endif 150*e1eccf28SAndroid Build Coastguard Worker void finish(); 151*e1eccf28SAndroid Build Coastguard Worker 152*e1eccf28SAndroid Build Coastguard Worker void setPriority(int32_t p); 153*e1eccf28SAndroid Build Coastguard Worker void destroyWorkerThreadResources(); 154*e1eccf28SAndroid Build Coastguard Worker 155*e1eccf28SAndroid Build Coastguard Worker void assignName(ObjectBase *obj, const char *name, uint32_t len); 156*e1eccf28SAndroid Build Coastguard Worker void removeName(ObjectBase *obj); 157*e1eccf28SAndroid Build Coastguard Worker 158*e1eccf28SAndroid Build Coastguard Worker RsMessageToClientType peekMessageToClient(size_t *receiveLen, uint32_t *subID); 159*e1eccf28SAndroid Build Coastguard Worker RsMessageToClientType getMessageToClient(void *data, size_t *receiveLen, uint32_t *subID, size_t bufferLen); 160*e1eccf28SAndroid Build Coastguard Worker bool sendMessageToClient(const void *data, RsMessageToClientType cmdID, uint32_t subID, size_t len, bool waitForSpace) const; 161*e1eccf28SAndroid Build Coastguard Worker uint32_t runScript(Script *s); 162*e1eccf28SAndroid Build Coastguard Worker 163*e1eccf28SAndroid Build Coastguard Worker void initToClient(); 164*e1eccf28SAndroid Build Coastguard Worker void deinitToClient(); 165*e1eccf28SAndroid Build Coastguard Worker 166*e1eccf28SAndroid Build Coastguard Worker #if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB) getDefaultProgramFragment()167*e1eccf28SAndroid Build Coastguard Worker ProgramFragment * getDefaultProgramFragment() const { 168*e1eccf28SAndroid Build Coastguard Worker return mStateFragment.mDefault.get(); 169*e1eccf28SAndroid Build Coastguard Worker } getDefaultProgramVertex()170*e1eccf28SAndroid Build Coastguard Worker ProgramVertex * getDefaultProgramVertex() const { 171*e1eccf28SAndroid Build Coastguard Worker return mStateVertex.mDefault.get(); 172*e1eccf28SAndroid Build Coastguard Worker } getDefaultProgramStore()173*e1eccf28SAndroid Build Coastguard Worker ProgramStore * getDefaultProgramStore() const { 174*e1eccf28SAndroid Build Coastguard Worker return mStateFragmentStore.mDefault.get(); 175*e1eccf28SAndroid Build Coastguard Worker } getDefaultProgramRaster()176*e1eccf28SAndroid Build Coastguard Worker ProgramRaster * getDefaultProgramRaster() const { 177*e1eccf28SAndroid Build Coastguard Worker return mStateRaster.mDefault.get(); 178*e1eccf28SAndroid Build Coastguard Worker } getDefaultFont()179*e1eccf28SAndroid Build Coastguard Worker Font* getDefaultFont() const { 180*e1eccf28SAndroid Build Coastguard Worker return mStateFont.mDefault.get(); 181*e1eccf28SAndroid Build Coastguard Worker } 182*e1eccf28SAndroid Build Coastguard Worker getWidth()183*e1eccf28SAndroid Build Coastguard Worker uint32_t getWidth() const {return mWidth;} getHeight()184*e1eccf28SAndroid Build Coastguard Worker uint32_t getHeight() const {return mHeight;} 185*e1eccf28SAndroid Build Coastguard Worker 186*e1eccf28SAndroid Build Coastguard Worker uint32_t getCurrentSurfaceWidth() const; 187*e1eccf28SAndroid Build Coastguard Worker uint32_t getCurrentSurfaceHeight() const; 188*e1eccf28SAndroid Build Coastguard Worker setWatchdogGL(const char * cmd,uint32_t line,const char * file)189*e1eccf28SAndroid Build Coastguard Worker void setWatchdogGL(const char *cmd, uint32_t line, const char *file) const { 190*e1eccf28SAndroid Build Coastguard Worker watchdog.command = cmd; 191*e1eccf28SAndroid Build Coastguard Worker watchdog.file = file; 192*e1eccf28SAndroid Build Coastguard Worker watchdog.line = line; 193*e1eccf28SAndroid Build Coastguard Worker } 194*e1eccf28SAndroid Build Coastguard Worker #endif 195*e1eccf28SAndroid Build Coastguard Worker 196*e1eccf28SAndroid Build Coastguard Worker mutable ThreadIO mIO; 197*e1eccf28SAndroid Build Coastguard Worker 198*e1eccf28SAndroid Build Coastguard Worker // Timers 199*e1eccf28SAndroid Build Coastguard Worker enum Timers { 200*e1eccf28SAndroid Build Coastguard Worker RS_TIMER_IDLE, 201*e1eccf28SAndroid Build Coastguard Worker RS_TIMER_INTERNAL, 202*e1eccf28SAndroid Build Coastguard Worker RS_TIMER_SCRIPT, 203*e1eccf28SAndroid Build Coastguard Worker RS_TIMER_CLEAR_SWAP, 204*e1eccf28SAndroid Build Coastguard Worker _RS_TIMER_TOTAL 205*e1eccf28SAndroid Build Coastguard Worker }; 206*e1eccf28SAndroid Build Coastguard Worker uint64_t getTime() const; 207*e1eccf28SAndroid Build Coastguard Worker void timerInit(); 208*e1eccf28SAndroid Build Coastguard Worker void timerReset(); 209*e1eccf28SAndroid Build Coastguard Worker void timerSet(Timers); 210*e1eccf28SAndroid Build Coastguard Worker void timerPrint(); 211*e1eccf28SAndroid Build Coastguard Worker void timerFrame(); 212*e1eccf28SAndroid Build Coastguard Worker 213*e1eccf28SAndroid Build Coastguard Worker struct { 214*e1eccf28SAndroid Build Coastguard Worker bool mLogTimes; 215*e1eccf28SAndroid Build Coastguard Worker bool mLogScripts; 216*e1eccf28SAndroid Build Coastguard Worker bool mLogShaders; 217*e1eccf28SAndroid Build Coastguard Worker bool mLogShadersAttr; 218*e1eccf28SAndroid Build Coastguard Worker bool mLogShadersUniforms; 219*e1eccf28SAndroid Build Coastguard Worker bool mLogVisual; 220*e1eccf28SAndroid Build Coastguard Worker uint32_t mLogReduce; 221*e1eccf28SAndroid Build Coastguard Worker bool mDebugReduceSplitAccum; 222*e1eccf28SAndroid Build Coastguard Worker uint32_t mDebugMaxThreads; 223*e1eccf28SAndroid Build Coastguard Worker } props; 224*e1eccf28SAndroid Build Coastguard Worker 225*e1eccf28SAndroid Build Coastguard Worker mutable struct { 226*e1eccf28SAndroid Build Coastguard Worker bool inRoot; 227*e1eccf28SAndroid Build Coastguard Worker const char *command; 228*e1eccf28SAndroid Build Coastguard Worker const char *file; 229*e1eccf28SAndroid Build Coastguard Worker uint32_t line; 230*e1eccf28SAndroid Build Coastguard Worker } watchdog; 231*e1eccf28SAndroid Build Coastguard Worker static void printWatchdogInfo(void *ctx); 232*e1eccf28SAndroid Build Coastguard Worker 233*e1eccf28SAndroid Build Coastguard Worker void dumpDebug() const; 234*e1eccf28SAndroid Build Coastguard Worker void setError(RsError e, const char *msg = nullptr) const; 235*e1eccf28SAndroid Build Coastguard Worker 236*e1eccf28SAndroid Build Coastguard Worker mutable const ObjectBase * mObjHead; 237*e1eccf28SAndroid Build Coastguard Worker getDPI()238*e1eccf28SAndroid Build Coastguard Worker uint32_t getDPI() const {return mDPI;} setDPI(uint32_t dpi)239*e1eccf28SAndroid Build Coastguard Worker void setDPI(uint32_t dpi) {mDPI = dpi;} 240*e1eccf28SAndroid Build Coastguard Worker getTargetSdkVersion()241*e1eccf28SAndroid Build Coastguard Worker uint32_t getTargetSdkVersion() const {return mTargetSdkVersion;} setTargetSdkVersion(uint32_t sdkVer)242*e1eccf28SAndroid Build Coastguard Worker void setTargetSdkVersion(uint32_t sdkVer) {mTargetSdkVersion = sdkVer;} 243*e1eccf28SAndroid Build Coastguard Worker getContextType()244*e1eccf28SAndroid Build Coastguard Worker RsContextType getContextType() const { return mContextType; } setContextType(RsContextType ct)245*e1eccf28SAndroid Build Coastguard Worker void setContextType(RsContextType ct) { mContextType = ct; } 246*e1eccf28SAndroid Build Coastguard Worker 247*e1eccf28SAndroid Build Coastguard Worker // Check for Fatal errors 248*e1eccf28SAndroid Build Coastguard Worker // Should be used to prevent work from being launched 249*e1eccf28SAndroid Build Coastguard Worker // which could take the process down. Maximizes the chance 250*e1eccf28SAndroid Build Coastguard Worker // the process lives long enough to get the error to the developer hadFatalError()251*e1eccf28SAndroid Build Coastguard Worker bool hadFatalError() {return mFatalErrorOccured;} 252*e1eccf28SAndroid Build Coastguard Worker getOptLevel()253*e1eccf28SAndroid Build Coastguard Worker uint32_t getOptLevel() const { return mOptLevel; } setOptLevel(uint32_t optLevel)254*e1eccf28SAndroid Build Coastguard Worker void setOptLevel(uint32_t optLevel) { mOptLevel = optLevel; } 255*e1eccf28SAndroid Build Coastguard Worker 256*e1eccf28SAndroid Build Coastguard Worker Device *mDev; 257*e1eccf28SAndroid Build Coastguard Worker 258*e1eccf28SAndroid Build Coastguard Worker #ifdef RS_COMPATIBILITY_LIB setNativeLibDir(const char * libDir,uint32_t length)259*e1eccf28SAndroid Build Coastguard Worker void setNativeLibDir(const char * libDir, uint32_t length) { 260*e1eccf28SAndroid Build Coastguard Worker if (!hasSetNativeLibDir) { 261*e1eccf28SAndroid Build Coastguard Worker if (length <= PATH_MAX) { 262*e1eccf28SAndroid Build Coastguard Worker memcpy(nativeLibDir, libDir, length); 263*e1eccf28SAndroid Build Coastguard Worker nativeLibDir[length] = 0; 264*e1eccf28SAndroid Build Coastguard Worker hasSetNativeLibDir = true; 265*e1eccf28SAndroid Build Coastguard Worker } else { 266*e1eccf28SAndroid Build Coastguard Worker setError(RS_ERROR_BAD_VALUE, "Invalid path"); 267*e1eccf28SAndroid Build Coastguard Worker } 268*e1eccf28SAndroid Build Coastguard Worker } 269*e1eccf28SAndroid Build Coastguard Worker } getNativeLibDir()270*e1eccf28SAndroid Build Coastguard Worker const char * getNativeLibDir() { 271*e1eccf28SAndroid Build Coastguard Worker return nativeLibDir; 272*e1eccf28SAndroid Build Coastguard Worker } 273*e1eccf28SAndroid Build Coastguard Worker #endif 274*e1eccf28SAndroid Build Coastguard Worker 275*e1eccf28SAndroid Build Coastguard Worker void setCacheDir(const char * cacheDir_arg, uint32_t length); getCacheDir()276*e1eccf28SAndroid Build Coastguard Worker const char * getCacheDir() { 277*e1eccf28SAndroid Build Coastguard Worker if (hasSetCacheDir) { 278*e1eccf28SAndroid Build Coastguard Worker return mCacheDir; 279*e1eccf28SAndroid Build Coastguard Worker } 280*e1eccf28SAndroid Build Coastguard Worker return nullptr; 281*e1eccf28SAndroid Build Coastguard Worker } 282*e1eccf28SAndroid Build Coastguard Worker 283*e1eccf28SAndroid Build Coastguard Worker // Returns the actual loaded driver's name (like "libRSDriver.so"). getDriverName()284*e1eccf28SAndroid Build Coastguard Worker const char * getDriverName() { 285*e1eccf28SAndroid Build Coastguard Worker return mDriverName; 286*e1eccf28SAndroid Build Coastguard Worker } 287*e1eccf28SAndroid Build Coastguard Worker 288*e1eccf28SAndroid Build Coastguard Worker // Set a new driver name, should be called from within 289*e1eccf28SAndroid Build Coastguard Worker // rsdHalInit in order to alter default behaviour. setDriverName(const char * name)290*e1eccf28SAndroid Build Coastguard Worker void setDriverName(const char * name) { 291*e1eccf28SAndroid Build Coastguard Worker if (!mDriverName) { 292*e1eccf28SAndroid Build Coastguard Worker mDriverName = name; 293*e1eccf28SAndroid Build Coastguard Worker } 294*e1eccf28SAndroid Build Coastguard Worker } 295*e1eccf28SAndroid Build Coastguard Worker 296*e1eccf28SAndroid Build Coastguard Worker protected: 297*e1eccf28SAndroid Build Coastguard Worker 298*e1eccf28SAndroid Build Coastguard Worker uint32_t mTargetSdkVersion; 299*e1eccf28SAndroid Build Coastguard Worker uint32_t mDPI; 300*e1eccf28SAndroid Build Coastguard Worker uint32_t mWidth; 301*e1eccf28SAndroid Build Coastguard Worker uint32_t mHeight; 302*e1eccf28SAndroid Build Coastguard Worker int32_t mThreadPriority; 303*e1eccf28SAndroid Build Coastguard Worker bool mIsGraphicsContext; 304*e1eccf28SAndroid Build Coastguard Worker 305*e1eccf28SAndroid Build Coastguard Worker bool mForceRSoV; 306*e1eccf28SAndroid Build Coastguard Worker bool mForceCpu; 307*e1eccf28SAndroid Build Coastguard Worker 308*e1eccf28SAndroid Build Coastguard Worker RsContextType mContextType; 309*e1eccf28SAndroid Build Coastguard Worker uint32_t mOptLevel; 310*e1eccf28SAndroid Build Coastguard Worker 311*e1eccf28SAndroid Build Coastguard Worker bool mRunning; 312*e1eccf28SAndroid Build Coastguard Worker bool mExit; 313*e1eccf28SAndroid Build Coastguard Worker bool mPaused; 314*e1eccf28SAndroid Build Coastguard Worker mutable bool mFatalErrorOccured; 315*e1eccf28SAndroid Build Coastguard Worker mutable RsError mError; 316*e1eccf28SAndroid Build Coastguard Worker 317*e1eccf28SAndroid Build Coastguard Worker 318*e1eccf28SAndroid Build Coastguard Worker pthread_t mThreadId; 319*e1eccf28SAndroid Build Coastguard Worker pid_t mNativeThreadId; 320*e1eccf28SAndroid Build Coastguard Worker 321*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<Script> mRootScript; 322*e1eccf28SAndroid Build Coastguard Worker #if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB) 323*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<ProgramFragment> mFragment; 324*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<ProgramVertex> mVertex; 325*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<ProgramStore> mFragmentStore; 326*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<ProgramRaster> mRaster; 327*e1eccf28SAndroid Build Coastguard Worker ObjectBaseRef<Font> mFont; 328*e1eccf28SAndroid Build Coastguard Worker #endif 329*e1eccf28SAndroid Build Coastguard Worker 330*e1eccf28SAndroid Build Coastguard Worker void displayDebugStats(); 331*e1eccf28SAndroid Build Coastguard Worker 332*e1eccf28SAndroid Build Coastguard Worker private: 333*e1eccf28SAndroid Build Coastguard Worker Context(); 334*e1eccf28SAndroid Build Coastguard Worker bool initContext(Device *, const RsSurfaceConfig *sc); 335*e1eccf28SAndroid Build Coastguard Worker bool mSynchronous; 336*e1eccf28SAndroid Build Coastguard Worker bool initGLThread(); 337*e1eccf28SAndroid Build Coastguard Worker void deinitEGL(); 338*e1eccf28SAndroid Build Coastguard Worker 339*e1eccf28SAndroid Build Coastguard Worker uint32_t runRootScript(); 340*e1eccf28SAndroid Build Coastguard Worker 341*e1eccf28SAndroid Build Coastguard Worker bool loadRuntime(const char* filename); 342*e1eccf28SAndroid Build Coastguard Worker // Loads the driver. 343*e1eccf28SAndroid Build Coastguard Worker // forceDefault: If true, loads the default CPU driver. 344*e1eccf28SAndroid Build Coastguard Worker // forceRSoV: If true, overrides forceDefault and loads the RSoV driver. 345*e1eccf28SAndroid Build Coastguard Worker bool loadDriver(bool forceDefault, bool forceRSoV); 346*e1eccf28SAndroid Build Coastguard Worker static void * threadProc(void *); 347*e1eccf28SAndroid Build Coastguard Worker static void * helperThreadProc(void *); 348*e1eccf28SAndroid Build Coastguard Worker 349*e1eccf28SAndroid Build Coastguard Worker bool mHasSurface; 350*e1eccf28SAndroid Build Coastguard Worker bool mIsContextLite; 351*e1eccf28SAndroid Build Coastguard Worker 352*e1eccf28SAndroid Build Coastguard Worker // This holds the name of the driver (like "libRSDriver.so"). 353*e1eccf28SAndroid Build Coastguard Worker // Since this is always just a static string, we don't have to 354*e1eccf28SAndroid Build Coastguard Worker // allocate, copy, or free any memory here. 355*e1eccf28SAndroid Build Coastguard Worker const char* mDriverName; 356*e1eccf28SAndroid Build Coastguard Worker const char* mVendorDriverName; 357*e1eccf28SAndroid Build Coastguard Worker 358*e1eccf28SAndroid Build Coastguard Worker std::vector<ObjectBase *> mNames; 359*e1eccf28SAndroid Build Coastguard Worker 360*e1eccf28SAndroid Build Coastguard Worker // Sync fence id for Graphic API, default value -1. 361*e1eccf28SAndroid Build Coastguard Worker int32_t mSyncFd = -1; 362*e1eccf28SAndroid Build Coastguard Worker uint64_t mTimers[_RS_TIMER_TOTAL]; 363*e1eccf28SAndroid Build Coastguard Worker Timers mTimerActive; 364*e1eccf28SAndroid Build Coastguard Worker uint64_t mTimeLast; 365*e1eccf28SAndroid Build Coastguard Worker uint64_t mTimeFrame; 366*e1eccf28SAndroid Build Coastguard Worker uint64_t mTimeLastFrame; 367*e1eccf28SAndroid Build Coastguard Worker uint32_t mTimeMSLastFrame; 368*e1eccf28SAndroid Build Coastguard Worker uint32_t mTimeMSLastScript; 369*e1eccf28SAndroid Build Coastguard Worker uint32_t mTimeMSLastSwap; 370*e1eccf28SAndroid Build Coastguard Worker uint32_t mAverageFPSFrameCount; 371*e1eccf28SAndroid Build Coastguard Worker uint64_t mAverageFPSStartTime; 372*e1eccf28SAndroid Build Coastguard Worker uint32_t mAverageFPS; 373*e1eccf28SAndroid Build Coastguard Worker #ifdef RS_COMPATIBILITY_LIB 374*e1eccf28SAndroid Build Coastguard Worker bool hasSetNativeLibDir = false; 375*e1eccf28SAndroid Build Coastguard Worker char nativeLibDir[PATH_MAX+1]; 376*e1eccf28SAndroid Build Coastguard Worker #endif 377*e1eccf28SAndroid Build Coastguard Worker bool hasSetCacheDir = false; 378*e1eccf28SAndroid Build Coastguard Worker char mCacheDir[PATH_MAX+1]; 379*e1eccf28SAndroid Build Coastguard Worker }; 380*e1eccf28SAndroid Build Coastguard Worker 381*e1eccf28SAndroid Build Coastguard Worker void LF_ObjDestroy_handcode(const Context *rsc, RsAsyncVoidPtr objPtr); 382*e1eccf28SAndroid Build Coastguard Worker 383*e1eccf28SAndroid Build Coastguard Worker } // namespace renderscript 384*e1eccf28SAndroid Build Coastguard Worker } // namespace android 385*e1eccf28SAndroid Build Coastguard Worker #endif 386