[Mesa-dev] [PATCH 15/15] radeonsi: properly destroy the GS copy shader and scratch_bo for compute

Emil Velikov emil.l.velikov at gmail.com
Sat Sep 27 08:25:07 PDT 2014


Hi Marek,

On the 10.2 tree struct si_shader lacks the scratch_bo member, while
gs_copy_shader is around. Can you let me know if we should drop the
scratch_bo unref line or alternatively can you port the commit against 10.2

Thanks
Emil

On 19/09/14 21:17, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
> 
> Cc: 10.2 10.3 <mesa-stable at lists.freedesktop.org>
> ---
>  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 7aa65c9..94db1dc 100644
> --- a/src/gallium/drivers/radeonsi/si_shader.c
> +++ b/src/gallium/drivers/radeonsi/si_shader.c
> @@ -2973,5 +2973,9 @@ out:
>  
>  void si_shader_destroy(struct pipe_context *ctx, struct si_shader *shader)
>  {
> +	if (shader->gs_copy_shader)
> +		si_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 2aa9aad..ed90f13 100644
> --- a/src/gallium/drivers/radeonsi/si_state.c
> +++ b/src/gallium/drivers/radeonsi/si_state.c
> @@ -2403,9 +2403,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);
> @@ -2418,7 +2419,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)
>  {
> 



More information about the mesa-dev mailing list