[Mesa-stable] [PATCH v2] r600g: Fix ARB_texture_rgb10_a2ui support in big-endian
Oded Gabbay
oded.gabbay at gmail.com
Tue Mar 1 12:11:28 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.
Because the swapping doesn't happen on component boundaries for these
formats, the GPU H/W needs to be configured differently for LE/BE.
Therefore, we need to use a different color format for BE - V_0280A0_COLOR_10_10_10_2
This enables support for ARB_texture_rgb10_a2ui, which otherwise is not
detected as supported.
Tested using piglit texwrap with GL_ARB_texture_rgb10_a2ui.
v2:
- Used the correct color format for R10G10B10A2 on
BE (V_0280A0_COLOR_10_10_10_2) to configure the GPU
- Added detection of this color format in endian swap function
- removed blank line
Signed-off-by: Oded Gabbay <oded.gabbay at gmail.com>
Cc: "11.1 11.2" <mesa-stable at lists.freedesktop.org>
---
src/gallium/drivers/r600/r600_state_common.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
index aa3a085..53cf972 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -2464,6 +2464,14 @@ uint32_t r600_translate_texformat(struct pipe_screen *screen,
result = FMT_2_10_10_10;
goto out_word4;
}
+ if (R600_BIG_ENDIAN &&
+ desc->channel[0].size == 2 &&
+ desc->channel[1].size == 10 &&
+ desc->channel[2].size == 10 &&
+ desc->channel[3].size == 10) {
+ result = FMT_10_10_10_2;
+ goto out_word4;
+ }
goto out_unknown;
}
goto out_unknown;
@@ -2685,6 +2693,8 @@ uint32_t r600_translate_colorformat(enum chip_class chip, enum pipe_format forma
return V_0280A0_COLOR_1_5_5_5;
} else if (HAS_SIZE(10,10,10,2)) {
return V_0280A0_COLOR_2_10_10_10;
+ } else if (R600_BIG_ENDIAN && HAS_SIZE(2,10,10,10)) {
+ return V_0280A0_COLOR_10_10_10_2;
}
break;
}
@@ -2717,6 +2727,7 @@ uint32_t r600_colorformat_endian_swap(uint32_t colorformat)
*/
return ENDIAN_NONE;
+ case V_0280A0_COLOR_10_10_10_2:
case V_0280A0_COLOR_2_10_10_10:
case V_0280A0_COLOR_8_24:
case V_0280A0_COLOR_24_8:
--
2.5.0
More information about the mesa-stable
mailing list