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 <ian.d.romanick@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Cc: "9.1 9.2 10.0" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit fcb498302b)
This commit is contained in:
Ian Romanick 2013-12-14 11:58:45 -08:00 committed by Carl Worth
parent c1bcdcde1c
commit a4a8af4cbb

View file

@ -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
@ -2491,7 +2493,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