panfrost: Only allow AFBC(RGB) and AFBC(BGR) on v7

The AFBC texture/sample reswizzle will not work for formats with
component orders that are not canonical or RB-swapped, as moving the
alpha channel breaks opaque black border-colors.

Disable AFBC for formats with other component orders than RGB and BGR on
v7.

Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32515>
This commit is contained in:
Lars-Ivar Hesselberg Simonsen 2024-12-03 14:00:09 +01:00
parent 1aa3bb4e22
commit afbcf675c5

View file

@ -67,7 +67,7 @@
*/
static enum pipe_format
unswizzled_format(enum pipe_format format)
unswizzled_format(unsigned arch, enum pipe_format format)
{
switch (format) {
case PIPE_FORMAT_A8_UNORM:
@ -84,11 +84,13 @@ unswizzled_format(enum pipe_format format)
case PIPE_FORMAT_R8G8B8X8_UNORM:
case PIPE_FORMAT_B8G8R8A8_UNORM:
case PIPE_FORMAT_B8G8R8X8_UNORM:
return PIPE_FORMAT_R8G8B8A8_UNORM;
case PIPE_FORMAT_A8R8G8B8_UNORM:
case PIPE_FORMAT_X8R8G8B8_UNORM:
case PIPE_FORMAT_X8B8G8R8_UNORM:
case PIPE_FORMAT_A8B8G8R8_UNORM:
return PIPE_FORMAT_R8G8B8A8_UNORM;
/* v7 can only support AFBC for RGB and BGR */
return arch == 7 ? format : PIPE_FORMAT_R8G8B8A8_UNORM;
case PIPE_FORMAT_B5G6R5_UNORM:
return PIPE_FORMAT_R5G6B5_UNORM;
@ -101,9 +103,11 @@ unswizzled_format(enum pipe_format format)
case PIPE_FORMAT_B10G10R10X2_UNORM:
return PIPE_FORMAT_R10G10B10A2_UNORM;
case PIPE_FORMAT_A4B4G4R4_UNORM:
case PIPE_FORMAT_B4G4R4A4_UNORM:
return PIPE_FORMAT_R4G4B4A4_UNORM;
case PIPE_FORMAT_A4B4G4R4_UNORM:
/* v7 can only support AFBC for RGB and BGR */
return arch == 7 ? format : PIPE_FORMAT_R4G4B4A4_UNORM;
default:
return format;
@ -140,7 +144,7 @@ panfrost_afbc_format(unsigned arch, enum pipe_format format)
}
/* We handle swizzling orthogonally to AFBC */
format = unswizzled_format(format);
format = unswizzled_format(arch, format);
/* clang-format off */
switch (format) {