rsContext.h revision add9d9633205f76cc34f04368b8482c2c369ba63
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/* 2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2009 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" 21c1d726c2d62424867ec14f2cde16b00fe0ddfee1Jason Sams#include "rsMutex.h" 22399bfce299210ef9c2fc1e932202223253e2384aJason Sams 23bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams#include "rsThreadIO.h" 24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsType.h" 25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsMatrix.h" 26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAllocation.h" 277c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams#include "rsMesh.h" 28d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsDevice.h" 29d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsScriptC.h" 30d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAllocation.h" 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAdapter.h" 32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsSampler.h" 339b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk#include "rsFont.h" 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramFragment.h" 3554db59c3594e887a412a24713fc3daa1c2404593Jason Sams#include "rsProgramStore.h" 36ebfb436a49673693b98469683451bd9ede797557Jason Sams#include "rsProgramRaster.h" 37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramVertex.h" 38bb51c40d89c7dbdee7d7507fdfe0a64e8f4f87a9Jason Sams#include "rsShaderCache.h" 39bb51c40d89c7dbdee7d7507fdfe0a64e8f4f87a9Jason Sams#include "rsVertexArray.h" 40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsgApiStructs.h" 42d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsLocklessFifo.h" 43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 445cbb940cf6b1fd2b44d66bc40e5c3e8429bbd741Mathias Agopian#include <ui/egl/android_natives.h> 45d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 47d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android { 48000479f9e325b4e426a67033abd92d47da412725Mathias Agopian 49d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript { 50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 51f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#if 0 52f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#define CHECK_OBJ(o) { \ 53f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams GET_TLS(); \ 54ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk if (!ObjectBase::isValid(rsc, (const ObjectBase *)o)) { \ 55f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams LOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__); \ 56f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams } \ 57f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams} 58f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#define CHECK_OBJ_OR_NULL(o) { \ 59f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams GET_TLS(); \ 60ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk if (o && !ObjectBase::isValid(rsc, (const ObjectBase *)o)) { \ 61f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams LOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__); \ 62f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams } \ 63f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams} 64f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#else 65f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#define CHECK_OBJ(o) 66f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#define CHECK_OBJ_OR_NULL(o) 67f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams#endif 68f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams 69ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchoukclass Context { 70d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic: 71d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams static Context * createContext(Device *, const RsSurfaceConfig *sc); 72d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ~Context(); 73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 74462d11b880cba72584c135397c0a82618ab63217Jason Sams static pthread_key_t gThreadTLSKey; 7541c19db90e250e2b7cb438904f0e96a0ef455d6dJason Sams static uint32_t gThreadTLSKeyCount; 767136220b54e68e0c7faac30577ed20b7482481fdJason Sams static uint32_t gGLContextCount; 7741c19db90e250e2b7cb438904f0e96a0ef455d6dJason Sams static pthread_mutex_t gInitMutex; 7841c19db90e250e2b7cb438904f0e96a0ef455d6dJason Sams 79462d11b880cba72584c135397c0a82618ab63217Jason Sams struct ScriptTLSStruct { 80462d11b880cba72584c135397c0a82618ab63217Jason Sams Context * mContext; 81462d11b880cba72584c135397c0a82618ab63217Jason Sams Script * mScript; 82462d11b880cba72584c135397c0a82618ab63217Jason Sams }; 83a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams 84a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams class PushState { 85a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams public: 86a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams PushState(Context *); 87a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ~PushState(); 88a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams 89a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams private: 90a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ObjectBaseRef<ProgramFragment> mFragment; 91a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ObjectBaseRef<ProgramVertex> mVertex; 92a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ObjectBaseRef<ProgramStore> mStore; 93a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ObjectBaseRef<ProgramRaster> mRaster; 94a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ObjectBaseRef<Font> mFont; 95a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams Context *mRsc; 96a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams }; 97a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams 98f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams ScriptTLSStruct *mTlsStruct; 9911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams RsSurfaceConfig mUserSurfaceConfig; 100462d11b880cba72584c135397c0a82618ab63217Jason Sams 1018e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams typedef void (*WorkerCallback_t)(void *usr, uint32_t idx); 102d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 103d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams //StructuredAllocationContext mStateAllocation; 104d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ElementState mStateElement; 105d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams TypeState mStateType; 106d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams SamplerState mStateSampler; 107d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ProgramFragmentState mStateFragment; 10854db59c3594e887a412a24713fc3daa1c2404593Jason Sams ProgramStoreState mStateFragmentStore; 109ebfb436a49673693b98469683451bd9ede797557Jason Sams ProgramRasterState mStateRaster; 110d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ProgramVertexState mStateVertex; 111bb51c40d89c7dbdee7d7507fdfe0a64e8f4f87a9Jason Sams VertexArrayState mStateVertexArray; 1129b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk FontState mStateFont; 113d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 114d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ScriptCState mScriptC; 115bb51c40d89c7dbdee7d7507fdfe0a64e8f4f87a9Jason Sams ShaderCache mShaderCache; 116d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 117d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void swapBuffers(); 118d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setRootScript(Script *); 119a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams void setProgramRaster(ProgramRaster *); 120a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams void setProgramVertex(ProgramVertex *); 121a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams void setProgramFragment(ProgramFragment *); 122a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams void setProgramStore(ProgramStore *); 1239b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk void setFont(Font *); 124d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 125d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void updateSurface(void *sur); 126d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 127a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ProgramFragment * getProgramFragment() {return mFragment.get();} 128a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ProgramStore * getProgramStore() {return mFragmentStore.get();} 129a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ProgramRaster * getProgramRaster() {return mRaster.get();} 130a17af04e62a3f40f729e7ebb8bd868d192e18405Jason Sams ProgramVertex * getProgramVertex() {return mVertex.get();} 1319b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk Font * getFont() {return mFont.get();} 132d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 133156cce698093023d9e79a4ff4fb96f4e4d3019dbJason Sams bool setupCheck(); 134feede2aee6fe3e721ee71ffc35b277f1d9260e03Alex Sakhartchouk void setupProgramStore(); 1353b7d39bb51f851ddee441fa34884495217e477f9Jason Sams bool checkDriver() const {return mEGL.mSurface != 0;} 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); 14165e7aa56f56097418d617663683544c25b3988eaJason Sams 142d5680f9ba95ec7ce212e8025774914e79982a1eeJason Sams void assignName(ObjectBase *obj, const char *name, uint32_t len); 1433eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams void removeName(ObjectBase *obj); 1449c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams 1451c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams RsMessageToClientType peekMessageToClient(size_t *receiveLen, uint32_t *subID, bool wait); 1461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams RsMessageToClientType getMessageToClient(void *data, size_t *receiveLen, uint32_t *subID, size_t bufferLen, bool wait); 147add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams bool sendMessageToClient(const void *data, RsMessageToClientType cmdID, uint32_t subID, size_t len, bool waitForSpace) const; 148f17bccc9050498f51a32a2ee78f5d5a306008e3dJason Sams uint32_t runScript(Script *s); 149516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 150516c31911578db8ce53529483c3ded918ac7dc6bJason Sams void initToClient(); 151516c31911578db8ce53529483c3ded918ac7dc6bJason Sams void deinitToClient(); 152516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 1539c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams ProgramFragment * getDefaultProgramFragment() const { 1549c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams return mStateFragment.mDefault.get(); 1559c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams } 1569c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams ProgramVertex * getDefaultProgramVertex() const { 1579c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams return mStateVertex.mDefault.get(); 1589c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams } 15954db59c3594e887a412a24713fc3daa1c2404593Jason Sams ProgramStore * getDefaultProgramStore() const { 1609c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams return mStateFragmentStore.mDefault.get(); 1619c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams } 162ebfb436a49673693b98469683451bd9ede797557Jason Sams ProgramRaster * getDefaultProgramRaster() const { 163ebfb436a49673693b98469683451bd9ede797557Jason Sams return mStateRaster.mDefault.get(); 164ebfb436a49673693b98469683451bd9ede797557Jason Sams } 1659b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk Font* getDefaultFont() const { 1669b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk return mStateFont.mDefault.get(); 1679b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk } 1689c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams 169f603d212552485c634e25f3556f847dc2b022bd5Jason Sams uint32_t getWidth() const {return mWidth;} 170f603d212552485c634e25f3556f847dc2b022bd5Jason Sams uint32_t getHeight() const {return mHeight;} 17140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams 172add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams mutable ThreadIO mIO; 173bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams 174f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams // Timers 175f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams enum Timers { 176f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams RS_TIMER_IDLE, 177f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams RS_TIMER_INTERNAL, 178f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams RS_TIMER_SCRIPT, 179f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams RS_TIMER_CLEAR_SWAP, 180f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams _RS_TIMER_TOTAL 181f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams }; 182f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams uint64_t getTime() const; 183f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams void timerInit(); 184f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams void timerReset(); 185f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams void timerSet(Timers); 186f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams void timerPrint(); 1872525a815220652b37e2e390fe8c62394a6d0e574Jason Sams void timerFrame(); 188f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams 18966b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams struct { 19066b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams bool mLogTimes; 19166b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams bool mLogScripts; 19266b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams bool mLogObjects; 1935dad8b4d1fda37b7b4763ef7361c5eb92131cb7eJason Sams bool mLogShaders; 1944378f1175546616c76ecb7f0b1159940ab22d5f4Alex Sakhartchouk bool mLogShadersAttr; 1954378f1175546616c76ecb7f0b1159940ab22d5f4Alex Sakhartchouk bool mLogShadersUniforms; 1966de555001bc9b3ea6baf8ce1293e6c366a9bd6ceAlex Sakhartchouk bool mLogVisual; 19766b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams } props; 1989ac2c66f0171593113238635c6a7921c41215e77Joe Onorato 1999dab667e03632181e487a04a8a170b3fa0bd5037Jason Sams void dumpDebug() const; 200add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams void checkError(const char *, bool isFatal = false) const; 201add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams void setError(RsError e, const char *msg = NULL) const; 2029dab667e03632181e487a04a8a170b3fa0bd5037Jason Sams 203a9e7a05b84470257637c97d65f6562aa832c66efJason Sams mutable const ObjectBase * mObjHead; 204a9e7a05b84470257637c97d65f6562aa832c66efJason Sams 2052978bfc6ad79c8f1138d34a704ce5b3d3d70d2c1Jason Sams bool ext_OES_texture_npot() const {return mGL.OES_texture_npot;} 206581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk bool ext_GL_NV_texture_npot_2D_mipmap() const {return mGL.GL_NV_texture_npot_2D_mipmap;} 2074378f1175546616c76ecb7f0b1159940ab22d5f4Alex Sakhartchouk float ext_texture_max_aniso() const {return mGL.EXT_texture_max_aniso; } 208b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk uint32_t getMaxFragmentTextures() const {return mGL.mMaxFragmentTextureImageUnits;} 209b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk uint32_t getMaxFragmentUniformVectors() const {return mGL.mMaxFragmentUniformVectors;} 210b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk uint32_t getMaxVertexUniformVectors() const {return mGL.mMaxVertexUniformVectors;} 2112978bfc6ad79c8f1138d34a704ce5b3d3d70d2c1Jason Sams 2128e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams void launchThreads(WorkerCallback_t cbk, void *data); 213f3470edc8a929d73797789656ce840aff918dcd0Jason Sams uint32_t getWorkerPoolSize() const {return (uint32_t)mWorkers.mCount;} 2148e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams 215d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprotected: 216d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Device *mDev; 217d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 218b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams struct { 219b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams EGLint mNumConfigs; 220b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams EGLint mMajorVersion; 221b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams EGLint mMinorVersion; 222b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams EGLConfig mConfig; 223b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams EGLContext mContext; 224b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams EGLSurface mSurface; 22511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams EGLSurface mSurfaceDefault; 226b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams EGLDisplay mDisplay; 227b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams } mEGL; 228b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams 229b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams struct { 230b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams const uint8_t * mVendor; 231b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams const uint8_t * mRenderer; 232b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams const uint8_t * mVersion; 233b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams const uint8_t * mExtensions; 234b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams 235b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams uint32_t mMajorVersion; 236b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams uint32_t mMinorVersion; 237b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams 2380011bcf57ff711a221a3a4c73f2a79125111647dJason Sams int32_t mMaxVaryingVectors; 2390011bcf57ff711a221a3a4c73f2a79125111647dJason Sams int32_t mMaxTextureImageUnits; 2400011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 2410011bcf57ff711a221a3a4c73f2a79125111647dJason Sams int32_t mMaxFragmentTextureImageUnits; 2420011bcf57ff711a221a3a4c73f2a79125111647dJason Sams int32_t mMaxFragmentUniformVectors; 2430011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 2440011bcf57ff711a221a3a4c73f2a79125111647dJason Sams int32_t mMaxVertexAttribs; 2450011bcf57ff711a221a3a4c73f2a79125111647dJason Sams int32_t mMaxVertexUniformVectors; 2460011bcf57ff711a221a3a4c73f2a79125111647dJason Sams int32_t mMaxVertexTextureUnits; 2472978bfc6ad79c8f1138d34a704ce5b3d3d70d2c1Jason Sams 2482978bfc6ad79c8f1138d34a704ce5b3d3d70d2c1Jason Sams bool OES_texture_npot; 249581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk bool GL_NV_texture_npot_2D_mipmap; 2504378f1175546616c76ecb7f0b1159940ab22d5f4Alex Sakhartchouk float EXT_texture_max_aniso; 251b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams } mGL; 252d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2533bc47d438171dce294e816366d53bc9eca772c5bJason Sams uint32_t mWidth; 2543bc47d438171dce294e816366d53bc9eca772c5bJason Sams uint32_t mHeight; 255b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams int32_t mThreadPriority; 256704ff64b099406bb328898a7443921f22dbffd6dJason Sams bool mIsGraphicsContext; 2573bc47d438171dce294e816366d53bc9eca772c5bJason Sams 258d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams bool mRunning; 259d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams bool mExit; 26065e7aa56f56097418d617663683544c25b3988eaJason Sams bool mPaused; 261add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams mutable RsError mError; 262d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 263d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams pthread_t mThreadId; 2647d787b4722eaeb79cab42c36060336e092b77b5fJason Sams pid_t mNativeThreadId; 265d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 2668e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams struct Workers { 2678e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams volatile int mRunningCount; 2688e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams volatile int mLaunchCount; 2698e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams uint32_t mCount; 2708e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams pthread_t *mThreadId; 2718e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams pid_t *mNativeThreadId; 2728e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams Signal mCompleteSignal; 2738e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams 2748e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams Signal *mLaunchSignals; 2758e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams WorkerCallback_t mLaunchCallback; 2768e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams void *mLaunchData; 2778e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams }; 2788e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams Workers mWorkers; 2798e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams 280d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<Script> mRootScript; 281d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<ProgramFragment> mFragment; 282d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<ProgramVertex> mVertex; 28354db59c3594e887a412a24713fc3daa1c2404593Jason Sams ObjectBaseRef<ProgramStore> mFragmentStore; 284ebfb436a49673693b98469683451bd9ede797557Jason Sams ObjectBaseRef<ProgramRaster> mRaster; 2859b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk ObjectBaseRef<Font> mFont; 286730ee65d4ddb307898053b623120bad1655fadadJason Sams 2876de555001bc9b3ea6baf8ce1293e6c366a9bd6ceAlex Sakhartchouk void displayDebugStats(); 2886de555001bc9b3ea6baf8ce1293e6c366a9bd6ceAlex Sakhartchouk 289d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprivate: 290d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Context(); 291d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams bool initContext(Device *, const RsSurfaceConfig *sc); 292d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 293d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams 294d5f06300341df0990be3e0b7a26fa49b13c6fc19Jason Sams bool initGLThread(); 2957136220b54e68e0c7faac30577ed20b7482481fdJason Sams void deinitEGL(); 296d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 297b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams uint32_t runRootScript(); 298d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 299d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams static void * threadProc(void *); 3008e6c17fcc40bfb2391dcadecb397431239ab8a18Jason Sams static void * helperThreadProc(void *); 301d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 3028b49bd1a2f8117e1c22884f0150e72cbcf838f32Dianne Hackborn ANativeWindow *mWndSurface; 3033eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 3043eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams Vector<ObjectBase *> mNames; 305f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams 306f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams uint64_t mTimers[_RS_TIMER_TOTAL]; 307f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams Timers mTimerActive; 308f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams uint64_t mTimeLast; 3092525a815220652b37e2e390fe8c62394a6d0e574Jason Sams uint64_t mTimeFrame; 3102525a815220652b37e2e390fe8c62394a6d0e574Jason Sams uint64_t mTimeLastFrame; 311b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams uint32_t mTimeMSLastFrame; 312b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams uint32_t mTimeMSLastScript; 313b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams uint32_t mTimeMSLastSwap; 31476322af2a6c109a79431f019dcef6e038c030686Alex Sakhartchouk uint32_t mAverageFPSFrameCount; 31576322af2a6c109a79431f019dcef6e038c030686Alex Sakhartchouk uint64_t mAverageFPSStartTime; 31676322af2a6c109a79431f019dcef6e038c030686Alex Sakhartchouk uint32_t mAverageFPS; 317d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 318d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 319d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 320d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 321d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif 322