diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2009-06-03 17:49:05 +0100 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2009-06-17 12:55:26 -0700 |
commit | a70c45bdabd8a172de6c50167b3e9d99649db1fa (patch) | |
tree | c3361509a80b69578001711ea9db9554c3e5c628 /src | |
parent | ff3da0966fc91cd5bcfed994e5edadbf25903c47 (diff) |
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 7f8000db8bd45bb95bda4a4f8535c49b8ef74254)
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/main/texobj.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index b63f747fe8d..9b8d3777fb1 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -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); |