From 1134ad879997e956a2f7a35933ee1205bfb79d52 Mon Sep 17 00:00:00 2001 From: Valentine Burley Date: Fri, 23 Aug 2024 08:16:57 +0000 Subject: [PATCH] util/format: Add new 10-bit P010 RGB/planar formats Introduce three 10-bit formats: X6R10_UNORM, X6R10X6G10_UNORM, and X6G10_X6B10X6R10_420_UNORM. These formats allocate 10 bits for each color channel with 6 bits of padding to align with Vulkan's P010 and related planar formats. Reviewed-by: Faith Ekstrand Signed-off-by: Valentine Burley Part-of: --- src/util/format/u_format.yaml | 28 ++++++++++++++++++++++++---- src/util/format/u_format_table.py | 1 + src/util/format/u_formats.h | 4 ++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/util/format/u_format.yaml b/src/util/format/u_format.yaml index 1343daffc96..3924f7386d7 100644 --- a/src/util/format/u_format.yaml +++ b/src/util/format/u_format.yaml @@ -1902,8 +1902,8 @@ swizzles: [X, 0, 0, 1] -# RGB version of NV12 and YV12 for hardware that supports sampling from -# multiplane textures but needs color-space conversion in the shader. +# RGB versions of NV12, YV12, and P010 for hardware that supports sampling +# from multiplane textures but needs color-space conversion in the shader. - name: R8_G8B8_420_UNORM layout: planar2 colorspace: RGB @@ -1946,9 +1946,15 @@ block: {width: 1, height: 1, depth: 1} channels: [UN8] swizzles: [X, Y, Z, W] +- name: X6G10_X6B10X6R10_420_UNORM + layout: planar2 + colorspace: RGB + block: {width: 1, height: 1, depth: 1} + channels: [X6, UN10] + swizzles: [X, Y, Z, W] -# While most of Mesa uses R8 for Y, U, and V planes, freedreno requires distinguishing -# between tiled Y8 data and tiled R8 data. +# While most of Mesa uses R8 for Y, U, and V planes, freedreno requires +# distinguishing between tiled Y8 data and tiled R8 data. - name: Y8_UNORM layout: other colorspace: YUV @@ -1956,6 +1962,20 @@ channels: [UN8] swizzles: [X, 0, 0, 1] +# Formats for plane 0/plane 1 of P010 +- name: X6R10_UNORM + layout: plain + colorspace: RGB + block: {width: 1, height: 1, depth: 1} + channels: [X6, UN10] + swizzles: [Y, 0, 0, 1] +- name: X6R10X6G10_UNORM + layout: plain + colorspace: RGB + block: {width: 1, height: 1, depth: 1} + channels: [X6, UN10, X6, UN10] + swizzles: [Y, W, 0, 1] + - name: Y8_U8_V8_422_UNORM layout: planar3 colorspace: YUV diff --git a/src/util/format/u_format_table.py b/src/util/format/u_format_table.py index 1228b5190ae..2fd2c93be84 100644 --- a/src/util/format/u_format_table.py +++ b/src/util/format/u_format_table.py @@ -105,6 +105,7 @@ def has_access(format): 'g8r8_g8b8_unorm', 'g8b8_g8r8_unorm', 'b8g8_r8g8_unorm', + 'x6g10_x6b10x6r10_420_unorm', 'y8_400_unorm', 'y8_u8_v8_422_unorm', 'y8_u8v8_422_unorm', diff --git a/src/util/format/u_formats.h b/src/util/format/u_formats.h index 4b9eebe8aa8..26ea4bed426 100644 --- a/src/util/format/u_formats.h +++ b/src/util/format/u_formats.h @@ -237,6 +237,10 @@ enum pipe_format { PIPE_FORMAT_R8G8_B8G8_UNORM, PIPE_FORMAT_G8R8_G8B8_UNORM, + PIPE_FORMAT_X6G10_X6B10X6R10_420_UNORM, + + PIPE_FORMAT_X6R10_UNORM, + PIPE_FORMAT_X6R10X6G10_UNORM, /* mixed formats */ PIPE_FORMAT_R8SG8SB8UX8U_NORM,