rsContext.h revision edbfabdb98a2974f973d6c042e6efd547dc02fc5
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/* 24a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk * Copyright (C) 2011 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_CONTEXT_H 18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define ANDROID_RS_CONTEXT_H 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 20399bfce299210ef9c2fc1e932202223253e2384aJason Sams#include "rsUtils.h" 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsType.h" 22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAllocation.h" 237c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams#include "rsMesh.h" 24d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk 25e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams#include "rs_hal.h" 26e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 27d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk#ifndef ANDROID_RS_SERIALIZE 28d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk#include "rsMutex.h" 29d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk#include "rsThreadIO.h" 30fcf7231249822ff4dae852f1de1f799756689f91Jason Sams#include "rsMatrix4x4.h" 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsDevice.h" 32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsScriptC.h" 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAdapter.h" 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsSampler.h" 359b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk#include "rsFont.h" 36d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramFragment.h" 3754db59c3594e887a412a24713fc3daa1c2404593Jason Sams#include "rsProgramStore.h" 38ebfb436a49673693b98469683451bd9ede797557Jason Sams#include "rsProgramRaster.h" 39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramVertex.h" 408e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk#include "rsFBOCache.h" 41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 42d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsgApiStructs.h" 43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsLocklessFifo.h" 44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 45d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk#endif // ANDROID_RS_SERIALIZE 46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 47407cae950325682a56fe5373dd218a666da901efAlex Sakhartchoukclass ANativeWindow; 48407cae950325682a56fe5373dd218a666da901efAlex Sakhartchouk 49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 50d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android { 51000479f9e325b4e426a67033abd92d47da412725Mathias Agopian 52d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript { 53d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 54f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#if 0 55f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#define CHECK_OBJ(o) { \ 56f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams GET_TLS(); \ 57ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk if (!ObjectBase::isValid(rsc, (const ObjectBase *)o)) { \ 58f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams LOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__); \ 59f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams } \ 60f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams} 61f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#define CHECK_OBJ_OR_NULL(o) { \ 62f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams GET_TLS(); \ 63ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk if (o && !ObjectBase::isValid(rsc, (const ObjectBase *)o)) { \ 64f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams LOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__); \ 65f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams } \ 66f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams} 67f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#else 68f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#define CHECK_OBJ(o) 69f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#define CHECK_OBJ_OR_NULL(o) 70f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#endif 71f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams 72d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk#ifndef ANDROID_RS_SERIALIZE 73d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk 74ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchoukclass Context { 75d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic: 76e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams struct Hal { 77e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams void * drv; 78e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 79e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams RsdHalFunctions funcs; 80e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams }; 81e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams Hal mHal; 82e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams 83d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams static Context * createContext(Device *, const RsSurfaceConfig *sc); 84d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ~Context(); 85d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 8641c19db90e250e2b7cb438904f0e96a0ef455d6dJason Sams static pthread_mutex_t gInitMutex; 871ac9da6717f27ecfd3c650bd1bfd84d336674dfcStephen Hines // Library mutex (for providing thread-safe calls from the runtime) 881ac9da6717f27ecfd3c650bd1bfd84d336674dfcStephen Hines static pthread_mutex_t gLibMutex; 8941c19db90e250e2b7cb438904f0e96a0ef455d6dJason Sams 90a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams class PushState { 91a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams public: 92a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams PushState(Context *); 93a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ~PushState(); 94a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams 95a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams private: 96a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ObjectBaseRef<ProgramFragment> mFragment; 97a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ObjectBaseRef<ProgramVertex> mVertex; 98a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ObjectBaseRef<ProgramStore> mStore; 99a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ObjectBaseRef<ProgramRaster> mRaster; 100a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ObjectBaseRef<Font> mFont; 101a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams Context *mRsc; 102a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams }; 103a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams 10411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams RsSurfaceConfig mUserSurfaceConfig; 105462d11b880cba72584c135397c0a82618ab63217Jason Sams 106d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ElementState mStateElement; 107d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams TypeState mStateType; 108d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams SamplerState mStateSampler; 109d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ProgramFragmentState mStateFragment; 11054db59c3594e887a412a24713fc3daa1c2404593Jason Sams ProgramStoreState mStateFragmentStore; 111ebfb436a49673693b98469683451bd9ede797557Jason Sams ProgramRasterState mStateRaster; 112d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ProgramVertexState mStateVertex; 1139b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk FontState mStateFont; 114d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 115d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ScriptCState mScriptC; 1168e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk FBOCache mFBOCache; 117d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 118d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void swapBuffers(); 119d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setRootScript(Script *); 120a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams void setProgramRaster(ProgramRaster *); 121a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams void setProgramVertex(ProgramVertex *); 122a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams void setProgramFragment(ProgramFragment *); 123a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams void setProgramStore(ProgramStore *); 1249b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk void setFont(Font *); 125d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 126d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void updateSurface(void *sur); 127d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 128a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ProgramFragment * getProgramFragment() {return mFragment.get();} 129a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ProgramStore * getProgramStore() {return mFragmentStore.get();} 130a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ProgramRaster * getProgramRaster() {return mRaster.get();} 131a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ProgramVertex * getProgramVertex() {return mVertex.get();} 1329b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk Font * getFont() {return mFont.get();} 133d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 134156cce698093023d9e79a4ff4fb96f4e4d3019dbJason Sams bool setupCheck(); 135feede2aee6fe3e721ee71ffc35b277f1d9260e03Alex Sakhartchouk void setupProgramStore(); 136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 13765e7aa56f56097418d617663683544c25b3988eaJason Sams void pause(); 13865e7aa56f56097418d617663683544c25b3988eaJason Sams void resume(); 1398b49bd1a2f8117e1c22884f0150e72cbcf838f32Dianne Hackborn void setSurface(uint32_t w, uint32_t h, ANativeWindow *sur); 1407d787b4722eaeb79cab42c36060336e092b77b5fJason Sams void setPriority(int32_t p); 1415c68a712dacf8cf0a419f1b743474a3b4290d024Jason Sams void destroyWorkerThreadResources(); 14265e7aa56f56097418d617663683544c25b3988eaJason Sams 143d5680f9ba95ec7ce212e8025774914e79982a1eeJason Sams void assignName(ObjectBase *obj, const char *name, uint32_t len); 1443eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams void removeName(ObjectBase *obj); 1459c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams 146edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams RsMessageToClientType peekMessageToClient(size_t *receiveLen, uint32_t *subID); 147edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams RsMessageToClientType getMessageToClient(void *data, size_t *receiveLen, uint32_t *subID, size_t bufferLen); 148add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams bool sendMessageToClient(const void *data, RsMessageToClientType cmdID, uint32_t subID, size_t len, bool waitForSpace) const; 149f17bccc9050498f51a32a2ee78f5d5a306008e3dJason Sams uint32_t runScript(Script *s); 150516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 151516c31911578db8ce53529483c3ded918ac7dc6bJason Sams void initToClient(); 152516c31911578db8ce53529483c3ded918ac7dc6bJason Sams void deinitToClient(); 153516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1549c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams ProgramFragment * getDefaultProgramFragment() const { 1559c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams return mStateFragment.mDefault.get(); 1569c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams } 1579c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams ProgramVertex * getDefaultProgramVertex() const { 1589c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams return mStateVertex.mDefault.get(); 1599c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams } 16054db59c3594e887a412a24713fc3daa1c2404593Jason Sams ProgramStore * getDefaultProgramStore() const { 1619c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams return mStateFragmentStore.mDefault.get(); 1629c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams } 163ebfb436a49673693b98469683451bd9ede797557Jason Sams ProgramRaster * getDefaultProgramRaster() const { 164ebfb436a49673693b98469683451bd9ede797557Jason Sams return mStateRaster.mDefault.get(); 165ebfb436a49673693b98469683451bd9ede797557Jason Sams } 1669b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk Font* getDefaultFont() const { 1679b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk return mStateFont.mDefault.get(); 1689b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk } 1699c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams 170f603d212552485c634e25f3556f847dc2b022bd5Jason Sams uint32_t getWidth() const {return mWidth;} 171f603d212552485c634e25f3556f847dc2b022bd5Jason Sams uint32_t getHeight() const {return mHeight;} 17240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams 173add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams mutable ThreadIO mIO; 174bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams 175f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams // Timers 176f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams enum Timers { 177f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams RS_TIMER_IDLE, 178f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams RS_TIMER_INTERNAL, 179f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams RS_TIMER_SCRIPT, 180f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams RS_TIMER_CLEAR_SWAP, 181f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams _RS_TIMER_TOTAL 182f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams }; 183f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams uint64_t getTime() const; 184f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams void timerInit(); 185f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams void timerReset(); 186f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams void timerSet(Timers); 187f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams void timerPrint(); 1882525a815220652b37e2e390fe8c62394a6d0e574Jason Sams void timerFrame(); 189f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams 19066b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams struct { 19166b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams bool mLogTimes; 19266b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams bool mLogScripts; 19366b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams bool mLogObjects; 1945dad8b4d1fda37b7b4763ef7361c5eb92131cb7eJason Sams bool mLogShaders; 1954378f1175546616c76ecb7f0b1159940ab22d5f4Alex Sakhartchouk bool mLogShadersAttr; 1964378f1175546616c76ecb7f0b1159940ab22d5f4Alex Sakhartchouk bool mLogShadersUniforms; 1976de555001bc9b3ea6baf8ce1293e6c366a9bd6ceAlex Sakhartchouk bool mLogVisual; 19866b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams } props; 1999ac2c66f0171593113238635c6a7921c41215e77Joe Onorato 2009dab667e03632181e487a04a8a170b3fa0bd5037Jason Sams void dumpDebug() const; 201add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams void setError(RsError e, const char *msg = NULL) const; 2029dab667e03632181e487a04a8a170b3fa0bd5037Jason Sams 203a9e7a05b84470257637c97d65f6562aa832c66efJason Sams mutable const ObjectBase * mObjHead; 204a9e7a05b84470257637c97d65f6562aa832c66efJason Sams 2052c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk uint32_t getDPI() const {return mDPI;} 2062c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk void setDPI(uint32_t dpi) {mDPI = dpi;} 2078e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams 208d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Device *mDev; 209803626f61526c9271a1ffb27f3e3e0bfce767f41Jason Samsprotected: 210d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2112c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk uint32_t mDPI; 2123bc47d438171dce294e816366d53bc9eca772c5bJason Sams uint32_t mWidth; 2133bc47d438171dce294e816366d53bc9eca772c5bJason Sams uint32_t mHeight; 214b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams int32_t mThreadPriority; 215704ff64b099406bb328898a7443921f22dbffd6dJason Sams bool mIsGraphicsContext; 2163bc47d438171dce294e816366d53bc9eca772c5bJason Sams 217d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams bool mRunning; 218d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams bool mExit; 21965e7aa56f56097418d617663683544c25b3988eaJason Sams bool mPaused; 220add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams mutable RsError mError; 221d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 222d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams pthread_t mThreadId; 2237d787b4722eaeb79cab42c36060336e092b77b5fJason Sams pid_t mNativeThreadId; 224d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 225d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<Script> mRootScript; 226d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<ProgramFragment> mFragment; 227d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<ProgramVertex> mVertex; 22854db59c3594e887a412a24713fc3daa1c2404593Jason Sams ObjectBaseRef<ProgramStore> mFragmentStore; 229ebfb436a49673693b98469683451bd9ede797557Jason Sams ObjectBaseRef<ProgramRaster> mRaster; 2309b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk ObjectBaseRef<Font> mFont; 231730ee65d4ddb307898053b623120bad1655fadadJason Sams 2326de555001bc9b3ea6baf8ce1293e6c366a9bd6ceAlex Sakhartchouk void displayDebugStats(); 2336de555001bc9b3ea6baf8ce1293e6c366a9bd6ceAlex Sakhartchouk 234d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprivate: 235d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Context(); 236d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams bool initContext(Device *, const RsSurfaceConfig *sc); 237d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 238d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams 239d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams bool initGLThread(); 2407136220b54e68e0c7faac30577ed20b7482481fdJason Sams void deinitEGL(); 241d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 242b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams uint32_t runRootScript(); 243d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 244d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams static void * threadProc(void *); 2458e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams static void * helperThreadProc(void *); 246d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2478b49bd1a2f8117e1c22884f0150e72cbcf838f32Dianne Hackborn ANativeWindow *mWndSurface; 2483eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 2493eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams Vector<ObjectBase *> mNames; 250f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams 251f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams uint64_t mTimers[_RS_TIMER_TOTAL]; 252f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams Timers mTimerActive; 253f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams uint64_t mTimeLast; 2542525a815220652b37e2e390fe8c62394a6d0e574Jason Sams uint64_t mTimeFrame; 2552525a815220652b37e2e390fe8c62394a6d0e574Jason Sams uint64_t mTimeLastFrame; 256b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams uint32_t mTimeMSLastFrame; 257b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams uint32_t mTimeMSLastScript; 258b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams uint32_t mTimeMSLastSwap; 25976322af2a6c109a79431f019dcef6e038c030686Alex Sakhartchouk uint32_t mAverageFPSFrameCount; 26076322af2a6c109a79431f019dcef6e038c030686Alex Sakhartchouk uint64_t mAverageFPSStartTime; 26176322af2a6c109a79431f019dcef6e038c030686Alex Sakhartchouk uint32_t mAverageFPS; 262d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 263d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 264d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk#else 265d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk 266d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchoukclass Context { 267d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchoukpublic: 268d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk Context() { 269d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk mObjHead = NULL; 270d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk } 271d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk ~Context() { 272d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk ObjectBase::zeroAllUserRef(this); 273d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk } 274d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk 275d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk ElementState mStateElement; 276d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk TypeState mStateType; 277d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk 278d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk struct { 279d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk bool mLogTimes; 280d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk bool mLogScripts; 281d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk bool mLogObjects; 282d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk bool mLogShaders; 283d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk bool mLogShadersAttr; 284d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk bool mLogShadersUniforms; 285d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk bool mLogVisual; 286d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk } props; 287d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk 288d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk void setError(RsError e, const char *msg = NULL) { } 289d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk 290d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk mutable const ObjectBase * mObjHead; 291d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk 292d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchoukprotected: 293d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk 294d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk}; 295d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk#endif //ANDROID_RS_SERIALIZE 296d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk 297d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk} // renderscript 298d0f5bd130bdbd5b357b7f1db4562fa55e06d384cAlex Sakhartchouk} // android 299d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif 300