From: Ian Romanick Date: Sat, 14 Dec 2013 19:58:45 +0000 (-0800) Subject: meta: Release resources used by _mesa_meta_DrawPixels X-Git-Tag: upstream/10.1.2~243 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fcb498302bff912ca4f3169d37cc04b58e77d0fa;p=platform%2Fupstream%2Fmesa.git meta: Release resources used by _mesa_meta_DrawPixels _mesa_meta_DrawPixels creates a VAO and (potentially) two fragment programs, but none of them are ever released. Leaking piles of memory is generally frowned upon. Signed-off-by: Ian Romanick Reviewed-by: Brian Paul Cc: "9.1 9.2 10.0" --- diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 2ef27de..6185e80 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -356,6 +356,7 @@ static void meta_glsl_clear_cleanup(struct gl_context *ctx, struct clear_state * 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 void meta_drawpix_cleanup(struct drawpix_state *drawpix); static GLuint compile_shader_with_debug(struct gl_context *ctx, GLenum target, const GLcharARB *source) @@ -451,6 +452,7 @@ _mesa_meta_free(struct gl_context *ctx) meta_glsl_generate_mipmap_cleanup(ctx, &ctx->Meta->Mipmap); cleanup_temp_texture(ctx, &ctx->Meta->TempTex); meta_decompress_cleanup(&ctx->Meta->Decompress); + meta_drawpix_cleanup(&ctx->Meta->DrawPix); if (old_context) _mesa_make_current(old_context, old_context->WinSysDrawBuffer, old_context->WinSysReadBuffer); else @@ -2545,7 +2547,24 @@ _mesa_meta_CopyPixels(struct gl_context *ctx, GLint srcX, GLint srcY, _mesa_meta_end(ctx); } +static void +meta_drawpix_cleanup(struct drawpix_state *drawpix) +{ + if (drawpix->ArrayObj != 0) { + _mesa_DeleteVertexArrays(1, &drawpix->ArrayObj); + drawpix->ArrayObj = 0; + } + if (drawpix->StencilFP != 0) { + _mesa_DeleteProgramsARB(1, &drawpix->StencilFP); + drawpix->StencilFP = 0; + } + + if (drawpix->DepthFP != 0) { + _mesa_DeleteProgramsARB(1, &drawpix->DepthFP); + drawpix->DepthFP = 0; + } +} /** * When the glDrawPixels() image size is greater than the max rectangle