From 9db3d07b9620b4269ab33f78604a36327e536ce1 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Queru Date: Thu, 12 Nov 2009 18:45:53 -0800 Subject: eclair snapshot --- libs/rs/rsContext.h | 241 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 libs/rs/rsContext.h (limited to 'libs/rs/rsContext.h') diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h new file mode 100644 index 000000000000..bffc55b7cb8b --- /dev/null +++ b/libs/rs/rsContext.h @@ -0,0 +1,241 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_RS_CONTEXT_H +#define ANDROID_RS_CONTEXT_H + +#include "rsUtils.h" + +#include + +#include "rsThreadIO.h" +#include "rsType.h" +#include "rsMatrix.h" +#include "rsAllocation.h" +#include "rsSimpleMesh.h" +#include "rsMesh.h" +#include "rsDevice.h" +#include "rsScriptC.h" +#include "rsAllocation.h" +#include "rsAdapter.h" +#include "rsSampler.h" +#include "rsLight.h" +#include "rsProgramFragment.h" +#include "rsProgramFragmentStore.h" +#include "rsProgramRaster.h" +#include "rsProgramVertex.h" + +#include "rsgApiStructs.h" +#include "rsLocklessFifo.h" + + +// --------------------------------------------------------------------------- +namespace android { +namespace renderscript { + +class Context +{ +public: + Context(Device *, Surface *, bool useDepth); + ~Context(); + + static pthread_key_t gThreadTLSKey; + static uint32_t gThreadTLSKeyCount; + static uint32_t gGLContextCount; + static pthread_mutex_t gInitMutex; + + struct ScriptTLSStruct { + Context * mContext; + Script * mScript; + }; + + + //StructuredAllocationContext mStateAllocation; + ElementState mStateElement; + TypeState mStateType; + SamplerState mStateSampler; + ProgramFragmentState mStateFragment; + ProgramFragmentStoreState mStateFragmentStore; + ProgramRasterState mStateRaster; + ProgramVertexState mStateVertex; + LightState mStateLight; + + ScriptCState mScriptC; + + void swapBuffers(); + void setRootScript(Script *); + void setRaster(ProgramRaster *); + void setVertex(ProgramVertex *); + void setFragment(ProgramFragment *); + void setFragmentStore(ProgramFragmentStore *); + + void updateSurface(void *sur); + + const ProgramFragment * getFragment() {return mFragment.get();} + const ProgramFragmentStore * getFragmentStore() {return mFragmentStore.get();} + const ProgramRaster * getRaster() {return mRaster.get();} + const ProgramVertex * getVertex() {return mVertex.get();} + + void setupCheck(); + void allocationCheck(const Allocation *); + + void pause(); + void resume(); + void setSurface(Surface *sur); + + void assignName(ObjectBase *obj, const char *name, uint32_t len); + void removeName(ObjectBase *obj); + ObjectBase * lookupName(const char *name) const; + void appendNameDefines(String8 *str) const; + void appendVarDefines(String8 *str) const; + + uint32_t getMessageToClient(void *data, size_t *receiveLen, size_t bufferLen, bool wait); + bool sendMessageToClient(void *data, uint32_t cmdID, size_t len, bool waitForSpace); + bool runScript(Script *s, uint32_t launchID); + + void initToClient(); + void deinitToClient(); + + ProgramFragment * getDefaultProgramFragment() const { + return mStateFragment.mDefault.get(); + } + ProgramVertex * getDefaultProgramVertex() const { + return mStateVertex.mDefault.get(); + } + ProgramFragmentStore * getDefaultProgramFragmentStore() const { + return mStateFragmentStore.mDefault.get(); + } + ProgramRaster * getDefaultProgramRaster() const { + return mStateRaster.mDefault.get(); + } + + void addInt32Define(const char* name, int32_t value) { + mInt32Defines.add(String8(name), value); + } + + void addFloatDefine(const char* name, float value) { + mFloatDefines.add(String8(name), value); + } + + uint32_t getWidth() const {return mEGL.mWidth;} + uint32_t getHeight() const {return mEGL.mHeight;} + + + ThreadIO mIO; + void objDestroyAdd(ObjectBase *); + + // Timers + enum Timers { + RS_TIMER_IDLE, + RS_TIMER_INTERNAL, + RS_TIMER_SCRIPT, + RS_TIMER_CLEAR_SWAP, + _RS_TIMER_TOTAL + }; + uint64_t getTime() const; + void timerInit(); + void timerReset(); + void timerSet(Timers); + void timerPrint(); + void timerFrame(); + + bool checkVersion1_1() const {return (mGL.mMajorVersion > 1) || (mGL.mMinorVersion >= 1); } + bool checkVersion2_0() const {return mGL.mMajorVersion >= 2; } + + struct { + bool mLogTimes; + bool mLogScripts; + bool mLogObjects; + } props; + + mutable const ObjectBase * mObjHead; + +protected: + Device *mDev; + + struct { + EGLint mNumConfigs; + EGLint mMajorVersion; + EGLint mMinorVersion; + EGLConfig mConfig; + EGLContext mContext; + EGLSurface mSurface; + EGLint mWidth; + EGLint mHeight; + EGLDisplay mDisplay; + } mEGL; + + struct { + const uint8_t * mVendor; + const uint8_t * mRenderer; + const uint8_t * mVersion; + const uint8_t * mExtensions; + + uint32_t mMajorVersion; + uint32_t mMinorVersion; + + } mGL; + + bool mRunning; + bool mExit; + bool mUseDepth; + bool mPaused; + + pthread_t mThreadId; + + ObjectBaseRef