5 check_op (pixman_op_t op,
6 pixman_format_code_t src_format,
7 pixman_format_code_t dest_format)
9 uint32_t src_alpha_mask, src_green_mask;
10 uint32_t dest_alpha_mask, dest_green_mask;
11 pixel_checker_t src_checker, dest_checker;
12 pixman_image_t *si, *di;
13 uint32_t sa, sg, da, dg;
17 pixel_checker_init (&src_checker, src_format);
18 pixel_checker_init (&dest_checker, dest_format);
20 pixel_checker_get_masks (
21 &src_checker, &src_alpha_mask, NULL, &src_green_mask, NULL);
22 pixel_checker_get_masks (
23 &dest_checker, &dest_alpha_mask, NULL, &dest_green_mask, NULL);
25 /* printf ("masks: %x %x %x %x\n", */
26 /* src_alpha_mask, src_green_mask, */
27 /* dest_alpha_mask, dest_green_mask); */
29 si = pixman_image_create_bits (src_format, 1, 1, &s, 4);
30 di = pixman_image_create_bits (dest_format, 1, 1, &d, 4);
44 color_t src_color, dest_color, result_color;
52 pixel_checker_convert_pixel_to_color (&src_checker, s, &src_color);
53 pixel_checker_convert_pixel_to_color (&dest_checker, d, &dest_color);
55 do_composite (op, &src_color, NULL, &dest_color, &result_color, FALSE);
58 if (!is_little_endian())
60 s <<= 32 - PIXMAN_FORMAT_BPP (src_format);
61 d <<= 32 - PIXMAN_FORMAT_BPP (dest_format);
64 pixman_image_composite32 (op, si, NULL, di,
65 0, 0, 0, 0, 0, 0, 1, 1);
67 if (!is_little_endian())
68 d >>= (32 - PIXMAN_FORMAT_BPP (dest_format));
70 if (!pixel_checker_check (&dest_checker, d, &result_color))
72 printf ("---- test failed ----\n");
73 printf ("operator: %-32s\n", operator_name (op));
74 printf ("source: %-12s pixel: %08x\n", format_name (src_format), s);
75 printf ("dest: %-12s pixel: %08x\n", format_name (dest_format), orig_d);
76 printf ("got: %-12s pixel: %08x\n", format_name (dest_format), d);
81 dg -= dest_green_mask;
82 dg &= dest_green_mask;
86 da -= dest_alpha_mask;
87 da &= dest_alpha_mask;
101 pixman_image_unref (si);
102 pixman_image_unref (di);
107 static const pixman_op_t op_list[] =
113 PIXMAN_OP_OVER_REVERSE,
115 PIXMAN_OP_IN_REVERSE,
117 PIXMAN_OP_OUT_REVERSE,
119 PIXMAN_OP_ATOP_REVERSE,
124 PIXMAN_OP_DISJOINT_CLEAR,
125 PIXMAN_OP_DISJOINT_SRC,
126 PIXMAN_OP_DISJOINT_DST,
127 PIXMAN_OP_DISJOINT_OVER,
128 PIXMAN_OP_DISJOINT_OVER_REVERSE,
129 PIXMAN_OP_DISJOINT_IN,
130 PIXMAN_OP_DISJOINT_IN_REVERSE,
131 PIXMAN_OP_DISJOINT_OUT,
132 PIXMAN_OP_DISJOINT_OUT_REVERSE,
133 PIXMAN_OP_DISJOINT_ATOP,
134 PIXMAN_OP_DISJOINT_ATOP_REVERSE,
135 PIXMAN_OP_DISJOINT_XOR,
137 PIXMAN_OP_CONJOINT_CLEAR,
138 PIXMAN_OP_CONJOINT_SRC,
139 PIXMAN_OP_CONJOINT_DST,
140 PIXMAN_OP_CONJOINT_OVER,
141 PIXMAN_OP_CONJOINT_OVER_REVERSE,
142 PIXMAN_OP_CONJOINT_IN,
143 PIXMAN_OP_CONJOINT_IN_REVERSE,
144 PIXMAN_OP_CONJOINT_OUT,
145 PIXMAN_OP_CONJOINT_OUT_REVERSE,
146 PIXMAN_OP_CONJOINT_ATOP,
147 PIXMAN_OP_CONJOINT_ATOP_REVERSE,
148 PIXMAN_OP_CONJOINT_XOR,
151 static const pixman_format_code_t format_list[] =
166 PIXMAN_a8r8g8b8_sRGB,
193 static pixman_format_code_t
194 format_from_string (const char *s)
198 for (i = 0; i < ARRAY_LENGTH (format_list); ++i)
200 if (strcasecmp (format_name (format_list[i]), s) == 0)
201 return format_list[i];
208 emit (const char *s, int *n_chars)
210 *n_chars += printf ("%s,", s);
229 printf ("Formats:\n ");
232 for (i = 0; i < ARRAY_LENGTH (format_list); ++i)
233 emit (format_name (format_list[i]), &n_chars);
239 list_operators (void)
241 char short_name [128] = { 0 };
244 printf ("Operators:\n ");
247 for (i = 0; i < ARRAY_LENGTH (op_list); ++i)
249 pixman_op_t op = op_list[i];
252 snprintf (short_name, sizeof (short_name) - 1, "%s",
253 operator_name (op) + strlen ("PIXMAN_OP_"));
255 for (j = 0; short_name[j] != '\0'; ++j)
256 short_name[j] = tolower (short_name[j]);
258 emit (short_name, &n_chars);
265 operator_from_string (const char *s)
267 char full_name[128] = { 0 };
270 snprintf (full_name, (sizeof full_name) - 1, "PIXMAN_OP_%s", s);
272 for (i = 0; i < ARRAY_LENGTH (op_list); ++i)
274 pixman_op_t op = op_list[i];
276 if (strcasecmp (operator_name (op), full_name) == 0)
280 return PIXMAN_OP_NONE;
284 main (int argc, char **argv)
286 enum { OPTION_OP, OPTION_SRC, OPTION_DEST, LAST_OPTION } option;
287 pixman_format_code_t src_fmt, dest_fmt;
291 src_fmt = PIXMAN_null;
292 dest_fmt = PIXMAN_null;
297 for (option = OPTION_OP; option < LAST_OPTION; ++option)
311 printf (" - missing operator\n");
312 else if ((op = operator_from_string (arg)) == PIXMAN_OP_NONE)
313 printf (" - unknown operator %s\n", arg);
318 printf (" - missing source format\n");
319 else if ((src_fmt = format_from_string (arg)) == PIXMAN_null)
320 printf (" - unknown source format %s\n", arg);
325 printf (" - missing destination format\n");
326 else if ((dest_fmt = format_from_string (arg)) == PIXMAN_null)
327 printf (" - unknown destination format %s\n", arg);
339 printf (" - unexpected argument: %s\n", *argv++);
342 if (op == PIXMAN_OP_NONE || src_fmt == PIXMAN_null || dest_fmt == PIXMAN_null)
344 printf ("\nUsage:\n check-formats <operator> <src-format> <dest-format>\n\n");
351 return check_op (op, src_fmt, dest_fmt);