Mesa (master): panfrost: Get rid of the Pixel Format descriptor

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Nov 13 13:48:19 UTC 2020


Module: Mesa
Branch: master
Commit: 0dd093a89fea15303e98ef70b0de8370d7e39fb5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0dd093a89fea15303e98ef70b0de8370d7e39fb5

Author: Boris Brezillon <boris.brezillon at collabora.com>
Date:   Thu Nov 12 16:08:31 2020 +0100

panfrost: Get rid of the Pixel Format descriptor

We use opaque uint to encode formats everywhere else, so let's make
things consistent and convert the only user to an opaque int too.

Signed-off-by: Boris Brezillon <boris.brezillon at collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7530>

---

 src/gallium/drivers/panfrost/pan_blend_shaders.c |  5 +--
 src/gallium/drivers/panfrost/pan_cmdstream.c     |  6 +---
 src/panfrost/lib/midgard.xml                     | 13 +-------
 src/panfrost/lib/pan_blit.c                      |  6 +---
 src/panfrost/lib/pan_format.c                    | 40 +++++++++++++++---------
 src/panfrost/lib/pan_texture.h                   |  2 +-
 6 files changed, 30 insertions(+), 42 deletions(-)

diff --git a/src/gallium/drivers/panfrost/pan_blend_shaders.c b/src/gallium/drivers/panfrost/pan_blend_shaders.c
index 93570bf6b50..4a5e97e5796 100644
--- a/src/gallium/drivers/panfrost/pan_blend_shaders.c
+++ b/src/gallium/drivers/panfrost/pan_blend_shaders.c
@@ -260,10 +260,7 @@ bifrost_get_blend_desc(const struct panfrost_device *dev,
                         unreachable("Invalid format");
                 }
 
-                cfg.fixed_function.conversion.memory_format.srgb =
-                        desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB;
-
-                cfg.fixed_function.conversion.memory_format.format =
+                cfg.fixed_function.conversion.memory_format =
                          panfrost_format_to_bifrost_blend(dev, desc, true);
         }
 
diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c
index fed8d652ca2..da2161c5893 100644
--- a/src/gallium/drivers/panfrost/pan_cmdstream.c
+++ b/src/gallium/drivers/panfrost/pan_cmdstream.c
@@ -300,12 +300,8 @@ panfrost_emit_bifrost_blend(struct panfrost_batch *batch,
                                  * num_comps must be set to 4
                                  */
                                 cfg.bifrost.internal.fixed_function.num_comps = 4;
-                                cfg.bifrost.internal.fixed_function.conversion.memory_format.format =
+                                cfg.bifrost.internal.fixed_function.conversion.memory_format =
                                         panfrost_format_to_bifrost_blend(dev, format_desc, true);
-                                if (dev->quirks & HAS_SWIZZLES) {
-                                        cfg.bifrost.internal.fixed_function.conversion.memory_format.swizzle =
-                                                panfrost_get_default_swizzle(4);
-                                }
                                 cfg.bifrost.internal.fixed_function.conversion.register_format =
                                         fs->blend_types[i];
                         }
diff --git a/src/panfrost/lib/midgard.xml b/src/panfrost/lib/midgard.xml
index 11795fd3eed..18fa4bb569f 100644
--- a/src/panfrost/lib/midgard.xml
+++ b/src/panfrost/lib/midgard.xml
@@ -357,17 +357,6 @@
     <value name="Force Late" value="3"/>
   </enum>
 
-  <struct name="Pixel Format" no-direct-packing="true">
-    <field name="RGB Component Order" size="8" start="0" type="RGB Component Order"/>
-    <field name="YUV Component Order" size="3" start="0" type="YUV Swizzle"/>
-    <field name="YUV Component Swap" size="1" start="3" type="bool"/>
-    <field name="YUV Cr Siting" size="3" start="0" type="YUV Cr Siting"/>
-    <field name="Swizzle" size="12" start="0" type="uint"/>
-    <field name="Format" size="8" start="12" type="Format"/>
-    <field name="sRGB" size="1" start="20" type="bool"/>
-    <field name="Big Endian" size="1" start="21" type="bool"/>
-  </struct>
-
   <enum name="Block Format">
     <!--- 16x16 block u-interleaved -->
     <value name="Tiled U-Interleaved" value="0"/>
@@ -551,7 +540,7 @@
   </struct>
 
   <struct name="Bifrost Internal Conversion" size="1">
-    <field name="Memory Format" size="22" start="0" type="Pixel Format"/>
+    <field name="Memory Format" size="22" start="0" type="uint"/>
     <field name="Raw" size="1" start="22" type="bool"/>
     <field name="Register Format" size="3" start="24" type="Bifrost Register File Format"/>
   </struct>
