From 2a97f1d3ef7a346113cd0a74d1c07d944a7edac4 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Sat, 20 Jan 2018 10:02:07 -0800 Subject: [PATCH] gallium: Add a new A4B4G4R4 pipe format for Broadcom. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The VC5 HW puts A in the low bits and R in the high bits. We can't just swizzle in the shaders because the blending HW can't pick what channel A is in, so make a new format to match it. Reviewed-by: Marek Olšák --- src/gallium/auxiliary/util/u_format.csv | 1 + src/gallium/drivers/svga/svga_format.c | 1 + src/gallium/include/pipe/p_format.h | 1 + src/mesa/state_tracker/st_format.c | 8 +++++++- 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gallium/auxiliary/util/u_format.csv b/src/gallium/auxiliary/util/u_format.csv index 689895f400c..f9e4925f27c 100644 --- a/src/gallium/auxiliary/util/u_format.csv +++ b/src/gallium/auxiliary/util/u_format.csv @@ -78,6 +78,7 @@ PIPE_FORMAT_X1B5G5R5_UNORM , plain, 1, 1, x1 , un5 , un5 , un5 , wzy1, r PIPE_FORMAT_A1B5G5R5_UNORM , plain, 1, 1, un1 , un5 , un5 , un5 , wzyx, rgb, un5 , un5 , un5 , un1 , xyzw PIPE_FORMAT_B4G4R4A4_UNORM , plain, 1, 1, un4 , un4 , un4 , un4 , zyxw, rgb, un4 , un4 , un4 , un4 , yzwx PIPE_FORMAT_B4G4R4X4_UNORM , plain, 1, 1, un4 , un4 , un4 , x4 , zyx1, rgb, x4 , un4 , un4 , un4 , yzw1 +PIPE_FORMAT_A4B4G4R4_UNORM , plain, 1, 1, un4 , un4 , un4 , un4 , wzyx, rgb, un4 , un4 , un4 , un4 , xyzw PIPE_FORMAT_B5G6R5_UNORM , plain, 1, 1, un5 , un6 , un5 , , zyx1, rgb, un5 , un6 , un5 , , xyz1 PIPE_FORMAT_R10G10B10A2_UNORM , plain, 1, 1, un10, un10, un10, un2 , xyzw, rgb, un2 , un10, un10, un10, wzyx PIPE_FORMAT_R10G10B10X2_UNORM , plain, 1, 1, un10, un10, un10, x2, xyz1, rgb, x2 , un10, un10, un10, wzy1 diff --git a/src/gallium/drivers/svga/svga_format.c b/src/gallium/drivers/svga/svga_format.c index 964923f084e..20a6e6b159f 100644 --- a/src/gallium/drivers/svga/svga_format.c +++ b/src/gallium/drivers/svga/svga_format.c @@ -368,6 +368,7 @@ static const struct vgpu10_format_entry format_conversion_table[] = { PIPE_FORMAT_R10G10B10X2_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, { PIPE_FORMAT_A1B5G5R5_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, { PIPE_FORMAT_X1B5G5R5_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, + { PIPE_FORMAT_A4B4G4R4_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, }; diff --git a/src/gallium/include/pipe/p_format.h b/src/gallium/include/pipe/p_format.h index fedac8a06d7..57399800fa4 100644 --- a/src/gallium/include/pipe/p_format.h +++ b/src/gallium/include/pipe/p_format.h @@ -394,6 +394,7 @@ enum pipe_format { PIPE_FORMAT_R10G10B10X2_UNORM = 308, PIPE_FORMAT_A1B5G5R5_UNORM = 309, PIPE_FORMAT_X1B5G5R5_UNORM = 310, + PIPE_FORMAT_A4B4G4R4_UNORM = 311, PIPE_FORMAT_COUNT }; diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index cc72ba406e6..c50ce1e14bb 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -84,6 +84,8 @@ st_mesa_format_to_pipe_format(const struct st_context *st, return PIPE_FORMAT_A1B5G5R5_UNORM; case MESA_FORMAT_B4G4R4A4_UNORM: return PIPE_FORMAT_B4G4R4A4_UNORM; + case MESA_FORMAT_A4B4G4R4_UNORM: + return PIPE_FORMAT_A4B4G4R4_UNORM; case MESA_FORMAT_B5G6R5_UNORM: return PIPE_FORMAT_B5G6R5_UNORM; case MESA_FORMAT_B2G3R3_UNORM: @@ -567,6 +569,8 @@ st_pipe_format_to_mesa_format(enum pipe_format format) return MESA_FORMAT_A1B5G5R5_UNORM; case PIPE_FORMAT_B4G4R4A4_UNORM: return MESA_FORMAT_B4G4R4A4_UNORM; + case PIPE_FORMAT_A4B4G4R4_UNORM: + return MESA_FORMAT_A4B4G4R4_UNORM; case PIPE_FORMAT_B5G6R5_UNORM: return MESA_FORMAT_B5G6R5_UNORM; case PIPE_FORMAT_B2G3R3_UNORM: @@ -1155,7 +1159,8 @@ static const struct format_mapping format_map[] = { }, { { GL_RGBA4, GL_RGBA2, 0 }, - { PIPE_FORMAT_B4G4R4A4_UNORM, DEFAULT_RGBA_FORMATS } + { PIPE_FORMAT_B4G4R4A4_UNORM, PIPE_FORMAT_A4B4G4R4_UNORM, + DEFAULT_RGBA_FORMATS } }, { { GL_RGB5_A1, 0 }, @@ -1170,6 +1175,7 @@ static const struct format_mapping format_map[] = { { { GL_RGB4 }, { PIPE_FORMAT_B4G4R4X4_UNORM, PIPE_FORMAT_B4G4R4A4_UNORM, + PIPE_FORMAT_A4B4G4R4_UNORM, DEFAULT_RGB_FORMATS } }, { -- 2.30.2