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:
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user