Don't reupload DX uniforms unless necessary
Makes Donuts NaCl test go from 14->16 fps.
BUG=
TEST=webgl conformance tests
Review URL: http://codereview.appspot.com/5233056
git-svn-id: http://angleproject.googlecode.com/svn/trunk@793 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/common/version.h b/src/common/version.h
index dba6931..0a54aed 100644
--- a/src/common/version.h
+++ b/src/common/version.h
@@ -1,7 +1,7 @@
#define MAJOR_VERSION 0
#define MINOR_VERSION 0
#define BUILD_VERSION 0
-#define BUILD_REVISION 792
+#define BUILD_REVISION 793
#define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x)
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index aaed7bb..ef290f0 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -381,6 +381,7 @@
mSampleStateDirty = true;
mDitherStateDirty = true;
mFrontFaceDirty = true;
+ mDxUniformsDirty = true;
mCachedCurrentProgram = NULL;
}
@@ -1043,6 +1044,7 @@
Program *newProgram = mResourceManager->getProgram(program);
Program *oldProgram = mResourceManager->getProgram(priorProgram);
mCachedCurrentProgram = NULL;
+ mDxUniformsDirty = true;
if (newProgram)
{
@@ -1725,6 +1727,7 @@
device->SetViewport(&viewport);
mSetViewport = viewport;
mViewportInitialized = true;
+ mDxUniformsDirty = true;
}
if (mScissorStateDirty)
@@ -1747,7 +1750,7 @@
mScissorStateDirty = false;
}
- if (mState.currentProgram)
+ if (mState.currentProgram && mDxUniformsDirty)
{
Program *programObject = getCurrentProgram();
@@ -1768,6 +1771,7 @@
GLint depthRange = programObject->getDxDepthRangeLocation();
GLfloat nearFarDiff[3] = {zNear, zFar, zFar - zNear};
programObject->setUniform3fv(depthRange, 1, nearFarDiff);
+ mDxUniformsDirty = false;
}
return true;
diff --git a/src/libGLESv2/Context.h b/src/libGLESv2/Context.h
index 42eb27d..70e380e 100644
--- a/src/libGLESv2/Context.h
+++ b/src/libGLESv2/Context.h
@@ -544,6 +544,7 @@
D3DVIEWPORT9 mSetViewport;
bool mRenderTargetDescInitialized;
D3DSURFACE_DESC mRenderTargetDesc;
+ bool mDxUniformsDirty;
Program *mCachedCurrentProgram;
bool mSupportsShaderModel3;