#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. */
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()))
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":
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"
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))
<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"/>