Module: Mesa Branch: main Commit: dd54e9125ad6d8160450e4364cc900a265d85198 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd54e9125ad6d8160450e4364cc900a265d85198
Author: Sagar Ghuge <[email protected]> Date: Wed Feb 24 23:23:57 2021 -0800 isl: Add helper to return render compression format encoding v2: - Fix typo (Marcin) - Fix comment (Nanley) Signed-off-by: Sagar Ghuge <[email protected]> Reviewed-by: Nanley Chery <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12686> --- src/intel/isl/isl.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/intel/isl/isl.h | 1 + 2 files changed, 101 insertions(+) diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c index 55b9c5ba94b..0daba4bbbfe 100644 --- a/src/intel/isl/isl.c +++ b/src/intel/isl/isl.c @@ -3403,3 +3403,103 @@ isl_format_get_aux_map_encoding(enum isl_format format) return 0; } } + +/* + * Returns compression format encoding for Unified Lossless Compression + */ +uint8_t +isl_get_render_compression_format(enum isl_format format) +{ + /* From the Bspec, Enumeration_RenderCompressionFormat section (53726): */ + switch(format) { + case ISL_FORMAT_R32G32B32A32_FLOAT: + case ISL_FORMAT_R32G32B32X32_FLOAT: + case ISL_FORMAT_R32G32B32A32_SINT: + return 0x0; + case ISL_FORMAT_R32G32B32A32_UINT: + return 0x1; + case ISL_FORMAT_R32G32_FLOAT: + case ISL_FORMAT_R32G32_SINT: + return 0x2; + case ISL_FORMAT_R32G32_UINT: + return 0x3; + case ISL_FORMAT_R16G16B16A16_UNORM: + case ISL_FORMAT_R16G16B16X16_UNORM: + case ISL_FORMAT_R16G16B16A16_UINT: + return 0x4; + case ISL_FORMAT_R16G16B16A16_SNORM: + case ISL_FORMAT_R16G16B16A16_SINT: + case ISL_FORMAT_R16G16B16A16_FLOAT: + case ISL_FORMAT_R16G16B16X16_FLOAT: + return 0x5; + case ISL_FORMAT_R16G16_UNORM: + case ISL_FORMAT_R16G16_UINT: + return 0x6; + case ISL_FORMAT_R16G16_SNORM: + case ISL_FORMAT_R16G16_SINT: + case ISL_FORMAT_R16G16_FLOAT: + return 0x7; + case ISL_FORMAT_B8G8R8A8_UNORM: + case ISL_FORMAT_B8G8R8X8_UNORM: + case ISL_FORMAT_B8G8R8A8_UNORM_SRGB: + case ISL_FORMAT_B8G8R8X8_UNORM_SRGB: + case ISL_FORMAT_R8G8B8A8_UNORM: + case ISL_FORMAT_R8G8B8X8_UNORM: + case ISL_FORMAT_R8G8B8A8_UNORM_SRGB: + case ISL_FORMAT_R8G8B8X8_UNORM_SRGB: + case ISL_FORMAT_R8G8B8A8_UINT: + return 0x8; + case ISL_FORMAT_R8G8B8A8_SNORM: + case ISL_FORMAT_R8G8B8A8_SINT: + return 0x9; + case ISL_FORMAT_B5G6R5_UNORM: + case ISL_FORMAT_B5G6R5_UNORM_SRGB: + case ISL_FORMAT_B5G5R5A1_UNORM: + case ISL_FORMAT_B5G5R5A1_UNORM_SRGB: + case ISL_FORMAT_B4G4R4A4_UNORM: + case ISL_FORMAT_B4G4R4A4_UNORM_SRGB: + case ISL_FORMAT_B5G5R5X1_UNORM: + case ISL_FORMAT_B5G5R5X1_UNORM_SRGB: + case ISL_FORMAT_A1B5G5R5_UNORM: + case ISL_FORMAT_A4B4G4R4_UNORM: + case ISL_FORMAT_R8G8_UNORM: + case ISL_FORMAT_R8G8_UINT: + return 0xA; + case ISL_FORMAT_R8G8_SNORM: + case ISL_FORMAT_R8G8_SINT: + return 0xB; + case ISL_FORMAT_R10G10B10A2_UNORM: + case ISL_FORMAT_R10G10B10A2_UNORM_SRGB: + case ISL_FORMAT_R10G10B10_FLOAT_A2_UNORM: + case ISL_FORMAT_R10G10B10A2_UINT: + case ISL_FORMAT_B10G10R10A2_UNORM: + case ISL_FORMAT_B10G10R10X2_UNORM: + case ISL_FORMAT_B10G10R10A2_UNORM_SRGB: + return 0xC; + case ISL_FORMAT_R11G11B10_FLOAT: + return 0xD; + case ISL_FORMAT_R32_SINT: + case ISL_FORMAT_R32_FLOAT: + return 0x10; + case ISL_FORMAT_R32_UINT: + case ISL_FORMAT_R24_UNORM_X8_TYPELESS: + return 0x11; + case ISL_FORMAT_R16_UNORM: + case ISL_FORMAT_R16_UINT: + return 0x14; + case ISL_FORMAT_R16_SNORM: + case ISL_FORMAT_R16_SINT: + case ISL_FORMAT_R16_FLOAT: + return 0x15; + case ISL_FORMAT_R8_UNORM: + case ISL_FORMAT_R8_UINT: + case ISL_FORMAT_A8_UNORM: + return 0x18; + case ISL_FORMAT_R8_SNORM: + case ISL_FORMAT_R8_SINT: + return 0x19; + default: + unreachable("Unsupported render compression format!"); + return 0; + } +} diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h index 1aa5dc5ab36..fcd0d556aeb 100644 --- a/src/intel/isl/isl.h +++ b/src/intel/isl/isl.h @@ -1820,6 +1820,7 @@ bool isl_formats_are_ccs_e_compatible(const struct intel_device_info *devinfo, enum isl_format format1, enum isl_format format2); uint8_t isl_format_get_aux_map_encoding(enum isl_format format); +uint8_t isl_get_render_compression_format(enum isl_format format); bool isl_format_has_unorm_channel(enum isl_format fmt) ATTRIBUTE_CONST; bool isl_format_has_snorm_channel(enum isl_format fmt) ATTRIBUTE_CONST;
