rsContext.h revision 399bfce299210ef9c2fc1e932202223253e2384a
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" 21399bfce299210ef9c2fc1e932202223253e2384aJason Sams 22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <utils/Vector.h> 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <ui/Surface.h> 24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsType.h" 26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsMatrix.h" 27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAllocation.h" 28d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsTriangleMesh.h" 297c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams#include "rsMesh.h" 30d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsDevice.h" 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsScriptC.h" 32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAllocation.h" 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsAdapter.h" 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsSampler.h" 35d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramFragment.h" 36d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramFragmentStore.h" 37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgramVertex.h" 38bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams#include "rsLight.h" 39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsgApiStructs.h" 41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsLocklessFifo.h" 42d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 45d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android { 46d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript { 47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 48d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsclass Context 49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 50d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic: 51d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Context(Device *, Surface *); 52d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ~Context(); 53d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 54462d11b880cba72584c135397c0a82618ab63217Jason Sams static pthread_key_t gThreadTLSKey; 55462d11b880cba72584c135397c0a82618ab63217Jason Sams struct ScriptTLSStruct { 56462d11b880cba72584c135397c0a82618ab63217Jason Sams Context * mContext; 57462d11b880cba72584c135397c0a82618ab63217Jason Sams Script * mScript; 58462d11b880cba72584c135397c0a82618ab63217Jason Sams }; 59462d11b880cba72584c135397c0a82618ab63217Jason Sams 60d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams //StructuredAllocationContext mStateAllocation; 62d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ElementState mStateElement; 63d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams TypeState mStateType; 64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams SamplerState mStateSampler; 65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ProgramFragmentState mStateFragment; 66d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ProgramFragmentStoreState mStateFragmentStore; 67d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ProgramVertexState mStateVertex; 68bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams LightState mStateLight; 69d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 70d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams TriangleMeshContext mStateTriangleMesh; 71d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 72d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ScriptCState mScriptC; 73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 74d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams static Context * getContext() {return gCon;} 75d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 76d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void swapBuffers(); 77d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setRootScript(Script *); 78d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setVertex(ProgramVertex *); 79d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setFragment(ProgramFragment *); 80d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setFragmentStore(ProgramFragmentStore *); 81d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 82d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void updateSurface(void *sur); 83d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 84d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams const ProgramFragment * getFragment() {return mFragment.get();} 85d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams const ProgramFragmentStore * getFragmentStore() {return mFragmentStore.get();} 86d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 87d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void setupCheck(); 88d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 89d5680f9ba95ec7ce212e8025774914e79982a1eeJason Sams void assignName(ObjectBase *obj, const char *name, uint32_t len); 903eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams void removeName(ObjectBase *obj); 913eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams ObjectBase * lookupName(const char *name) const; 92d5680f9ba95ec7ce212e8025774914e79982a1eeJason Sams void appendNameDefines(String8 *str) const; 933eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 949c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams 959c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams ProgramFragment * getDefaultProgramFragment() const { 969c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams return mStateFragment.mDefault.get(); 979c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams } 989c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams ProgramVertex * getDefaultProgramVertex() const { 999c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams return mStateVertex.mDefault.get(); 1009c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams } 1019c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams ProgramFragmentStore * getDefaultProgramFragmentStore() const { 1029c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams return mStateFragmentStore.mDefault.get(); 1039c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams } 1049c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams 105d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprotected: 106d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Device *mDev; 107d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 108d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLint mNumConfigs; 109d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLint mMajorVersion; 110d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLint mMinorVersion; 111d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLConfig mConfig; 112d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLContext mContext; 113d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLSurface mSurface; 114d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLint mWidth; 115d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLint mHeight; 116d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams EGLDisplay mDisplay; 117d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 118d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams bool mRunning; 119d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams bool mExit; 120d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 121d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams pthread_t mThreadId; 122d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 123d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<Script> mRootScript; 124d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<ProgramFragment> mFragment; 125d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<ProgramVertex> mVertex; 126d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ObjectBaseRef<ProgramFragmentStore> mFragmentStore; 127d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 128d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprivate: 129d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Context(); 130d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 131d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void initEGL(); 132d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 1333eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams bool runScript(Script *s, uint32_t launchID); 134a09f11d6c641726b61f80c15230a18d31c146fecJason Sams bool runRootScript(); 135d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams static void * threadProc(void *); 137d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 138d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams // todo: put in TLS 139d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams static Context *gCon; 140d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams Surface *mWndSurface; 1413eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams 1423eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams Vector<ObjectBase *> mNames; 143d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 144d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 145d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 146d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 147d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 148d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif 149