On 01/21/2014 03:35 PM, Fredrik Höglund wrote:
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.
---
src/mesa/main/texobj.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
index fbbc577..5a3cfb2 100644
--- a/src/mesa/main/texobj.c
+++ b/src/mesa/main/texobj.c
@@ -1084,19 +1084,19 @@ static void
unbind_texobj_from_texunits(struct gl_context *ctx,
struct gl_texture_object *texObj)
{
- GLuint u, tex;
+ const GLuint index = texObj->TargetIndex;
+ GLuint u;
for (u = 0; u < Elements(ctx->Texture.Unit); 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])
+ continue;
+
+ _mesa_reference_texobj(&unit->CurrentTex[index],
+ ctx->Shared->DefaultTex[index]);
+ ASSERT(unit->CurrentTex[index]);
+ unit->_BoundTextures ^= (1 << index);
}
}
I guess I'd like to see the last part written as:
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);
}
I try to only use continue when really needed. I don't think the
assertion is needed since we wouldn't have created the context if we
failed to create any DefaultTex.
-Brian
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev