rsContext.h revision 3eaa338e11a3b0d6b87d705e5bb95625e82347bd
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 20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <utils/Vector.h> 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <ui/EGLNativeWindowSurface.h> 22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <ui/Surface.h> 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsType.h" 25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsMatrix.h" 26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAllocation.h" 27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsTriangleMesh.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" 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramFragment.h" 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramFragmentStore.h" 35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramVertex.h" 36d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsgApiStructs.h" 38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsLocklessFifo.h" 39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 42d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android { 43d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript { 44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 45d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsclass Context 46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 47d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic: 48d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Context(Device *, Surface *); 49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ~Context(); 50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 51d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 52d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams //StructuredAllocationContext mStateAllocation; 53d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ElementState mStateElement; 54d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams TypeState mStateType; 55d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams SamplerState mStateSampler; 56d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ProgramFragmentState mStateFragment; 57d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ProgramFragmentStoreState mStateFragmentStore; 58d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ProgramVertexState mStateVertex; 59d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 60d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams TriangleMeshContext mStateTriangleMesh; 61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 62d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ScriptCState mScriptC; 63d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams static Context * getContext() {return gCon;} 65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 66d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void swapBuffers(); 67d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setRootScript(Script *); 68d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setVertex(ProgramVertex *); 69d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setFragment(ProgramFragment *); 70d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setFragmentStore(ProgramFragmentStore *); 71d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 72d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void updateSurface(void *sur); 73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 74d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams const ProgramFragment * getFragment() {return mFragment.get();} 75d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams const ProgramFragmentStore * getFragmentStore() {return mFragmentStore.get();} 76d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 77d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setupCheck(); 78d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 793eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams void assignName(ObjectBase *obj, const char *name); 803eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams void removeName(ObjectBase *obj); 813eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams ObjectBase * lookupName(const char *name) const; 823eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 83d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprotected: 84d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Device *mDev; 85d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 86d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLint mNumConfigs; 87d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLint mMajorVersion; 88d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLint mMinorVersion; 89d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLConfig mConfig; 90d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLContext mContext; 91d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLSurface mSurface; 92d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLint mWidth; 93d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLint mHeight; 94d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLDisplay mDisplay; 95d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 96d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams bool mRunning; 97d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams bool mExit; 98d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 99d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams LocklessCommandFifo mServerCommands; 100d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams LocklessCommandFifo mServerReturns; 101d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 102d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams pthread_t mThreadId; 103d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 104d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<Script> mRootScript; 105d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<ProgramFragment> mFragment; 106d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<ProgramVertex> mVertex; 107d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<ProgramFragmentStore> mFragmentStore; 108d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 109da423d8479a2cefb456a03d7dc550e74e473acf4Jason Sams ProgramFragment * mDefaultFragment; 110da423d8479a2cefb456a03d7dc550e74e473acf4Jason Sams ProgramVertex * mDefaultVertex; 111da423d8479a2cefb456a03d7dc550e74e473acf4Jason Sams ProgramFragmentStore * mDefaultFragmentStore; 112da423d8479a2cefb456a03d7dc550e74e473acf4Jason Sams 113d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprivate: 114d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Context(); 115d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 116d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void initEGL(); 117d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1183eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams bool runScript(Script *s, uint32_t launchID); 119a09f11d6c641726b61f80c15230a18d31c146fecJason Sams bool runRootScript(); 120d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 121d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams static void * threadProc(void *); 122d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 123d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams // todo: put in TLS 124d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams static Context *gCon; 125d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Surface *mWndSurface; 1263eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 1273eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams Vector<ObjectBase *> mNames; 128d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 129d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 130d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 131d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 132d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 133d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif 134