Mesa (master): mesa: Optimize unbind_texobj_from_texunits()
Fredrik Höglund
fredrik at kemper.freedesktop.org
Fri May 2 01:21:26 UTC 2014
Module: Mesa
Branch: master
Commit: 30af8ce3f807f8a4990fa8c750038b1f75e5154f
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=30af8ce3f807f8a4990fa8c750038b1f75e5154f
Author: Fredrik Höglund <fredrik at kde.org>
Date: Tue Nov 12 17:34:35 2013 +0100
mesa: Optimize unbind_texobj_from_texunits()
The texture can only be bound to the index that corresponds to its
target, so there is no need to loop over all possible indices
for every unit and checking if the texture is bound to it.
Reviewed-by: Brian Paul <brianp at vmware.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
src/mesa/main/texobj.c | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
index a72b753..43cf1c5 100644
--- a/src/mesa/main/texobj.c
+++ b/src/mesa/main/texobj.c
@@ -1093,18 +1093,20 @@ static void
unbind_texobj_from_texunits(struct gl_context *ctx,
struct gl_texture_object *texObj)
{
- GLuint u, tex;
+ const gl_texture_index index = texObj->TargetIndex;
+ GLuint u;
+
+ if (texObj->Target == 0)
+ return;
for (u = 0; u < ctx->Texture.NumCurrentTexUsed; u++) {
struct gl_texture_unit *unit = &ctx->Texture.Unit[u];
- for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) {
- if (texObj == unit->CurrentTex[tex]) {
- _mesa_reference_texobj(&unit->CurrentTex[tex],
- ctx->Shared->DefaultTex[tex]);
- ASSERT(unit->CurrentTex[tex]);
- unit->_BoundTextures &= ~(1 << tex);
- break;
- }
+
+ if (texObj == unit->CurrentTex[index]) {
+ /* Bind the default texture for this unit/target */
+ _mesa_reference_texobj(&unit->CurrentTex[index],
+ ctx->Shared->DefaultTex[index]);
+ unit->_BoundTextures &= ~(1 << index);
}
}
}
More information about the mesa-commit
mailing list