diff --git a/src/panfrost/lib/pan_blit.c b/src/panfrost/lib/pan_blit.c
index 595d094d692..28cfef1b1e3 100644
--- a/src/panfrost/lib/pan_blit.c
+++ b/src/panfrost/lib/pan_blit.c
@@ -569,16 +569,12 @@ bifrost_load_emit_blend_rt(struct pan_pool *pool, void *out,
                         cfg.bifrost.equation.alpha.c = MALI_BLEND_OPERAND_C_ZERO;
                         cfg.bifrost.equation.color_mask = 0xf;
                         cfg.bifrost.internal.fixed_function.num_comps = 4;
-                        cfg.bifrost.internal.fixed_function.conversion.memory_format.format =
+                        cfg.bifrost.internal.fixed_function.conversion.memory_format =
                                 panfrost_format_to_bifrost_blend(pool->dev, format_desc, true);
                         cfg.bifrost.internal.fixed_function.conversion.register_format =
                                 blit_type_to_reg_fmt(T);
 
                         cfg.bifrost.internal.fixed_function.rt = rt;
-                        if (pool->dev->quirks & HAS_SWIZZLES) {
-                                cfg.bifrost.internal.fixed_function.conversion.memory_format.swizzle =
-                                        panfrost_get_default_swizzle(4);
-                        }
                 }
         }
 }
diff --git a/src/panfrost/lib/pan_format.c b/src/panfrost/lib/pan_format.c
index 6777661bbb4..3edbec31cf0 100644
--- a/src/panfrost/lib/pan_format.c
+++ b/src/panfrost/lib/pan_format.c
@@ -27,6 +27,7 @@
 #include <stdio.h>
 #include "midgard_pack.h"
 #include "pan_texture.h"
+#include "panfrost-quirks.h"
 
 /* Convenience */
 
@@ -672,7 +673,7 @@ panfrost_invert_swizzle(const unsigned char *in, unsigned char *out)
         }
 }
 
-enum mali_format
+unsigned
 panfrost_format_to_bifrost_blend(const struct panfrost_device *dev,
                                  const struct util_format_description *desc, bool dither)
 {
@@ -680,27 +681,36 @@ panfrost_format_to_bifrost_blend(const struct panfrost_device *dev,
 
         /* Formats requiring blend shaders are stored raw in the tilebuffer */
         if (!fmt.internal)
-                return MALI_EXTRACT_INDEX(dev->formats[desc->format].hw);
+                return dev->formats[desc->format].hw;
+
+        unsigned extra = 0;
+
+        if (dev->quirks & HAS_SWIZZLES)
+                extra |= panfrost_get_default_swizzle(4);
+
+        if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB)
+                extra |= 1 << 20;
 
         /* Else, pick the pixel format matching the tilebuffer format */
         switch (fmt.internal) {
-        case MALI_COLOR_BUFFER_INTERNAL_FORMAT_R8G8B8A8:
-                return MALI_RGBA8_TB;
-
-        case MALI_COLOR_BUFFER_INTERNAL_FORMAT_R10G10B10A2:
-                return MALI_RGB10_A2_TB;
+#define TB_FORMAT(in, out) \
+        case MALI_COLOR_BUFFER_INTERNAL_FORMAT_ ## in: \
+                return (MALI_ ## out << 12) | extra
 
-        case MALI_COLOR_BUFFER_INTERNAL_FORMAT_R8G8B8A2:
-                return dither ? MALI_RGB8_A2_AU : MALI_RGB8_A2_PU;
+#define TB_FORMAT_DITHER(in, out) \
+        case MALI_COLOR_BUFFER_INTERNAL_FORMAT_ ## in: \
+                return ((dither ? MALI_ ## out ## _AU : MALI_ ## out ## _PU) << 12) | extra
 
-        case MALI_COLOR_BUFFER_INTERNAL_FORMAT_R4G4B4A4:
-                return dither ? MALI_RGBA4_AU : MALI_RGBA4_PU;
+        TB_FORMAT(R8G8B8A8, RGBA8_TB);
+        TB_FORMAT(R10G10B10A2, RGB10_A2_TB);
+        TB_FORMAT_DITHER(R8G8B8A2, RGB8_A2);
+        TB_FORMAT_DITHER(R4G4B4A4, RGBA4);
+        TB_FORMAT_DITHER(R5G6B5A0, R5G6B5);
+        TB_FORMAT_DITHER(R5G5B5A1, RGB5_A1);
 
-        case MALI_COLOR_BUFFER_INTERNAL_FORMAT_R5G6B5A0:
-                return dither ? MALI_R5G6B5_AU : MALI_R5G6B5_PU;
+#undef TB_FORMAT_DITHER
+#undef TB_FORMAT
 
-        case MALI_COLOR_BUFFER_INTERNAL_FORMAT_R5G5B5A1:
-                return dither ? MALI_RGB5_A1_AU : MALI_RGB5_A1_PU;
         default:
                 unreachable("invalid internal blendable");
         }
diff --git a/src/panfrost/lib/pan_texture.h b/src/panfrost/lib/pan_texture.h
index f7da2a13dc9..1a270e3e1a9 100644
--- a/src/panfrost/lib/pan_texture.h
+++ b/src/panfrost/lib/pan_texture.h
@@ -190,7 +190,7 @@ panfrost_bifrost_swizzle(unsigned components)
         return components < 4 ? 0x10 : 0x00;
 }
 
-enum mali_format
+unsigned
 panfrost_format_to_bifrost_blend(const struct panfrost_device *dev,
                                  const struct util_format_description *desc,
                                  bool dither);



More information about the mesa-commit mailing list