For some formats we need to take endian_format into account when configuring swapping for color buffers.
Signed-off-by: Oded Gabbay <oded.gab...@gmail.com> --- src/gallium/drivers/r600/r600_state_common.c | 5 ++++- src/gallium/drivers/radeon/r600_texture.c | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c index 2535c2c..2e2f67e 100644 --- a/src/gallium/drivers/r600/r600_state_common.c +++ b/src/gallium/drivers/r600/r600_state_common.c @@ -2639,7 +2639,10 @@ uint32_t r600_translate_colorformat(enum chip_class chip, enum pipe_format forma return V_0280A0_COLOR_32_32; } } else if (HAS_SIZE(8,24,0,0)) { - return V_0280A0_COLOR_24_8; + if (format == PIPE_FORMAT_Z24_UNORM_S8_UINT || format == PIPE_FORMAT_Z24X8_UNORM) + return (endianformat == PIPE_ENDIAN_BIG ? V_0280A0_COLOR_8_24 : V_0280A0_COLOR_24_8); + else + return V_0280A0_COLOR_24_8; } else if (HAS_SIZE(24,8,0,0)) { return V_0280A0_COLOR_8_24; } diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c index 537f893..cd2f775 100644 --- a/src/gallium/drivers/radeon/r600_texture.c +++ b/src/gallium/drivers/radeon/r600_texture.c @@ -1446,7 +1446,10 @@ unsigned r600_translate_colorswap(enum pipe_format format, enum pipe_endian endi else if ((HAS_SWIZZLE(0,Y) && HAS_SWIZZLE(1,X)) || (HAS_SWIZZLE(0,Y) && HAS_SWIZZLE(1,NONE)) || (HAS_SWIZZLE(0,NONE) && HAS_SWIZZLE(1,X))) - return V_0280A0_SWAP_STD_REV; /* YX__ */ + if (format == PIPE_FORMAT_Z24_UNORM_S8_UINT || format == PIPE_FORMAT_Z24X8_UNORM) + return (endianformat == PIPE_ENDIAN_BIG ? V_0280A0_SWAP_STD : V_0280A0_SWAP_STD_REV); + else + return V_0280A0_SWAP_STD_REV; /* YX__ */ else if (HAS_SWIZZLE(0,X) && HAS_SWIZZLE(3,Y)) return V_0280A0_SWAP_ALT; /* X__Y */ else if (HAS_SWIZZLE(0,Y) && HAS_SWIZZLE(3,X)) @@ -1454,7 +1457,8 @@ unsigned r600_translate_colorswap(enum pipe_format format, enum pipe_endian endi break; case 3: if (HAS_SWIZZLE(0,X)) - return V_0280A0_SWAP_STD; /* XYZ */ + /* XYZ */ + return (endianformat == PIPE_ENDIAN_BIG ? V_0280A0_SWAP_STD_REV : V_0280A0_SWAP_STD); else if (HAS_SWIZZLE(0,Z)) return V_0280A0_SWAP_STD_REV; /* ZYX */ break; @@ -1467,7 +1471,8 @@ unsigned r600_translate_colorswap(enum pipe_format format, enum pipe_endian endi else if (HAS_SWIZZLE(1,Y) && HAS_SWIZZLE(2,X)) return V_0280A0_SWAP_ALT; /* ZYXW */ else if (HAS_SWIZZLE(1,Z) && HAS_SWIZZLE(2,W)) - return V_0280A0_SWAP_ALT_REV; /* YZWX */ + /* YZWX */ + return (endianformat == PIPE_ENDIAN_BIG ? V_0280A0_SWAP_ALT : V_0280A0_SWAP_ALT_REV); break; } return ~0U; -- 2.5.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev