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