This patch modifies r600_colorformat_endian_swap(), so for 16-bit and for 32-bit buffers, the endianess configuration will be determined not only by the color/texture format, but also by the resource's endian_format value.
The only exception is for 8_8_8_8 formats, which are always set to little-endian, because for them, gallium sets a different pipe_format based on endianess Signed-off-by: Oded Gabbay <oded.gab...@gmail.com> --- src/gallium/drivers/r600/r600_state_common.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c index 42838c2..2535c2c 100644 --- a/src/gallium/drivers/r600/r600_state_common.c +++ b/src/gallium/drivers/r600/r600_state_common.c @@ -2691,12 +2691,13 @@ uint32_t r600_colorformat_endian_swap(uint32_t colorformat, enum pipe_endian end return ENDIAN_NONE; /* 16-bit buffers. */ - case V_0280A0_COLOR_5_6_5: - case V_0280A0_COLOR_1_5_5_5: case V_0280A0_COLOR_4_4_4_4: - case V_0280A0_COLOR_16: case V_0280A0_COLOR_8_8: - return ENDIAN_8IN16; + case V_0280A0_COLOR_16: + case V_0280A0_COLOR_5_6_5: + case V_0280A0_COLOR_1_5_5_5: + return (endianformat == PIPE_ENDIAN_BIG) ? ENDIAN_8IN16 : ENDIAN_NONE; + break; /* 32-bit buffers. */ case V_0280A0_COLOR_8_8_8_8: @@ -2707,13 +2708,14 @@ uint32_t r600_colorformat_endian_swap(uint32_t colorformat, enum pipe_endian end */ return ENDIAN_NONE; - case V_0280A0_COLOR_2_10_10_10: case V_0280A0_COLOR_8_24: case V_0280A0_COLOR_24_8: case V_0280A0_COLOR_32_FLOAT: - case V_0280A0_COLOR_16_16_FLOAT: case V_0280A0_COLOR_16_16: - return ENDIAN_8IN32; + case V_0280A0_COLOR_2_10_10_10: + case V_0280A0_COLOR_16_16_FLOAT: + return (endianformat == PIPE_ENDIAN_BIG) ? ENDIAN_8IN32 : ENDIAN_NONE; + break; /* 64-bit buffers. */ case V_0280A0_COLOR_16_16_16_16: -- 2.5.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev