[Mesa-dev] [PATCH 4/4] radeonsi: simplify DCC format categories

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Mar 28 07:46:25 UTC 2018


Patches 2-4 are:

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

On 03/27/2018 02:39 AM, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
> 
> ---
>   src/gallium/drivers/radeon/r600_texture.c | 29 +++++++++--------------------
>   1 file changed, 9 insertions(+), 20 deletions(-)
> 
> diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c
> index 1614df63c98..eb6706c9dcd 100644
> --- a/src/gallium/drivers/radeon/r600_texture.c
> +++ b/src/gallium/drivers/radeon/r600_texture.c
> @@ -1875,64 +1875,53 @@ static const struct u_resource_vtbl r600_texture_vtbl =
>   	NULL,				/* get_handle */
>   	r600_texture_destroy,		/* resource_destroy */
>   	r600_texture_transfer_map,	/* transfer_map */
>   	u_default_transfer_flush_region, /* transfer_flush_region */
>   	r600_texture_transfer_unmap,	/* transfer_unmap */
>   };
>   
>   /* DCC channel type categories within which formats can be reinterpreted
>    * while keeping the same DCC encoding. The swizzle must also match. */
>   enum dcc_channel_type {
> -	dcc_channel_float32,
> -	dcc_channel_uint32,
> -	dcc_channel_sint32,
> -	dcc_channel_float16,
> -	dcc_channel_uint16,
> -	dcc_channel_sint16,
> +	dcc_channel_float,
> +	/* uint and sint can be merged if we never use TC-compatible DCC clear
> +	 * encoding with the clear value of 1. */
> +	dcc_channel_uint,
> +	dcc_channel_sint,
>   	dcc_channel_uint_10_10_10_2,
> -	dcc_channel_uint8,
> -	dcc_channel_sint8,
>   	dcc_channel_incompatible,
>   };
>   
>   /* Return the type of DCC encoding. */
>   static enum dcc_channel_type
>   vi_get_dcc_channel_type(const struct util_format_description *desc)
>   {
>   	int i;
>   
>   	/* Find the first non-void channel. */
>   	for (i = 0; i < desc->nr_channels; i++)
>   		if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID)
>   			break;
>   	if (i == desc->nr_channels)
>   		return dcc_channel_incompatible;
>   
>   	switch (desc->channel[i].size) {
>   	case 32:
> -		if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT)
> -			return dcc_channel_float32;
> -		if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
> -			return dcc_channel_uint32;
> -		return dcc_channel_sint32;
>   	case 16:
> +	case 8:
>   		if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT)
> -			return dcc_channel_float16;
> +			return dcc_channel_float;
>   		if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
> -			return dcc_channel_uint16;
> -		return dcc_channel_sint16;
> +			return dcc_channel_uint;
> +		return dcc_channel_sint;
>   	case 10:
>   		return dcc_channel_uint_10_10_10_2;
> -	case 8:
> -		if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
> -			return dcc_channel_uint8;
> -		return dcc_channel_sint8;
>   	default:
>   		return dcc_channel_incompatible;
>   	}
>   }
>   
>   /* Return if it's allowed to reinterpret one format as another with DCC enabled. */
>   bool vi_dcc_formats_compatible(enum pipe_format format1,
>   			       enum pipe_format format2)
>   {
>   	const struct util_format_description *desc1, *desc2;
> 


More information about the mesa-dev mailing list