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

Reply via email to