[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