rsContext.h revision 0f7785c4542855ad5e22e6b720c6bdad1817ac61
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_RS_CONTEXT_H 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_RS_CONTEXT_H 19ce2baf0d57ee3f1e8a7f07c030595f489407d1ceGilles Debunne 20ce2baf0d57ee3f1e8a7f07c030595f489407d1ceGilles Debunne#include "rsUtils.h" 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsMutex.h" 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsThreadIO.h" 2444c1473c03a0021224fa94af9b1e3579ec244b12Gilles Debunne#include "rsType.h" 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsMatrix.h" 267609764295d1b3ec0b53d1ae536ee0280f5e0407Mike Cleron#include "rsAllocation.h" 2711f4a48c54f3006778c874662ff04a4d9d157f25Jeff Sharkey#include "rsMesh.h" 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsDevice.h" 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsScriptC.h" 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsAllocation.h" 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsAdapter.h" 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsSampler.h" 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsFont.h" 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsProgramFragment.h" 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsProgramStore.h" 368a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov#include "rsProgramRaster.h" 378a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov#include "rsProgramVertex.h" 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsShaderCache.h" 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsVertexArray.h" 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsgApiStructs.h" 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "rsLocklessFifo.h" 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/egl/android_natives.h> 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// --------------------------------------------------------------------------- 4741ec65355bd6ded652769725b276d47c54a0d913Scott Mainnamespace android { 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace renderscript { 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5154ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson#if 0 5254ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson#define CHECK_OBJ(o) { \ 5354ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson GET_TLS(); \ 5454ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson if (!ObjectBase::isValid(rsc, (const ObjectBase *)o)) { \ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__); \ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } \ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define CHECK_OBJ_OR_NULL(o) { \ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GET_TLS(); \ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (o && !ObjectBase::isValid(rsc, (const ObjectBase *)o)) { \ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("Bad object %p at %s, %i", o, __FILE__, __LINE__); \ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } \ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#else 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define CHECK_OBJ(o) 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define CHECK_OBJ_OR_NULL(o) 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Context { 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static Context * createContext(Device *, const RsSurfaceConfig *sc); 7244c1473c03a0021224fa94af9b1e3579ec244b12Gilles Debunne ~Context(); 7344c1473c03a0021224fa94af9b1e3579ec244b12Gilles Debunne 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static pthread_key_t gThreadTLSKey; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static uint32_t gThreadTLSKeyCount; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static uint32_t gGLContextCount; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static pthread_mutex_t gInitMutex; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Library mutex (for providing thread-safe calls from the runtime) 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static pthread_mutex_t gLibMutex; 80617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette 81617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette struct ScriptTLSStruct { 82617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette Context * mContext; 83617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette Script * mScript; 84617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette }; 85617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette 86617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette class PushState { 87617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette public: 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PushState(Context *); 8944c1473c03a0021224fa94af9b1e3579ec244b12Gilles Debunne ~PushState(); 90617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette 91617feb99a06e7ffb3894e86a286bf30e085f321aAlan Viverette private: 9244c1473c03a0021224fa94af9b1e3579ec244b12Gilles Debunne ObjectBaseRef<ProgramFragment> mFragment; 9344c1473c03a0021224fa94af9b1e3579ec244b12Gilles Debunne ObjectBaseRef<ProgramVertex> mVertex; 940e23ab70919739995a2e2612ddd1dfc2ad3bae76Gilles Debunne ObjectBaseRef<ProgramStore> mStore; 950e23ab70919739995a2e2612ddd1dfc2ad3bae76Gilles Debunne ObjectBaseRef<ProgramRaster> mRaster; 9644c1473c03a0021224fa94af9b1e3579ec244b12Gilles Debunne ObjectBaseRef<Font> mFont; 970e23ab70919739995a2e2612ddd1dfc2ad3bae76Gilles Debunne Context *mRsc; 980e23ab70919739995a2e2612ddd1dfc2ad3bae76Gilles Debunne }; 990e23ab70919739995a2e2612ddd1dfc2ad3bae76Gilles Debunne 10044c1473c03a0021224fa94af9b1e3579ec244b12Gilles Debunne ScriptTLSStruct *mTlsStruct; 10144c1473c03a0021224fa94af9b1e3579ec244b12Gilles Debunne RsSurfaceConfig mUserSurfaceConfig; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typedef void (*WorkerCallback_t)(void *usr, uint32_t idx); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1057237c56faea76d43b304562828a443ca766c3c78Romain Guy //StructuredAllocationContext mStateAllocation; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ElementState mStateElement; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypeState mStateType; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SamplerState mStateSampler; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProgramFragmentState mStateFragment; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProgramStoreState mStateFragmentStore; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProgramRasterState mStateRaster; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProgramVertexState mStateVertex; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project VertexArrayState mStateVertexArray; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontState mStateFont; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ScriptCState mScriptC; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ShaderCache mShaderCache; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void swapBuffers(); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setRootScript(Script *); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setProgramRaster(ProgramRaster *); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setProgramVertex(ProgramVertex *); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setProgramFragment(ProgramFragment *); 124982be3be054960fbf254f225b4aeaee0310e619fJack Veenstra void setProgramStore(ProgramStore *); 125982be3be054960fbf254f225b4aeaee0310e619fJack Veenstra void setFont(Font *); 126982be3be054960fbf254f225b4aeaee0310e619fJack Veenstra 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void updateSurface(void *sur); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProgramFragment * getProgramFragment() {return mFragment.get();} 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProgramStore * getProgramStore() {return mFragmentStore.get();} 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProgramRaster * getProgramRaster() {return mRaster.get();} 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProgramVertex * getProgramVertex() {return mVertex.get();} 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Font * getFont() {return mFont.get();} 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool setupCheck(); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setupProgramStore(); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1383730bb1cd59bcfa9f5cad8361997b84113ed5923Evan Millar void pause(); 1393730bb1cd59bcfa9f5cad8361997b84113ed5923Evan Millar void resume(); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setSurface(uint32_t w, uint32_t h, ANativeWindow *sur); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setPriority(int32_t p); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void destroyWorkerThreadResources(); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void assignName(ObjectBase *obj, const char *name, uint32_t len); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void removeName(ObjectBase *obj); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RsMessageToClientType peekMessageToClient(size_t *receiveLen, uint32_t *subID, bool wait); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RsMessageToClientType getMessageToClient(void *data, size_t *receiveLen, uint32_t *subID, size_t bufferLen, bool wait); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool sendMessageToClient(const void *data, RsMessageToClientType cmdID, uint32_t subID, size_t len, bool waitForSpace) const; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t runScript(Script *s); 1513730bb1cd59bcfa9f5cad8361997b84113ed5923Evan Millar 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void initToClient(); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void deinitToClient(); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProgramFragment * getDefaultProgramFragment() const { 1563730bb1cd59bcfa9f5cad8361997b84113ed5923Evan Millar return mStateFragment.mDefault.get(); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1583730bb1cd59bcfa9f5cad8361997b84113ed5923Evan Millar ProgramVertex * getDefaultProgramVertex() const { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mStateVertex.mDefault.get(); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProgramStore * getDefaultProgramStore() const { 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mStateFragmentStore.mDefault.get(); 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ProgramRaster * getDefaultProgramRaster() const { 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mStateRaster.mDefault.get(); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Font* getDefaultFont() const { 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mStateFont.mDefault.get(); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1713730bb1cd59bcfa9f5cad8361997b84113ed5923Evan Millar uint32_t getWidth() const {return mWidth;} 1727237c56faea76d43b304562828a443ca766c3c78Romain Guy uint32_t getHeight() const {return mHeight;} 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable ThreadIO mIO; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1765ac413a1d40b04f12d80d65b7c0168b5b225b3e7Svetoslav Ganov // Timers 1775ac413a1d40b04f12d80d65b7c0168b5b225b3e7Svetoslav Ganov enum Timers { 1785ac413a1d40b04f12d80d65b7c0168b5b225b3e7Svetoslav Ganov RS_TIMER_IDLE, 1795ac413a1d40b04f12d80d65b7c0168b5b225b3e7Svetoslav Ganov RS_TIMER_INTERNAL, 1805ac413a1d40b04f12d80d65b7c0168b5b225b3e7Svetoslav Ganov RS_TIMER_SCRIPT, 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RS_TIMER_CLEAR_SWAP, 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project _RS_TIMER_TOTAL 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint64_t getTime() const; 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void timerInit(); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void timerReset(); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void timerSet(Timers); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void timerPrint(); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void timerFrame(); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mLogTimes; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mLogScripts; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mLogObjects; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mLogShaders; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mLogShadersAttr; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mLogShadersUniforms; 1980e7d652dbd7cc6415685bece745a752da39179c6Gilles Debunne bool mLogVisual; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } props; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dumpDebug() const; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void checkError(const char *, bool isFatal = false) const; 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setError(RsError e, const char *msg = NULL) const; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2050e7d652dbd7cc6415685bece745a752da39179c6Gilles Debunne mutable const ObjectBase * mObjHead; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool ext_OES_texture_npot() const {return mGL.OES_texture_npot;} 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool ext_GL_IMG_texture_npot() const {return mGL.GL_IMG_texture_npot;} 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool ext_GL_NV_texture_npot_2D_mipmap() const {return mGL.GL_NV_texture_npot_2D_mipmap;} 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float ext_texture_max_aniso() const {return mGL.EXT_texture_max_aniso; } 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getMaxFragmentTextures() const {return mGL.mMaxFragmentTextureImageUnits;} 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getMaxFragmentUniformVectors() const {return mGL.mMaxFragmentUniformVectors;} 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getMaxVertexUniformVectors() const {return mGL.mMaxVertexUniformVectors;} 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getMaxVertexAttributes() const {return mGL.mMaxVertexAttribs;} 2157237c56faea76d43b304562828a443ca766c3c78Romain Guy 21653175148c9b962c0ffe9cea0f3dc68bc0196e044Jack Veenstra void launchThreads(WorkerCallback_t cbk, void *data); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getWorkerPoolSize() const {return (uint32_t)mWorkers.mCount;} 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprotected: 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Device *mDev; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLint mNumConfigs; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLint mMajorVersion; 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLint mMinorVersion; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLConfig mConfig; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLContext mContext; 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLSurface mSurface; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLSurface mSurfaceDefault; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLDisplay mDisplay; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } mEGL; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const uint8_t * mVendor; 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const uint8_t * mRenderer; 23653175148c9b962c0ffe9cea0f3dc68bc0196e044Jack Veenstra const uint8_t * mVersion; 23753175148c9b962c0ffe9cea0f3dc68bc0196e044Jack Veenstra const uint8_t * mExtensions; 23853175148c9b962c0ffe9cea0f3dc68bc0196e044Jack Veenstra 23953175148c9b962c0ffe9cea0f3dc68bc0196e044Jack Veenstra uint32_t mMajorVersion; 24061c9d4b4509aeaab1fcad24fb5a63c874d2fd941Romain Guy uint32_t mMinorVersion; 24153175148c9b962c0ffe9cea0f3dc68bc0196e044Jack Veenstra 24244c1473c03a0021224fa94af9b1e3579ec244b12Gilles Debunne int32_t mMaxVaryingVectors; 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mMaxTextureImageUnits; 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mMaxFragmentTextureImageUnits; 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mMaxFragmentUniformVectors; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mMaxVertexAttribs; 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mMaxVertexUniformVectors; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mMaxVertexTextureUnits; 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool OES_texture_npot; 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool GL_IMG_texture_npot; 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool GL_NV_texture_npot_2D_mipmap; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float EXT_texture_max_aniso; 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } mGL; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mWidth; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mHeight; 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mThreadPriority; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mIsGraphicsContext; 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mRunning; 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mExit; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mPaused; 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable RsError mError; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pthread_t mThreadId; 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t mNativeThreadId; 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct Workers { 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project volatile int mRunningCount; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project volatile int mLaunchCount; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mCount; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pthread_t *mThreadId; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t *mNativeThreadId; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Signal mCompleteSignal; 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Signal *mLaunchSignals; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WorkerCallback_t mLaunchCallback; 28153175148c9b962c0ffe9cea0f3dc68bc0196e044Jack Veenstra void *mLaunchData; 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Workers mWorkers; 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ObjectBaseRef<Script> mRootScript; 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ObjectBaseRef<ProgramFragment> mFragment; 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ObjectBaseRef<ProgramVertex> mVertex; 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ObjectBaseRef<ProgramStore> mFragmentStore; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ObjectBaseRef<ProgramRaster> mRaster; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ObjectBaseRef<Font> mFont; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void displayDebugStats(); 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Context(); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool initContext(Device *, const RsSurfaceConfig *sc); 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool initGLThread(); 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void deinitEGL(); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t runRootScript(); 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void * threadProc(void *); 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void * helperThreadProc(void *); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30754ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson ANativeWindow *mWndSurface; 30854ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson 30954ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson Vector<ObjectBase *> mNames; 31054ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson 31154ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson uint64_t mTimers[_RS_TIMER_TOTAL]; 31254ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson Timers mTimerActive; 31354ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson uint64_t mTimeLast; 31454ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson uint64_t mTimeFrame; 31554ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson uint64_t mTimeLastFrame; 31654ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson uint32_t mTimeMSLastFrame; 31754ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson uint32_t mTimeMSLastScript; 31854ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson uint32_t mTimeMSLastSwap; 31954ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson uint32_t mAverageFPSFrameCount; 32054ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson uint64_t mAverageFPSStartTime; 32154ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson uint32_t mAverageFPS; 32254ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson}; 32354ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson 32454ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson} 32554ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson} 32654ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson#endif 32754ed87c685fe5a911a622ffef1d5824af6ea95a9Roger Olsson