From 58d2afa2232060b88f9c444ce7a0d6e63c841bb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Fri, 7 Mar 2014 21:52:51 +0100 Subject: [PATCH] radeonsi: fix leaking the bound state on destruction v2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v2: rebased on stale pointer fixes Signed-off-by: Christian König Reviewed-by: Marek Olšák --- src/gallium/drivers/radeonsi/si_pipe.c | 2 ++ src/gallium/drivers/radeonsi/si_pm4.c | 7 +++++++ src/gallium/drivers/radeonsi/si_pm4.h | 1 + 3 files changed, 10 insertions(+) diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index ac9e49a9cb8..1a44492b63c 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -102,6 +102,8 @@ static void si_destroy_context(struct pipe_context *context) util_blitter_destroy(sctx->blitter); + si_pm4_cleanup(sctx); + r600_common_context_cleanup(&sctx->b); FREE(sctx); } diff --git a/src/gallium/drivers/radeonsi/si_pm4.c b/src/gallium/drivers/radeonsi/si_pm4.c index 51bf67eccb7..0a5673ba917 100644 --- a/src/gallium/drivers/radeonsi/si_pm4.c +++ b/src/gallium/drivers/radeonsi/si_pm4.c @@ -251,3 +251,10 @@ void si_pm4_reset_emitted(struct si_context *sctx) { memset(&sctx->emitted, 0, sizeof(sctx->emitted)); } + +void si_pm4_cleanup(struct si_context *sctx) +{ + for (int i = 0; i < NUMBER_OF_STATES; ++i) { + si_pm4_free_state(sctx, sctx->queued.array[i], i); + } +} diff --git a/src/gallium/drivers/radeonsi/si_pm4.h b/src/gallium/drivers/radeonsi/si_pm4.h index c9bc091173f..e1d0cac3b73 100644 --- a/src/gallium/drivers/radeonsi/si_pm4.h +++ b/src/gallium/drivers/radeonsi/si_pm4.h @@ -91,5 +91,6 @@ unsigned si_pm4_dirty_dw(struct si_context *sctx); void si_pm4_emit(struct si_context *sctx, struct si_pm4_state *state); void si_pm4_emit_dirty(struct si_context *sctx); void si_pm4_reset_emitted(struct si_context *sctx); +void si_pm4_cleanup(struct si_context *sctx); #endif