mesa: release references to image textures when a context is destroyed
When a texture is still bound as an image and the context it was bound in is destroyed but not the texture, then the texture will still hold the resource and will not be freed when it is finally destroyed. Hence, release these references when the context is destroyed. This leak was triggered by virglrenderer: https://gitlab.freedesktop.org/virgl/virglrenderer/issues/86 Signed-off-by: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
f1f3640f6f
commit
b0b3de2be7
|
@ -129,6 +129,7 @@
|
|||
#include "util/disk_cache.h"
|
||||
#include "util/strtod.h"
|
||||
#include "stencil.h"
|
||||
#include "shaderimage.h"
|
||||
#include "texcompress_s3tc.h"
|
||||
#include "texstate.h"
|
||||
#include "transformfeedback.h"
|
||||
|
@ -1345,6 +1346,7 @@ _mesa_free_context_data( struct gl_context *ctx )
|
|||
_mesa_free_buffer_objects(ctx);
|
||||
_mesa_free_eval_data( ctx );
|
||||
_mesa_free_texture_data( ctx );
|
||||
_mesa_free_image_textures(ctx);
|
||||
_mesa_free_matrix_data( ctx );
|
||||
_mesa_free_pipeline_data(ctx);
|
||||
_mesa_free_program_data(ctx);
|
||||
|
|
|
@ -469,6 +469,16 @@ _mesa_init_image_units(struct gl_context *ctx)
|
|||
ctx->ImageUnits[i] = _mesa_default_image_unit(ctx);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_mesa_free_image_textures(struct gl_context *ctx)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ctx->ImageUnits); ++i)
|
||||
_mesa_reference_texobj(&ctx->ImageUnits[i].TexObj, NULL);
|
||||
}
|
||||
|
||||
GLboolean
|
||||
_mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u)
|
||||
{
|
||||
|
|
|
@ -68,6 +68,9 @@ _mesa_default_image_unit(struct gl_context *ctx);
|
|||
void
|
||||
_mesa_init_image_units(struct gl_context *ctx);
|
||||
|
||||
void
|
||||
_mesa_free_image_textures(struct gl_context *ctx);
|
||||
|
||||
/**
|
||||
* Return GL_TRUE if the state of the image unit passed as argument is valid
|
||||
* and access from the shader is allowed. Otherwise loads from this unit
|
||||
|
|
Loading…
Reference in New Issue