From 8b71c6d0d1fbffd31c30209a2382c9724b322f08 Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Sun, 17 Mar 2024 11:28:13 +0100 Subject: [PATCH] lavapipe: Fix a memory leak in lvp_push_internal_buffer Reviewed-By: Mike Blumenkrantz Part-of: --- src/gallium/frontends/lavapipe/lvp_execute.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index 75bc82b3609..e051487e7b1 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -198,6 +198,7 @@ struct rendering_state { void *tess_states[2]; struct util_dynarray push_desc_sets; + struct util_dynarray internal_buffers; struct lvp_pipeline *exec_graph; }; @@ -4217,6 +4218,8 @@ lvp_push_internal_buffer(struct rendering_state *state, gl_shader_stage stage, u state->pctx->set_shader_buffers(state->pctx, stage, 0, 1, &buffer, 0x1); + util_dynarray_append(&state->internal_buffers, struct pipe_resource *, buffer.buffer); + return mem; } @@ -4976,6 +4979,7 @@ VkResult lvp_execute_cmds(struct lvp_device *device, state->sample_mask = UINT32_MAX; state->poison_mem = device->poison_mem; util_dynarray_init(&state->push_desc_sets, NULL); + util_dynarray_init(&state->internal_buffers, NULL); /* default values */ state->min_sample_shading = 1; @@ -5016,6 +5020,11 @@ VkResult lvp_execute_cmds(struct lvp_device *device, util_dynarray_fini(&state->push_desc_sets); + util_dynarray_foreach (&state->internal_buffers, struct pipe_resource *, buffer) + pipe_resource_reference(buffer, NULL); + + util_dynarray_fini(&state->internal_buffers); + for (unsigned i = 0; i < ARRAY_SIZE(state->desc_buffers); i++) pipe_resource_reference(&state->desc_buffers[i], NULL);