From 2d3f92e881dbd9d1aff17bba0d182c8ef645a2ca Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 13 Dec 2013 14:36:17 -0800 Subject: meta: Release resources used by decompress_texture_image decompress_texture_image creates an FBO, an RBO, a VBO, a VAO, and a sampler object, but none of them are ever released. Later patches will add program objects, exacerbating the problem. Leaking piles of memory is generally frowned upon. Signed-off-by: Ian Romanick Reviewed-by: Brian Paul Cc: "9.1 9.2 10.0" --- src/mesa/drivers/common/meta.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index eb94deb6172..2ef27dec9d4 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -355,6 +355,7 @@ static void cleanup_temp_texture(struct gl_context *ctx, struct temp_texture *te static void meta_glsl_clear_cleanup(struct gl_context *ctx, struct clear_state *clear); static void meta_glsl_generate_mipmap_cleanup(struct gl_context *ctx, struct gen_mipmap_state *mipmap); +static void meta_decompress_cleanup(struct decompress_state *decompress); static GLuint compile_shader_with_debug(struct gl_context *ctx, GLenum target, const GLcharARB *source) @@ -449,6 +450,7 @@ _mesa_meta_free(struct gl_context *ctx) meta_glsl_clear_cleanup(ctx, &ctx->Meta->Clear); meta_glsl_generate_mipmap_cleanup(ctx, &ctx->Meta->Mipmap); cleanup_temp_texture(ctx, &ctx->Meta->TempTex); + meta_decompress_cleanup(&ctx->Meta->Decompress); if (old_context) _mesa_make_current(old_context, old_context->WinSysDrawBuffer, old_context->WinSysReadBuffer); else @@ -3945,6 +3947,25 @@ _mesa_meta_CopyTexSubImage(struct gl_context *ctx, GLuint dims, } +static void +meta_decompress_cleanup(struct decompress_state *decompress) +{ + if (decompress->FBO != 0) { + _mesa_DeleteFramebuffers(1, &decompress->FBO); + _mesa_DeleteRenderbuffers(1, &decompress->RBO); + } + + if (decompress->ArrayObj != 0) { + _mesa_DeleteVertexArrays(1, &decompress->ArrayObj); + _mesa_DeleteBuffers(1, &decompress->VBO); + } + + if (decompress->Sampler != 0) + _mesa_DeleteSamplers(1, &decompress->Sampler); + + memset(decompress, 0, sizeof(*decompress)); +} + /** * Decompress a texture image by drawing a quad with the compressed * texture and reading the pixels out of the color buffer. -- cgit v1.2.3