Cache the current program pointer
Hash table lookups are somewhat expensive, so cache a pointer to the current program for on a context. This gains about 3 fps (from 58) on a Native Client demo.
BUG=
TEST=webgl conformance tests
Review URL: http://codereview.appspot.com/5206042
git-svn-id: https://angleproject.googlecode.com/svn/trunk@786 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 58d6510..1d88b29 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -381,6 +381,7 @@
mSampleStateDirty = true;
mDitherStateDirty = true;
mFrontFaceDirty = true;
+ mCachedCurrentProgram = NULL;
}
void Context::setClearColor(float red, float green, float blue, float alpha)
@@ -893,6 +894,7 @@
void Context::deleteProgram(GLuint program)
{
mResourceManager->deleteProgram(program);
+ mCachedCurrentProgram = NULL;
}
void Context::deleteTexture(GLuint texture)
@@ -1040,6 +1042,7 @@
{
Program *newProgram = mResourceManager->getProgram(program);
Program *oldProgram = mResourceManager->getProgram(priorProgram);
+ mCachedCurrentProgram = NULL;
if (newProgram)
{
@@ -1105,7 +1108,11 @@
Program *Context::getCurrentProgram()
{
- return mResourceManager->getProgram(mState.currentProgram);
+ if (!mCachedCurrentProgram)
+ {
+ mCachedCurrentProgram = mResourceManager->getProgram(mState.currentProgram);
+ }
+ return mCachedCurrentProgram;
}
Texture2D *Context::getTexture2D()