Module: Mesa Branch: 10.3 Commit: 8e2d0f59f77bf2605686977febf3ac4fa5b4bec3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8e2d0f59f77bf2605686977febf3ac4fa5b4bec3
Author: Marek Olšák <marek.ol...@amd.com> Date: Thu Sep 18 23:48:04 2014 +0200 radeonsi: properly destroy the GS copy shader and scratch_bo for compute Cc: 10.2 10.3 <mesa-sta...@lists.freedesktop.org> Reviewed-by: Michel Dänzer <michel.daen...@amd.com> (cherry picked from commit dc05a9e4e089d66a2ffe8919857ad9660e108c28) [Emil Velikov: remove unref scratch_bo, s/si_shader/si_pipe_shader/] Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> --- src/gallium/drivers/radeonsi/si_shader.c | 4 ++++ src/gallium/drivers/radeonsi/si_state.c | 7 ++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 08ba8b0..23109dc 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -2894,5 +2894,9 @@ out: void si_pipe_shader_destroy(struct pipe_context *ctx, struct si_pipe_shader *shader) { + if (shader->gs_copy_shader) + si_pipe_shader_destroy(ctx, shader->gs_copy_shader); + r600_resource_reference(&shader->bo, NULL); + r600_resource_reference(&shader->scratch_bo, NULL); } diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 571c487..0ed044f 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -2316,9 +2316,10 @@ static void si_delete_shader_selector(struct pipe_context *ctx, while (p) { c = p->next_variant; - if (sel->type == PIPE_SHADER_GEOMETRY) + if (sel->type == PIPE_SHADER_GEOMETRY) { si_pm4_delete_state(sctx, gs, p->pm4); - else if (sel->type == PIPE_SHADER_FRAGMENT) + si_pm4_delete_state(sctx, vs, p->gs_copy_shader->pm4); + } else if (sel->type == PIPE_SHADER_FRAGMENT) si_pm4_delete_state(sctx, ps, p->pm4); else if (p->key.vs.as_es) si_pm4_delete_state(sctx, es, p->pm4); @@ -2331,7 +2332,7 @@ static void si_delete_shader_selector(struct pipe_context *ctx, free(sel->tokens); free(sel); - } +} static void si_delete_vs_shader(struct pipe_context *ctx, void *state) { _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit