summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFredrik Höglund <[email protected]>2013-11-12 17:28:12 +0100
committerFredrik Höglund <[email protected]>2014-05-02 02:53:25 +0200
commit4bd82720880bef34895f34ac8141d0d9246b2b6d (patch)
treed84a2a117882038956f8c0f404b240da90a61491
parent6bf8ac846aeb8b6e53b4a3545ee5f8ce94055ae7 (diff)
mesa: Add a _BoundTextures field in gl_texture_unit
This will be used by glBindTextures() when unbinding textures, to avoid having to loop over all the targets. Reviewed-by: Brian Paul <[email protected]> Reviewed-by: Ian Romanick <[email protected]>
-rw-r--r--src/mesa/main/mtypes.h3
-rw-r--r--src/mesa/main/texobj.c6
-rw-r--r--src/mesa/main/texstate.c3
3 files changed, 12 insertions, 0 deletions
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index c0a2f866e6d..f31788aefab 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1370,6 +1370,9 @@ struct gl_texture_unit
/** Points to highest priority, complete and enabled texture object */
struct gl_texture_object *_Current;
+
+ /** Texture targets that have a non-default texture bound */
+ GLbitfield _BoundTextures;
};
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
index 42d057c6ae3..a72b75317f9 100644
--- a/src/mesa/main/texobj.c
+++ b/src/mesa/main/texobj.c
@@ -1102,6 +1102,7 @@ unbind_texobj_from_texunits(struct gl_context *ctx,
_mesa_reference_texobj(&unit->CurrentTex[tex],
ctx->Shared->DefaultTex[tex]);
ASSERT(unit->CurrentTex[tex]);
+ unit->_BoundTextures &= ~(1 << tex);
break;
}
}
@@ -1359,6 +1360,11 @@ _mesa_BindTexture( GLenum target, GLuint texName )
ctx->Texture.CurrentUnit + 1);
ASSERT(texUnit->CurrentTex[targetIndex]);
+ if (texName != 0)
+ texUnit->_BoundTextures |= (1 << targetIndex);
+ else
+ texUnit->_BoundTextures &= ~(1 << targetIndex);
+
/* Pass BindTexture call to device driver */
if (ctx->Driver.BindTexture)
ctx->Driver.BindTexture(ctx, target, newTexObj);
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index 91b29069169..19508cf39d0 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -113,6 +113,7 @@ _mesa_copy_texture_state( const struct gl_context *src, struct gl_context *dst )
MAX2(dst->Texture.NumCurrentTexUsed, u + 1);
}
}
+ dst->Texture.Unit[u]._BoundTextures = src->Texture.Unit[u]._BoundTextures;
_mesa_unlock_context_textures(dst);
}
}
@@ -877,6 +878,8 @@ init_texture_unit( struct gl_context *ctx, GLuint unit )
_mesa_reference_texobj(&texUnit->CurrentTex[tex],
ctx->Shared->DefaultTex[tex]);
}
+
+ texUnit->_BoundTextures = 0;
}