pan: Add 16 bit AFBC support (v10+ only)

Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35771>
This commit is contained in:
Eric R. Smith 2025-06-25 17:15:56 +00:00 committed by Marge Bot
parent 7a1ef0cf85
commit 55735b6146
4 changed files with 51 additions and 0 deletions

View file

@ -1222,16 +1222,22 @@
<enum name="AFBC Compression Mode">
<value name="R8" value="0"/>
<value name="R16" value="1"/>
<value name="R8G8" value="3"/>
<value name="R5G6B5" value="4"/>
<value name="R4G4B4A4" value="5"/>
<value name="R5G5B5A1" value="6"/>
<value name="R16G16" value="8"/>
<value name="R8G8B8" value="9"/>
<value name="R8G8B8A8" value="10"/>
<value name="R10G10B10A2" value="11"/>
<value name="R11G11B10" value="12"/>
<value name="S8" value="14"/>
<value name="X24S8" value="15"/>
<value name="R16G16B16" value="16"/>
<value name="R16G16B16A16" value="17"/>
<value name="R10G10B10A10" value="23"/>
<value name="YUV420 6c8" value="32"/>
<value name="YUV420 2c8" value="34"/>

View file

@ -1486,16 +1486,20 @@
<enum name="AFBC Compression Mode">
<value name="R8" value="0"/>
<value name="R16" value="1"/>
<value name="R8G8" value="3"/>
<value name="R5G6B5" value="4"/>
<value name="R4G4B4A4" value="5"/>
<value name="R5G5B5A1" value="6"/>
<value name="R16G16" value="8"/>
<value name="R8G8B8" value="9"/>
<value name="R8G8B8A8" value="10"/>
<value name="R10G10B10A2" value="11"/>
<value name="R11G11B10" value="12"/>
<value name="S8" value="14"/>
<value name="X24S8" value="15"/>
<value name="R16G16B16" value="16"/>
<value name="R16G16B16A16" value="17"/>
<value name="YUV420 6c8" value="32"/>
<value name="YUV420 2c8" value="34"/>

View file

@ -1788,16 +1788,20 @@
<enum name="AFBC Compression Mode">
<value name="R8" value="0"/>
<value name="R16" value="1"/>
<value name="R8G8" value="3"/>
<value name="R5G6B5" value="4"/>
<value name="R4G4B4A4" value="5"/>
<value name="R5G5B5A1" value="6"/>
<value name="R16G16" value="8"/>
<value name="R8G8B8" value="9"/>
<value name="R8G8B8A8" value="10"/>
<value name="R10G10B10A2" value="11"/>
<value name="R11G11B10" value="12"/>
<value name="S8" value="14"/>
<value name="X24S8" value="15"/>
<value name="R16G16B16" value="16"/>
<value name="R16G16B16A16" value="17"/>
<value name="YUV420 6c8" value="32"/>
<value name="YUV420 2c8" value="34"/>

View file

@ -80,6 +80,12 @@ enum pan_afbc_mode {
PAN_AFBC_MODE_R10G10B10A2,
PAN_AFBC_MODE_R11G11B10,
/* 16 bit modes, available on v10+ */
PAN_AFBC_MODE_R16,
PAN_AFBC_MODE_R16G16,
PAN_AFBC_MODE_R16G16B16,
PAN_AFBC_MODE_R16G16B16A16,
/* YUV special modes */
PAN_AFBC_MODE_YUV420_6C8,
PAN_AFBC_MODE_YUV420_2C8,
@ -538,6 +544,7 @@ pan_afbc_format(unsigned arch, enum pipe_format format, unsigned plane_idx)
format = util_format_any_to_unorm(format);
/* Luminance-alpha not supported for AFBC on v7+ */
/* 16 bit modes only available for AFBC on v10 and later */
switch (format) {
case PIPE_FORMAT_A8_UNORM:
case PIPE_FORMAT_L8_UNORM:
@ -547,6 +554,14 @@ pan_afbc_format(unsigned arch, enum pipe_format format, unsigned plane_idx)
return PAN_AFBC_MODE_INVALID;
else
break;
case PIPE_FORMAT_R16_UNORM:
case PIPE_FORMAT_R16G16_UNORM:
case PIPE_FORMAT_R16G16B16_UNORM:
case PIPE_FORMAT_R16G16B16A16_UNORM:
if (arch < 10)
return PAN_AFBC_MODE_INVALID;
else
break;
default:
break;
}
@ -576,6 +591,12 @@ pan_afbc_format(unsigned arch, enum pipe_format format, unsigned plane_idx)
case PIPE_FORMAT_S8_UINT:
return arch >= 9 ? PAN_AFBC_MODE_R8 : PAN_AFBC_MODE_INVALID;
case PIPE_FORMAT_R16_UNORM: return PAN_AFBC_MODE_R16;
case PIPE_FORMAT_R16G16_UNORM: return PAN_AFBC_MODE_R16G16;
case PIPE_FORMAT_R16G16B16_UNORM: return PAN_AFBC_MODE_R16G16B16;
case PIPE_FORMAT_R16G16B16A16_UNORM:
return PAN_AFBC_MODE_R16G16B16A16;
default: return PAN_AFBC_MODE_INVALID;
}
/* clang-format on */
@ -676,6 +697,16 @@ pan_afbc_compression_mode(enum pan_afbc_mode mode)
return MALI_AFBC_COMPRESSION_MODE_R10G10B10A2;
case PAN_AFBC_MODE_R11G11B10:
return MALI_AFBC_COMPRESSION_MODE_R11G11B10;
#if PAN_ARCH >= 10
case PAN_AFBC_MODE_R16:
return MALI_AFBC_COMPRESSION_MODE_R16;
case PAN_AFBC_MODE_R16G16:
return MALI_AFBC_COMPRESSION_MODE_R16G16;
case PAN_AFBC_MODE_R16G16B16:
return MALI_AFBC_COMPRESSION_MODE_R16G16B16;
case PAN_AFBC_MODE_R16G16B16A16:
return MALI_AFBC_COMPRESSION_MODE_R16G16B16A16;
#endif
case PAN_AFBC_MODE_YUV420_6C8:
return MALI_AFBC_COMPRESSION_MODE_YUV420_6C8;
case PAN_AFBC_MODE_YUV420_2C8:
@ -700,6 +731,12 @@ pan_afbc_compression_mode(enum pan_afbc_mode mode)
return MALI_AFBC_COMPRESSION_MODE_YUV422_2C10;
case PAN_AFBC_MODE_YUV422_1C10:
return MALI_AFBC_COMPRESSION_MODE_YUV422_1C10;
#if PAN_ARCH == 9
case PAN_AFBC_MODE_R16:
case PAN_AFBC_MODE_R16G16:
case PAN_AFBC_MODE_R16G16B16:
case PAN_AFBC_MODE_R16G16B16A16:
#endif
case PAN_AFBC_MODE_INVALID:
UNREACHABLE("Invalid AFBC format");
}