rsContext.h revision e57691037aea219562ac686429b4b98202aab7bc
1bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin/* 2bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * Copyright (C) 2009 The Android Open Source Project 3bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * 4bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 5bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * you may not use this file except in compliance with the License. 6bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * You may obtain a copy of the License at 7bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * 8bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 9bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * 10bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * Unless required by applicable law or agreed to in writing, software 11bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 12bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * See the License for the specific language governing permissions and 14bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin * limitations under the License. 15bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin */ 16bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 17bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#ifndef ANDROID_RS_CONTEXT_H 18bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#define ANDROID_RS_CONTEXT_H 19bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 20bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include <utils/Vector.h> 21bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include <ui/EGLNativeWindowSurface.h> 22bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include <ui/Surface.h> 23bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 24bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsType.h" 25bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsMatrix.h" 26bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsAllocation.h" 27bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsTriangleMesh.h" 28bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsDevice.h" 29bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsScriptC.h" 30bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsAllocation.h" 31bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsAdapter.h" 32bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsSampler.h" 33bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsProgramFragment.h" 34bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsProgramFragmentStore.h" 35bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsProgramVertex.h" 36bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 37bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsgApiStructs.h" 38bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include "rsLocklessFifo.h" 39bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 40bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 41bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin// --------------------------------------------------------------------------- 42bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkinnamespace android { 43bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkinnamespace renderscript { 44bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 45bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkinclass Context 46bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin{ 47bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkinpublic: 48bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin Context(Device *, Surface *); 49bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin ~Context(); 50bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 51bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin static pthread_key_t gThreadTLSKey; 52bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin struct ScriptTLSStruct { 53bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin Context * mContext; 54bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin Script * mScript; 55bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin }; 56bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 57bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin 58bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin //StructuredAllocationContext mStateAllocation; 59bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin ElementState mStateElement; 60bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin TypeState mStateType; 61bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin SamplerState mStateSampler; 62bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin ProgramFragmentState mStateFragment; 63bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin ProgramFragmentStoreState mStateFragmentStore; 64bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin ProgramVertexState mStateVertex; 65bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 66bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin TriangleMeshContext mStateTriangleMesh; 67bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 68bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin ScriptCState mScriptC; 69bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 70bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin static Context * getContext() {return gCon;} 71bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 72bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin void swapBuffers(); 73bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin void setRootScript(Script *); 74bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin void setVertex(ProgramVertex *); 75bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin void setFragment(ProgramFragment *); 76bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin void setFragmentStore(ProgramFragmentStore *); 77bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 78bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin void updateSurface(void *sur); 79bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 80bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin const ProgramFragment * getFragment() {return mFragment.get();} 81bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin const ProgramFragmentStore * getFragmentStore() {return mFragmentStore.get();} 82bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 83bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin void setupCheck(); 84bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 85bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin void assignName(ObjectBase *obj, const char *name, uint32_t len); 86bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin void removeName(ObjectBase *obj); 87bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin ObjectBase * lookupName(const char *name) const; 88bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin void appendNameDefines(String8 *str) const; 89bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 90 91 ProgramFragment * getDefaultProgramFragment() const { 92 return mStateFragment.mDefault.get(); 93 } 94 ProgramVertex * getDefaultProgramVertex() const { 95 return mStateVertex.mDefault.get(); 96 } 97 ProgramFragmentStore * getDefaultProgramFragmentStore() const { 98 return mStateFragmentStore.mDefault.get(); 99 } 100 101protected: 102 Device *mDev; 103 104 EGLint mNumConfigs; 105 EGLint mMajorVersion; 106 EGLint mMinorVersion; 107 EGLConfig mConfig; 108 EGLContext mContext; 109 EGLSurface mSurface; 110 EGLint mWidth; 111 EGLint mHeight; 112 EGLDisplay mDisplay; 113 114 bool mRunning; 115 bool mExit; 116 117 LocklessCommandFifo mServerCommands; 118 LocklessCommandFifo mServerReturns; 119 120 pthread_t mThreadId; 121 122 ObjectBaseRef<Script> mRootScript; 123 ObjectBaseRef<ProgramFragment> mFragment; 124 ObjectBaseRef<ProgramVertex> mVertex; 125 ObjectBaseRef<ProgramFragmentStore> mFragmentStore; 126 127private: 128 Context(); 129 130 void initEGL(); 131 132 bool runScript(Script *s, uint32_t launchID); 133 bool runRootScript(); 134 135 static void * threadProc(void *); 136 137 // todo: put in TLS 138 static Context *gCon; 139 Surface *mWndSurface; 140 141 Vector<ObjectBase *> mNames; 142}; 143 144 145} 146} 147#endif 148