rsContext.h revision 54db59c3594e887a412a24713fc3daa1c2404593
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"
271bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams#include "rsSimpleMesh.h"
287c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams#include "rsMesh.h"
29d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsDevice.h"
30d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsScriptC.h"
31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAllocation.h"
32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAdapter.h"
33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsSampler.h"
34ee41112e1539de95596600fd2c6dada5d275217fJason Sams#include "rsLight.h"
35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramFragment.h"
3654db59c3594e887a412a24713fc3daa1c2404593Jason Sams#include "rsProgramStore.h"
37ebfb436a49673693b98469683451bd9ede797557Jason Sams#include "rsProgramRaster.h"
38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramVertex.h"
39bb51c40d89c7dbdee7d7507fdfe0a64e8f4f87a9Jason Sams#include "rsShaderCache.h"
40bb51c40d89c7dbdee7d7507fdfe0a64e8f4f87a9Jason Sams#include "rsVertexArray.h"
41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
42d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsgApiStructs.h"
43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsLocklessFifo.h"
44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
455cbb940cf6b1fd2b44d66bc40e5c3e8429bbd741Mathias Agopian#include <ui/egl/android_natives.h>
46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
48d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android {
49000479f9e325b4e426a67033abd92d47da412725Mathias Agopian
50d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript {
51d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
529bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Samsclass Context
53d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
54d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic:
55704ff64b099406bb328898a7443921f22dbffd6dJason Sams    Context(Device *, bool isGraphics, bool useDepth);
56d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ~Context();
57d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
58462d11b880cba72584c135397c0a82618ab63217Jason Sams    static pthread_key_t gThreadTLSKey;
5941c19db90e250e2b7cb438904f0e96a0ef455d6dJason Sams    static uint32_t gThreadTLSKeyCount;
607136220b54e68e0c7faac30577ed20b7482481fdJason Sams    static uint32_t gGLContextCount;
6141c19db90e250e2b7cb438904f0e96a0ef455d6dJason Sams    static pthread_mutex_t gInitMutex;
6241c19db90e250e2b7cb438904f0e96a0ef455d6dJason Sams
63462d11b880cba72584c135397c0a82618ab63217Jason Sams    struct ScriptTLSStruct {
64462d11b880cba72584c135397c0a82618ab63217Jason Sams        Context * mContext;
65462d11b880cba72584c135397c0a82618ab63217Jason Sams        Script * mScript;
66462d11b880cba72584c135397c0a82618ab63217Jason Sams    };
67462d11b880cba72584c135397c0a82618ab63217Jason Sams
68d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
69d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    //StructuredAllocationContext mStateAllocation;
70d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ElementState mStateElement;
71d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    TypeState mStateType;
72d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    SamplerState mStateSampler;
73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ProgramFragmentState mStateFragment;
7454db59c3594e887a412a24713fc3daa1c2404593Jason Sams    ProgramStoreState mStateFragmentStore;
75ebfb436a49673693b98469683451bd9ede797557Jason Sams    ProgramRasterState mStateRaster;
76d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ProgramVertexState mStateVertex;
77bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    LightState mStateLight;
78bb51c40d89c7dbdee7d7507fdfe0a64e8f4f87a9Jason Sams    VertexArrayState mStateVertexArray;
79d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
80d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ScriptCState mScriptC;
81bb51c40d89c7dbdee7d7507fdfe0a64e8f4f87a9Jason Sams    ShaderCache mShaderCache;
82d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
83d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void swapBuffers();
84d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void setRootScript(Script *);
85ebfb436a49673693b98469683451bd9ede797557Jason Sams    void setRaster(ProgramRaster *);
86d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void setVertex(ProgramVertex *);
87d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void setFragment(ProgramFragment *);
8854db59c3594e887a412a24713fc3daa1c2404593Jason Sams    void setFragmentStore(ProgramStore *);
89d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
90d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void updateSurface(void *sur);
91d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
92d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    const ProgramFragment * getFragment() {return mFragment.get();}
9354db59c3594e887a412a24713fc3daa1c2404593Jason Sams    const ProgramStore * getFragmentStore() {return mFragmentStore.get();}
94ebfb436a49673693b98469683451bd9ede797557Jason Sams    const ProgramRaster * getRaster() {return mRaster.get();}
95b0ec1b46d6f5b5612e33fe43a828abea79b87a00Jason Sams    const ProgramVertex * getVertex() {return mVertex.get();}
96d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
97156cce698093023d9e79a4ff4fb96f4e4d3019dbJason Sams    bool setupCheck();
983b7d39bb51f851ddee441fa34884495217e477f9Jason Sams    bool checkDriver() const {return mEGL.mSurface != 0;}
99d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
10065e7aa56f56097418d617663683544c25b3988eaJason Sams    void pause();
10165e7aa56f56097418d617663683544c25b3988eaJason Sams    void resume();
1025cbb940cf6b1fd2b44d66bc40e5c3e8429bbd741Mathias Agopian    void setSurface(uint32_t w, uint32_t h, android_native_window_t *sur);
1037d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    void setPriority(int32_t p);
10465e7aa56f56097418d617663683544c25b3988eaJason Sams
105d5680f9ba95ec7ce212e8025774914e79982a1eeJason Sams    void assignName(ObjectBase *obj, const char *name, uint32_t len);
1063eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    void removeName(ObjectBase *obj);
1079c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams
108516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    uint32_t getMessageToClient(void *data, size_t *receiveLen, size_t bufferLen, bool wait);
109516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    bool sendMessageToClient(void *data, uint32_t cmdID, size_t len, bool waitForSpace);
110b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams    uint32_t runScript(Script *s, uint32_t launchID);
111516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
112516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    void initToClient();
113516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    void deinitToClient();
114516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
1159c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams    ProgramFragment * getDefaultProgramFragment() const {
1169c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams        return mStateFragment.mDefault.get();
1179c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams    }
1189c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams    ProgramVertex * getDefaultProgramVertex() const {
1199c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams        return mStateVertex.mDefault.get();
1209c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams    }
12154db59c3594e887a412a24713fc3daa1c2404593Jason Sams    ProgramStore * getDefaultProgramStore() const {
1229c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams        return mStateFragmentStore.mDefault.get();
1239c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams    }
124ebfb436a49673693b98469683451bd9ede797557Jason Sams    ProgramRaster * getDefaultProgramRaster() const {
125ebfb436a49673693b98469683451bd9ede797557Jason Sams        return mStateRaster.mDefault.get();
126ebfb436a49673693b98469683451bd9ede797557Jason Sams    }
1279c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams
128b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams    uint32_t getWidth() const {return mEGL.mWidth;}
129b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams    uint32_t getHeight() const {return mEGL.mHeight;}
13040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
131bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams
132bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    ThreadIO mIO;
133730ee65d4ddb307898053b623120bad1655fadadJason Sams    void objDestroyAdd(ObjectBase *);
134bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams
135f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams    // Timers
136f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams    enum Timers {
137f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams        RS_TIMER_IDLE,
138f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams        RS_TIMER_INTERNAL,
139f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams        RS_TIMER_SCRIPT,
140f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams        RS_TIMER_CLEAR_SWAP,
141f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams        _RS_TIMER_TOTAL
142f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams    };
143f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams    uint64_t getTime() const;
144f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams    void timerInit();
145f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams    void timerReset();
146f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams    void timerSet(Timers);
147f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams    void timerPrint();
1482525a815220652b37e2e390fe8c62394a6d0e574Jason Sams    void timerFrame();
149f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams
150b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams    bool checkVersion1_1() const {return (mGL.mMajorVersion > 1) || (mGL.mMinorVersion >= 1); }
151b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams    bool checkVersion2_0() const {return mGL.mMajorVersion >= 2; }
152b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams
15366b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams    struct {
15466b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams        bool mLogTimes;
15566b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams        bool mLogScripts;
15666b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams        bool mLogObjects;
1575dad8b4d1fda37b7b4763ef7361c5eb92131cb7eJason Sams        bool mLogShaders;
15866b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams    } props;
1599ac2c66f0171593113238635c6a7921c41215e77Joe Onorato
1609dab667e03632181e487a04a8a170b3fa0bd5037Jason Sams    void dumpDebug() const;
161718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    void checkError(const char *) const;
162156cce698093023d9e79a4ff4fb96f4e4d3019dbJason Sams    const char * getError(RsError *);
163f468700b6dd02cf68d4424567a8288a24084f51aJason Sams    void setError(RsError e, const char *msg = NULL);
1649dab667e03632181e487a04a8a170b3fa0bd5037Jason Sams
165a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    mutable const ObjectBase * mObjHead;
166a9e7a05b84470257637c97d65f6562aa832c66efJason Sams
1672978bfc6ad79c8f1138d34a704ce5b3d3d70d2c1Jason Sams    bool ext_OES_texture_npot() const {return mGL.OES_texture_npot;}
1682978bfc6ad79c8f1138d34a704ce5b3d3d70d2c1Jason Sams
169d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprotected:
170d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    Device *mDev;
171d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
172b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams    struct {
173b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        EGLint mNumConfigs;
174b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        EGLint mMajorVersion;
175b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        EGLint mMinorVersion;
176b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        EGLConfig mConfig;
177b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        EGLContext mContext;
178b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        EGLSurface mSurface;
179b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        EGLint mWidth;
180b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        EGLint mHeight;
181b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        EGLDisplay mDisplay;
182b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams    } mEGL;
183b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams
184b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams    struct {
185b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        const uint8_t * mVendor;
186b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        const uint8_t * mRenderer;
187b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        const uint8_t * mVersion;
188b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        const uint8_t * mExtensions;
189b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams
190b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        uint32_t mMajorVersion;
191b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        uint32_t mMinorVersion;
192b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams
1930011bcf57ff711a221a3a4c73f2a79125111647dJason Sams        int32_t mMaxVaryingVectors;
1940011bcf57ff711a221a3a4c73f2a79125111647dJason Sams        int32_t mMaxTextureImageUnits;
1950011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
1960011bcf57ff711a221a3a4c73f2a79125111647dJason Sams        int32_t mMaxFragmentTextureImageUnits;
1970011bcf57ff711a221a3a4c73f2a79125111647dJason Sams        int32_t mMaxFragmentUniformVectors;
1980011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
1990011bcf57ff711a221a3a4c73f2a79125111647dJason Sams        int32_t mMaxVertexAttribs;
2000011bcf57ff711a221a3a4c73f2a79125111647dJason Sams        int32_t mMaxVertexUniformVectors;
2010011bcf57ff711a221a3a4c73f2a79125111647dJason Sams        int32_t mMaxVertexTextureUnits;
2022978bfc6ad79c8f1138d34a704ce5b3d3d70d2c1Jason Sams
2032978bfc6ad79c8f1138d34a704ce5b3d3d70d2c1Jason Sams        bool OES_texture_npot;
204b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams    } mGL;
205d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2063bc47d438171dce294e816366d53bc9eca772c5bJason Sams    uint32_t mWidth;
2073bc47d438171dce294e816366d53bc9eca772c5bJason Sams    uint32_t mHeight;
208b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams    int32_t mThreadPriority;
209704ff64b099406bb328898a7443921f22dbffd6dJason Sams    bool mIsGraphicsContext;
2103bc47d438171dce294e816366d53bc9eca772c5bJason Sams
211d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    bool mRunning;
212d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    bool mExit;
213b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams    bool mUseDepth;
21465e7aa56f56097418d617663683544c25b3988eaJason Sams    bool mPaused;
215156cce698093023d9e79a4ff4fb96f4e4d3019dbJason Sams    RsError mError;
216156cce698093023d9e79a4ff4fb96f4e4d3019dbJason Sams    const char *mErrorMsg;
217d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
218d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    pthread_t mThreadId;
2197d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    pid_t mNativeThreadId;
220d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
221d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ObjectBaseRef<Script> mRootScript;
222d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ObjectBaseRef<ProgramFragment> mFragment;
223d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ObjectBaseRef<ProgramVertex> mVertex;
22454db59c3594e887a412a24713fc3daa1c2404593Jason Sams    ObjectBaseRef<ProgramStore> mFragmentStore;
225ebfb436a49673693b98469683451bd9ede797557Jason Sams    ObjectBaseRef<ProgramRaster> mRaster;
226d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
227730ee65d4ddb307898053b623120bad1655fadadJason Sams
228730ee65d4ddb307898053b623120bad1655fadadJason Sams    struct ObjDestroyOOB {
229c1d726c2d62424867ec14f2cde16b00fe0ddfee1Jason Sams        Mutex mMutex;
230730ee65d4ddb307898053b623120bad1655fadadJason Sams        Vector<ObjectBase *> mDestroyList;
231730ee65d4ddb307898053b623120bad1655fadadJason Sams        bool mNeedToEmpty;
232730ee65d4ddb307898053b623120bad1655fadadJason Sams    };
233730ee65d4ddb307898053b623120bad1655fadadJason Sams    ObjDestroyOOB mObjDestroy;
234730ee65d4ddb307898053b623120bad1655fadadJason Sams    bool objDestroyOOBInit();
235730ee65d4ddb307898053b623120bad1655fadadJason Sams    void objDestroyOOBRun();
236730ee65d4ddb307898053b623120bad1655fadadJason Sams    void objDestroyOOBDestroy();
237730ee65d4ddb307898053b623120bad1655fadadJason Sams
238d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprivate:
239d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    Context();
240d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
241bb51c40d89c7dbdee7d7507fdfe0a64e8f4f87a9Jason Sams    void initEGL(bool useGL2);
2427136220b54e68e0c7faac30577ed20b7482481fdJason Sams    void deinitEGL();
243d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
244b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams    uint32_t runRootScript();
245d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
246d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    static void * threadProc(void *);
247d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
2485cbb940cf6b1fd2b44d66bc40e5c3e8429bbd741Mathias Agopian    android_native_window_t *mWndSurface;
2493eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
2503eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    Vector<ObjectBase *> mNames;
251f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams
252f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams    uint64_t mTimers[_RS_TIMER_TOTAL];
253f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams    Timers mTimerActive;
254f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams    uint64_t mTimeLast;
2552525a815220652b37e2e390fe8c62394a6d0e574Jason Sams    uint64_t mTimeFrame;
2562525a815220652b37e2e390fe8c62394a6d0e574Jason Sams    uint64_t mTimeLastFrame;
257b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams    uint32_t mTimeMSLastFrame;
258b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams    uint32_t mTimeMSLastScript;
259b9d5c574ff11a9470b92c5b9a62da6a655d9ef7aJason Sams    uint32_t mTimeMSLastSwap;
260d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
261d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
262d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
263d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
264d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif
265