Fast path when rebinding the same texture in single context environment

If there is no shared context, there is no purpose in rebinding the same
texture.  In some artificial tests this improves performance 10% - 30%.
(cherry picked from commit 7f8000db8b)
This commit is contained in:
Ian Romanick
2009-06-03 17:49:05 +01:00
parent ff3da0966f
commit a70c45bdab
+12
View File
@@ -891,6 +891,7 @@ _mesa_BindTexture( GLenum target, GLuint texName )
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
struct gl_texture_object *newTexObj = NULL, *defaultTexObj = NULL;
GLint targetIndex;
GLboolean early_out = GL_FALSE;
ASSERT_OUTSIDE_BEGIN_END(ctx);
if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
@@ -944,6 +945,17 @@ _mesa_BindTexture( GLenum target, GLuint texName )
assert(valid_texture_object(newTexObj));
_glthread_LOCK_MUTEX(ctx->Shared->Mutex);
if ((ctx->Shared->RefCount == 1)
&& (newTexObj == texUnit->CurrentTex[targetIndex])) {
early_out = GL_TRUE;
}
_glthread_UNLOCK_MUTEX(ctx->Shared->Mutex);
if (early_out) {
return;
}
/* flush before changing binding */
FLUSH_VERTICES(ctx, _NEW_TEXTURE);