[Mesa-dev] [PATCH 03/18] mesa: Optimize unbind_texobj_from_texunits()
Brian Paul
brianp at vmware.com
Wed Jan 22 09:00:08 PST 2014
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
More information about the mesa-dev
mailing list