pan/decode: Pretty print 22-bit pixel formats
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 17 Feb 2021 02:54:35 +0000 (21:54 -0500)
committerMarge Bot <eric+marge@anholt.net>
Thu, 18 Feb 2021 21:48:21 +0000 (21:48 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Suggested-by: Icecream95 <ixn@disroot.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9105>

src/panfrost/lib/gen_pack.py
src/panfrost/lib/midgard.xml

index bb17bd5..31de09c 100644 (file)
@@ -166,6 +166,24 @@ __gen_unpack_padded(const uint8_t *restrict cl, uint32_t start, uint32_t end)
 #define pan_section_print(fp, A, S, var, indent)                          \\
         MALI_ ## A ## _SECTION_ ## S ## _print(fp, &(var), indent)
 
+#define mali_pixel_format_print_v6(fp, format) \\
+    fprintf(fp, "%*sFormat (v6): %s%s%s %s%s%s%s\\n", indent, "", \\
+        mali_format_as_str((format >> 12) & 0xFF), \\
+        (format & (1 << 20)) ? " sRGB" : "", \\
+        (format & (1 << 21)) ? " big-endian" : "", \\
+        mali_channel_as_str(((format >> 0) & 0x7)), \\
+        mali_channel_as_str(((format >> 3) & 0x7)), \\
+        mali_channel_as_str(((format >> 6) & 0x7)), \\
+        mali_channel_as_str(((format >> 9) & 0x7)));
+
+#define mali_pixel_format_print_v7(fp, format) \\
+    fprintf(fp, "%*sFormat (v7): %s%s %s%s\\n", indent, "", \\
+        mali_format_as_str((format >> 12) & 0xFF), \\
+        (format & (1 << 20)) ? " sRGB" : "", \\
+        mali_rgb_component_order_as_str((format & ((1 << 12) - 1))), \\
+        (format & (1 << 21)) ? " XXX BAD BIT" : "");
+
+
 /* From presentations, 16x16 tiles externally. Use shift for fast computation
  * of tile numbers. */
 
@@ -332,7 +350,7 @@ class Field(object):
             type = 'uint64_t'
         elif self.type == 'int':
             type = 'int32_t'
-        elif self.type in ['uint', 'padded']:
+        elif self.type in ['uint', 'padded', 'Pixel Format']:
             type = 'uint32_t'
         elif self.type in self.parser.structs:
             type = 'struct ' + self.parser.gen_prefix(safe_name(self.type.upper()))
@@ -487,7 +505,7 @@ class Group(object):
                     elif field.modifier[0] == "log2":
                         value = "util_logbase2({})".format(value)
 
-                if field.type == "uint" or field.type == "address":
+                if field.type in ["uint", "address", "Pixel Format"]:
                     s = "__gen_uint(%s, %d, %d)" % \
                         (value, start, end)
                 elif field.type == "padded":
@@ -561,7 +579,7 @@ class Group(object):
             args.append(str(fieldref.start))
             args.append(str(fieldref.end))
 
-            if field.type in set(["uint", "address"]) | self.parser.enums:
+            if field.type in set(["uint", "address", "Pixel Format"]) | self.parser.enums:
                 convert = "__gen_unpack_uint"
             elif field.type == "int":
                 convert = "__gen_unpack_sint"
@@ -613,6 +631,9 @@ class Group(object):
                 print('   fprintf(fp, "%*s{}: %f\\n", indent, "", {});'.format(name, val))
             elif field.type == "uint" and (field.end - field.start) >= 32:
                 print('   fprintf(fp, "%*s{}: 0x%" PRIx64 "\\n", indent, "", {});'.format(name, val))
+            elif field.type == "Pixel Format":
+                print('   mali_pixel_format_print_v6(fp, {});'.format(val))
+                print('   mali_pixel_format_print_v7(fp, {});'.format(val))
             else:
                 print('   fprintf(fp, "%*s{}: %u\\n", indent, "", {});'.format(name, val))
 
index e7e0f6a..703c828 100644 (file)
   <struct name="Attribute">
     <field name="Buffer index" size="9" start="0" type="uint"/>
     <field name="Offset enable" size="1" start="9" type="bool" default="true"/>
-    <field name="Format" size="22" start="10" type="uint"/>
+    <field name="Format" size="22" start="10" type="Pixel Format"/>
     <field name="Offset" size="32" start="32" type="int"/>
   </struct>
 
   </struct>
 
   <struct name="Bifrost Internal Conversion" size="1">
-    <field name="Memory Format" size="22" start="0" type="uint"/>
+    <field name="Memory Format" size="22" start="0" type="Pixel Format"/>
     <field name="Raw" size="1" start="22" type="bool"/>
     <field name="Register Format" size="3" start="24" type="Bifrost Register File Format"/>
   </struct>
     <field name="Depth" size="16" start="1:0" type="uint" modifier="minus(1)" default="1"/>
     <field name="Sample count" size="16" start="1:0" type="uint" modifier="minus(1)" default="1"/>
     <field name="Array size" size="16" start="1:16" type="uint" modifier="minus(1)"/>
-    <field name="Format" size="22" start="2:0" type="uint"/>
+    <field name="Format" size="22" start="2:0" type="Pixel Format"/>
     <field name="Dimension" size="2" start="2:22" type="Texture Dimension"/>
     <field name="Texel ordering" size="4" start="2:24" type="Texture Layout"/>
     <field name="Surface pointer is 64b" size="1" start="2:28" type="bool" default="true"/>
     <field name="Dimension" size="2" start="0:4" type="Texture Dimension"/>
     <field name="Sample corner position" size="1" start="0:8" type="bool" default="false"/>
     <field name="Normalize coordinatess" size="1" start="0:9" type="bool" default="false"/>
-    <field name="Format" size="22" start="0:10" type="uint"/>
+    <field name="Format" size="22" start="0:10" type="Pixel Format"/>
     <field name="Width" size="16" start="1:0" type="uint" modifier="minus(1)"/>
     <field name="Height" size="16" start="1:16" type="uint" modifier="minus(1)"/>
     <field name="Swizzle" size="12" start="2:0" type="uint"/>