[Mesa-dev] [PATCH] r600g: Fix ARB_texture_rgb10_a2ui support in big-endian

Oded Gabbay oded.gabbay at gmail.com
Sat Feb 27 20:48:22 UTC 2016


This patch enables the correct detection of PIPE_FORMAT_R10G10B10A2_UINT
and PIPE_FORMAT_B10G10R10A2_UINT formats in r600g in big-endian mode, by
adjusting the order of channels in various functions.

This enables support for ARB_texture_rgb10_a2ui, which otherwise is not
detected as supported.

Signed-off-by: Oded Gabbay <oded.gabbay at gmail.com>
---
 src/gallium/drivers/r600/r600_state_common.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
index b231d1e..b02b6a9 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -2468,10 +2468,13 @@ uint32_t r600_translate_texformat(struct pipe_screen *screen,
 				result = FMT_1_5_5_5;
 				goto out_word4;
 			}
-			if (desc->channel[0].size == 10 &&
-			    desc->channel[1].size == 10 &&
-			    desc->channel[2].size == 10 &&
-			    desc->channel[3].size == 2) {
+			if ((desc->channel[1].size == 10 &&
+				  desc->channel[2].size == 10) &&
+					((desc->channel[0].size == 10 &&
+					  desc->channel[3].size == 2) ||
+					 (R600_BIG_ENDIAN &&
+					  desc->channel[0].size == 2 &&
+					  desc->channel[3].size == 10))) {
 				result = FMT_2_10_10_10;
 				goto out_word4;
 			}
@@ -2694,9 +2697,11 @@ uint32_t r600_translate_colorformat(enum chip_class chip, enum pipe_format forma
 			}
 		} else if (HAS_SIZE(5,5,5,1)) {
 			return V_0280A0_COLOR_1_5_5_5;
-		} else if (HAS_SIZE(10,10,10,2)) {
+		} else if (HAS_SIZE(10,10,10,2) ||
+				(R600_BIG_ENDIAN && HAS_SIZE(2,10,10,10))) {
 			return V_0280A0_COLOR_2_10_10_10;
 		}
+
 		break;
 	}
 	return ~0U;
-- 
2.5.0



More information about the mesa-dev mailing list