[Mesa-dev] [PATCH] radeonsi: add DCC buffer for sampler views on new CS

eocallaghan at alterapraxis.com eocallaghan at alterapraxis.com
Sun Jan 24 10:42:19 PST 2016


Reviewed-by: Edward O'Callaghan <eocallaghan at alterapraxis.com>

On 2016-01-25 03:40, Nicolai Hähnle wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
> 
> This fixes a VM fault and possible lockup in high memory pressure 
> situations.
> 
> Cc: "11.0 11.1" <mesa-stable at lists.freedesktop.org>
> ---
>  src/gallium/drivers/radeonsi/si_descriptors.c | 33 
> +++++++++++++++------------
>  1 file changed, 18 insertions(+), 15 deletions(-)
> 
> diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c
> b/src/gallium/drivers/radeonsi/si_descriptors.c
> index aad836d..6c79673 100644
> --- a/src/gallium/drivers/radeonsi/si_descriptors.c
> +++ b/src/gallium/drivers/radeonsi/si_descriptors.c
> @@ -138,6 +138,22 @@ static void si_release_sampler_views(struct
> si_sampler_views *views)
>  	si_release_descriptors(&views->desc);
>  }
> 
> +static void si_sampler_view_add_buffers(struct si_context *sctx,
> +					struct si_sampler_view *rview)
> +{
> +	if (rview->resource) {
> +		radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
> +			rview->resource, RADEON_USAGE_READ,
> +			r600_get_sampler_view_priority(rview->resource));
> +	}
> +
> +	if (rview->dcc_buffer && rview->dcc_buffer != rview->resource) {
> +		radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
> +			rview->dcc_buffer, RADEON_USAGE_READ,
> +			RADEON_PRIO_DCC);
> +	}
> +}
> +
>  static void si_sampler_views_begin_new_cs(struct si_context *sctx,
>  					  struct si_sampler_views *views)
>  {
> @@ -149,12 +165,7 @@ static void si_sampler_views_begin_new_cs(struct
> si_context *sctx,
>  		struct si_sampler_view *rview =
>  			(struct si_sampler_view*)views->views[i];
> 
> -		if (!rview->resource)
> -			continue;
> -
> -		radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
> -				      rview->resource, RADEON_USAGE_READ,
> -				      r600_get_sampler_view_priority(rview->resource));
> +		si_sampler_view_add_buffers(sctx, rview);
>  	}
> 
>  	if (!views->desc.buffer)
> @@ -176,15 +187,7 @@ static void si_set_sampler_view(struct si_context
> *sctx, unsigned shader,
>  		struct si_sampler_view *rview =
>  			(struct si_sampler_view*)view;
> 
> -		if (rview->resource)
> -			radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
> -				rview->resource, RADEON_USAGE_READ,
> -				r600_get_sampler_view_priority(rview->resource));
> -
> -		if (rview->dcc_buffer && rview->dcc_buffer != rview->resource)
> -			radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
> -				rview->dcc_buffer, RADEON_USAGE_READ,
> -				RADEON_PRIO_DCC);
> +		si_sampler_view_add_buffers(sctx, rview);
> 
>  		pipe_sampler_view_reference(&views->views[slot], view);
>  		memcpy(views->desc.list + slot*8, view_desc, 8*4);



More information about the mesa-dev mailing list