2 * © Copyright 2017-2098 The Panfrost Communiy
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 #include "pan_pretty_print.h"
30 /* Some self-contained prettyprinting functions shared between pandecode and
33 #define DEFINE_CASE(name) case MALI_## name: return "MALI_" #name
34 char *pandecode_format_name(enum mali_format format
)
36 static char unk_format_str
[5];
40 DEFINE_CASE(RGB5_A1_UNORM
);
41 DEFINE_CASE(RGB10_A2_UNORM
);
42 DEFINE_CASE(RGB10_A2_SNORM
);
43 DEFINE_CASE(RGB10_A2UI
);
44 DEFINE_CASE(RGB10_A2I
);
46 DEFINE_CASE(Z32_UNORM
);
47 DEFINE_CASE(R32_FIXED
);
48 DEFINE_CASE(RG32_FIXED
);
49 DEFINE_CASE(RGB32_FIXED
);
50 DEFINE_CASE(RGBA32_FIXED
);
51 DEFINE_CASE(R11F_G11F_B10F
);
52 DEFINE_CASE(VARYING_POS
);
53 DEFINE_CASE(VARYING_DISCARD
);
55 DEFINE_CASE(R8_SNORM
);
56 DEFINE_CASE(R16_SNORM
);
57 DEFINE_CASE(R32_SNORM
);
58 DEFINE_CASE(RG8_SNORM
);
59 DEFINE_CASE(RG16_SNORM
);
60 DEFINE_CASE(RG32_SNORM
);
61 DEFINE_CASE(RGB8_SNORM
);
62 DEFINE_CASE(RGB16_SNORM
);
63 DEFINE_CASE(RGB32_SNORM
);
64 DEFINE_CASE(RGBA8_SNORM
);
65 DEFINE_CASE(RGBA16_SNORM
);
66 DEFINE_CASE(RGBA32_SNORM
);
78 DEFINE_CASE(RGBA16UI
);
79 DEFINE_CASE(RGBA32UI
);
81 DEFINE_CASE(R8_UNORM
);
82 DEFINE_CASE(R16_UNORM
);
83 DEFINE_CASE(R32_UNORM
);
85 DEFINE_CASE(RG8_UNORM
);
86 DEFINE_CASE(RG16_UNORM
);
87 DEFINE_CASE(RG32_UNORM
);
89 DEFINE_CASE(RGB8_UNORM
);
90 DEFINE_CASE(RGB16_UNORM
);
91 DEFINE_CASE(RGB32_UNORM
);
93 DEFINE_CASE(RGBA4_UNORM
);
94 DEFINE_CASE(RGBA8_UNORM
);
95 DEFINE_CASE(RGBA16_UNORM
);
96 DEFINE_CASE(RGBA32_UNORM
);
112 DEFINE_CASE(RGBA16I
);
113 DEFINE_CASE(RGBA32I
);
114 DEFINE_CASE(RGBA16F
);
117 DEFINE_CASE(RGBA8_2
);
118 DEFINE_CASE(RGB10_A2_2
);
120 snprintf(unk_format_str
, sizeof(unk_format_str
), "0x%02x", format
);
121 return unk_format_str
;
127 /* Helper to dump fixed-function blend part for debugging */
130 panfrost_factor_name(enum mali_dominant_factor factor
)
133 case MALI_DOMINANT_UNK0
:
136 case MALI_DOMINANT_ZERO
:
139 case MALI_DOMINANT_SRC_COLOR
:
140 return "source color";
142 case MALI_DOMINANT_DST_COLOR
:
145 case MALI_DOMINANT_UNK4
:
148 case MALI_DOMINANT_SRC_ALPHA
:
149 return "source alpha";
151 case MALI_DOMINANT_DST_ALPHA
:
154 case MALI_DOMINANT_CONSTANT
:
158 return "unreachable";
162 panfrost_modifier_name(enum mali_blend_modifier mod
)
165 case MALI_BLEND_MOD_UNK0
:
168 case MALI_BLEND_MOD_NORMAL
:
171 case MALI_BLEND_MOD_SOURCE_ONE
:
174 case MALI_BLEND_MOD_DEST_ONE
:
178 return "unreachable";
182 panfrost_print_fixed_part(const char *name
, unsigned u
)
184 struct mali_blend_mode part
;
185 memcpy(&part
, &u
, sizeof(part
));
187 printf("%s blend mode (%X):\n", name
, u
);
189 printf(" %s dominant:\n",
190 (part
.dominant
== MALI_BLEND_DOM_SOURCE
) ? "source" : "destination");
192 printf(" %s\n", panfrost_factor_name(part
.dominant_factor
));
194 if (part
.complement_dominant
)
195 printf(" complement\n");
198 printf(" nondominant %s\n",
199 (part
.nondominant_mode
== MALI_BLEND_NON_MIRROR
) ? "mirror" : "zero");
202 printf(" mode: %s\n", panfrost_modifier_name(part
.clip_modifier
));
204 if (part
.negate_source
) printf(" negate source\n");
206 if (part
.negate_dest
) printf(" negate dest\n");
208 assert(!(part
.unused_0
|| part
.unused_1
));
212 panfrost_print_blend_equation(struct mali_blend_equation eq
)
215 panfrost_print_fixed_part("RGB", eq
.rgb_mode
);
216 panfrost_print_fixed_part("Alpha", eq
.alpha_mode
);
220 printf("Mask: %s%s%s%s\n",
221 (eq
.color_mask
& MALI_MASK_R
) ? "R" : "",
222 (eq
.color_mask
& MALI_MASK_G
) ? "G" : "",
223 (eq
.color_mask
& MALI_MASK_B
) ? "B" : "",
224 (eq
.color_mask
& MALI_MASK_A
) ? "A" : "");
226 printf("Constant: %f\n", eq
.constant
);