diff options
author | Robert Ellison <papillo@vmware.com> | 2009-05-08 11:13:57 -0600 |
---|---|---|
committer | Robert Ellison <papillo@vmware.com> | 2009-05-08 16:32:28 -0600 |
commit | c230767d6956b63a2b101acb48f98823bb5dd31a (patch) | |
tree | 30faf708715d498c980c7dee74e37728ed0fd471 | |
parent | 1d663ae2925ffadf419ddbea9eca8d5706ea6510 (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.
-rw-r--r-- | src/mesa/main/texstate.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c index 5453331c67..6e0c0c688a 100644 --- a/src/mesa/main/texstate.c +++ b/src/mesa/main/texstate.c @@ -791,6 +791,9 @@ _mesa_free_texture_data(GLcontext *ctx) /* unreference current textures */ for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; 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(&ctx->Texture.Unit[u].CurrentTex[tgt], NULL); } |