panfrost: Get rid of the Pixel Format descriptor
authorBoris Brezillon <boris.brezillon@collabora.com>
Thu, 12 Nov 2020 15:08:31 +0000 (16:08 +0100)
committerBoris Brezillon <boris.brezillon@collabora.com>
Fri, 13 Nov 2020 13:35:17 +0000 (14:35 +0100)
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@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7530>

src/gallium/drivers/panfrost/pan_blend_shaders.c
src/gallium/drivers/panfrost/pan_cmdstream.c
src/panfrost/lib/midgard.xml
src/panfrost/lib/pan_blit.c
src/panfrost/lib/pan_format.c
src/panfrost/lib/pan_texture.h

index 93570bf..4a5e97e 100644 (file)
@@ -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);
         }
 
index fed8d65..da2161c 100644 (file)
@@ -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];
                         }
index 11795fd..18fa4bb 100644 (file)
     <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"/>
   </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>
index 595d094..28cfef1 100644 (file)
@@ -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);
-                        }
                 }
         }
 }
index 6777661..3edbec3 100644 (file)
@@ -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");
         }
index f7da2a1..1a270e3 100644 (file)
@@ -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);