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

Marek Olšák maraeo at gmail.com
Tue Mar 27 00:39:23 UTC 2018


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;
-- 
2.15.1



More information about the mesa-dev mailing list