aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSergii Romantsov <[email protected]>2019-05-27 16:45:35 +0300
committerSergii Romantsov <[email protected]>2019-07-16 13:48:47 +0300
commit7417b432113cd5b542f5bb4efd6c2b6120157576 (patch)
tree1e23477b23ad15910a354420a0b790ae260ec6ec /src
parentafa102d65bb6df27b3cbbb78355101cdd2e139cf (diff)
meta: memory leak of CopyPixels usage
Meta of CopyPixel generates a buffer object but does not free it on cleanup. Fixes: 37d11b13ce1d (meta: Don't pollute the buffer object namespace in _mesa_meta_setup_vertex_objects) Signed-off-by: Sergii Romantsov <[email protected]> Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/mesa/drivers/common/meta.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index 302c5fffeb9..18ed6e7f168 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -104,6 +104,8 @@ static void cleanup_temp_texture(struct gl_context *ctx,
struct temp_texture *tex);
static void meta_glsl_clear_cleanup(struct gl_context *ctx,
struct clear_state *clear);
+static void meta_copypix_cleanup(struct gl_context *ctx,
+ struct copypix_state *copypix);
static void meta_decompress_cleanup(struct gl_context *ctx,
struct decompress_state *decompress);
static void meta_drawpix_cleanup(struct gl_context *ctx,
@@ -422,6 +424,7 @@ _mesa_meta_free(struct gl_context *ctx)
_mesa_make_current(ctx, NULL, NULL);
_mesa_meta_glsl_blit_cleanup(ctx, &ctx->Meta->Blit);
meta_glsl_clear_cleanup(ctx, &ctx->Meta->Clear);
+ meta_copypix_cleanup(ctx, &ctx->Meta->CopyPix);
_mesa_meta_glsl_generate_mipmap_cleanup(ctx, &ctx->Meta->Mipmap);
cleanup_temp_texture(ctx, &ctx->Meta->TempTex);
meta_decompress_cleanup(ctx, &ctx->Meta->Decompress);
@@ -1595,6 +1598,17 @@ meta_glsl_clear_cleanup(struct gl_context *ctx, struct clear_state *clear)
}
}
+static void
+meta_copypix_cleanup(struct gl_context *ctx, struct copypix_state *copypix)
+{
+ if (copypix->VAO == 0)
+ return;
+ _mesa_DeleteVertexArrays(1, &copypix->VAO);
+ copypix->VAO = 0;
+ _mesa_reference_buffer_object(ctx, &copypix->buf_obj, NULL);
+}
+
+
/**
* Given a bitfield of BUFFER_BIT_x draw buffers, call glDrawBuffers to
* set GL to only draw to those buffers.