From: Ian Romanick Date: Wed, 3 Jun 2009 16:49:05 +0000 (+0100) Subject: Fast path when rebinding the same texture in single context environment X-Git-Tag: 062012170305~17489^2~108 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7f8000db8bd45bb95bda4a4f8535c49b8ef74254;p=profile%2Fivi%2Fmesa.git 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%. --- diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index d51e7b7..2082f94 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -945,6 +945,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)) @@ -998,6 +999,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);