summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2009-05-11 09:47:17 -0600
committerBrian Paul <brianp@vmware.com>2009-06-17 11:30:02 -0600
commit53b3e7ec25898fa34dd9c1ac449d5880b81c3f9f (patch)
tree2ec1dbfbe81955a30ba291eff2bd228431cc3d12 /src
parent23bee67ca750f91e9a1b2b3b5cceb2da0bd962f3 (diff)
mesa: Fixed a texture memory leak
The current texture for any particular texture unit is given an additional reference in update_texture_state(); but if the context is closed before that texture can be released (which is quite frequent in normal use, unless a program unbinds and deletes the texture and renders without it to force a call to update_texture_state(), the memory is lost. This affects general Mesa; but the i965 is particularly affected because it allocates a considerable amount of additional memory for each allocated texture. (cherry picked from master, commit c230767d6956b63a2b101acb48f98823bb5dd31a)
Diffstat (limited to 'src')
-rw-r--r--src/mesa/main/texstate.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index d172c5b5463..348a2d9e634 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -802,6 +802,9 @@ _mesa_free_texture_data(GLcontext *ctx)
/* unreference current textures */
for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) {
struct gl_texture_unit *unit = ctx->Texture.Unit + u;
+ /* The _Current texture could account for another reference */
+ _mesa_reference_texobj(&ctx->Texture.Unit[u]._Current, NULL);
+
for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) {
_mesa_reference_texobj(&unit->CurrentTex[tgt], NULL);
}