|
Packit |
030a23 |
#include <ctype.h>
|
|
Packit |
030a23 |
#include "utils.h"
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
static int
|
|
Packit |
030a23 |
check_op (pixman_op_t op,
|
|
Packit |
030a23 |
pixman_format_code_t src_format,
|
|
Packit |
030a23 |
pixman_format_code_t dest_format)
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
uint32_t src_alpha_mask, src_green_mask;
|
|
Packit |
030a23 |
uint32_t dest_alpha_mask, dest_green_mask;
|
|
Packit |
030a23 |
pixel_checker_t src_checker, dest_checker;
|
|
Packit |
030a23 |
pixman_image_t *si, *di;
|
|
Packit |
030a23 |
uint32_t sa, sg, da, dg;
|
|
Packit |
030a23 |
uint32_t s, d;
|
|
Packit |
030a23 |
int retval = 0;
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
pixel_checker_init (&src_checker, src_format);
|
|
Packit |
030a23 |
pixel_checker_init (&dest_checker, dest_format);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
pixel_checker_get_masks (
|
|
Packit |
030a23 |
&src_checker, &src_alpha_mask, NULL, &src_green_mask, NULL);
|
|
Packit |
030a23 |
pixel_checker_get_masks (
|
|
Packit |
030a23 |
&dest_checker, &dest_alpha_mask, NULL, &dest_green_mask, NULL);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
/* printf ("masks: %x %x %x %x\n", */
|
|
Packit |
030a23 |
/* src_alpha_mask, src_green_mask, */
|
|
Packit |
030a23 |
/* dest_alpha_mask, dest_green_mask); */
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
si = pixman_image_create_bits (src_format, 1, 1, &s, 4);
|
|
Packit |
030a23 |
di = pixman_image_create_bits (dest_format, 1, 1, &d, 4);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
sa = 0;
|
|
Packit |
030a23 |
do
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
sg = 0;
|
|
Packit |
030a23 |
do
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
da = 0;
|
|
Packit |
030a23 |
do
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
dg = 0;
|
|
Packit |
030a23 |
do
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
color_t src_color, dest_color, result_color;
|
|
Packit |
030a23 |
uint32_t orig_d;
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
s = sa | sg;
|
|
Packit |
030a23 |
d = da | dg;
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
orig_d = d;
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
pixel_checker_convert_pixel_to_color (&src_checker, s, &src_color);
|
|
Packit |
030a23 |
pixel_checker_convert_pixel_to_color (&dest_checker, d, &dest_color);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
do_composite (op, &src_color, NULL, &dest_color, &result_color, FALSE);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
if (!is_little_endian())
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
s <<= 32 - PIXMAN_FORMAT_BPP (src_format);
|
|
Packit |
030a23 |
d <<= 32 - PIXMAN_FORMAT_BPP (dest_format);
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
pixman_image_composite32 (op, si, NULL, di,
|
|
Packit |
030a23 |
0, 0, 0, 0, 0, 0, 1, 1);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
if (!is_little_endian())
|
|
Packit |
030a23 |
d >>= (32 - PIXMAN_FORMAT_BPP (dest_format));
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
if (!pixel_checker_check (&dest_checker, d, &result_color))
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
printf ("---- test failed ----\n");
|
|
Packit |
030a23 |
printf ("operator: %-32s\n", operator_name (op));
|
|
Packit |
030a23 |
printf ("source: %-12s pixel: %08x\n", format_name (src_format), s);
|
|
Packit |
030a23 |
printf ("dest: %-12s pixel: %08x\n", format_name (dest_format), orig_d);
|
|
Packit |
030a23 |
printf ("got: %-12s pixel: %08x\n", format_name (dest_format), d);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
retval = 1;
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
dg -= dest_green_mask;
|
|
Packit |
030a23 |
dg &= dest_green_mask;
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
while (dg != 0);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
da -= dest_alpha_mask;
|
|
Packit |
030a23 |
da &= dest_alpha_mask;
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
while (da != 0);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
sg -= src_green_mask;
|
|
Packit |
030a23 |
sg &= src_green_mask;
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
while (sg != 0);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
sa -= src_alpha_mask;
|
|
Packit |
030a23 |
sa &= src_alpha_mask;
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
while (sa != 0);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
pixman_image_unref (si);
|
|
Packit |
030a23 |
pixman_image_unref (di);
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
return retval;
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
int
|
|
Packit |
030a23 |
main (int argc, char **argv)
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
enum { OPTION_OP, OPTION_SRC, OPTION_DEST, LAST_OPTION } option;
|
|
Packit |
030a23 |
pixman_format_code_t src_fmt, dest_fmt;
|
|
Packit |
030a23 |
pixman_op_t op;
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
op = PIXMAN_OP_NONE;
|
|
Packit |
030a23 |
src_fmt = PIXMAN_null;
|
|
Packit |
030a23 |
dest_fmt = PIXMAN_null;
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
argc--;
|
|
Packit |
030a23 |
argv++;
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
for (option = OPTION_OP; option < LAST_OPTION; ++option)
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
char *arg = NULL;
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
if (argc)
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
argc--;
|
|
Packit |
030a23 |
arg = *argv++;
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
switch (option)
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
case OPTION_OP:
|
|
Packit |
030a23 |
if (!arg)
|
|
Packit |
030a23 |
printf (" - missing operator\n");
|
|
Packit |
030a23 |
else if ((op = operator_from_string (arg)) == PIXMAN_OP_NONE)
|
|
Packit |
030a23 |
printf (" - unknown operator %s\n", arg);
|
|
Packit |
030a23 |
break;
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
case OPTION_SRC:
|
|
Packit |
030a23 |
if (!arg)
|
|
Packit |
030a23 |
printf (" - missing source format\n");
|
|
Packit |
030a23 |
else if ((src_fmt = format_from_string (arg)) == PIXMAN_null)
|
|
Packit |
030a23 |
printf (" - unknown source format %s\n", arg);
|
|
Packit |
030a23 |
break;
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
case OPTION_DEST:
|
|
Packit |
030a23 |
if (!arg)
|
|
Packit |
030a23 |
printf (" - missing destination format\n");
|
|
Packit |
030a23 |
else if ((dest_fmt = format_from_string (arg)) == PIXMAN_null)
|
|
Packit |
030a23 |
printf (" - unknown destination format %s\n", arg);
|
|
Packit |
030a23 |
break;
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
default:
|
|
Packit |
030a23 |
assert (0);
|
|
Packit |
030a23 |
break;
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
while (argc--)
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
op = PIXMAN_OP_NONE;
|
|
Packit |
030a23 |
printf (" - unexpected argument: %s\n", *argv++);
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
if (op == PIXMAN_OP_NONE || src_fmt == PIXMAN_null || dest_fmt == PIXMAN_null)
|
|
Packit |
030a23 |
{
|
|
Packit |
030a23 |
printf ("\nUsage:\n check-formats <operator> <src-format> <dest-format>\n\n");
|
|
Packit |
030a23 |
list_operators();
|
|
Packit |
030a23 |
list_formats();
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
return -1;
|
|
Packit |
030a23 |
}
|
|
Packit |
030a23 |
|
|
Packit |
030a23 |
return check_op (op, src_fmt, dest_fmt);
|
|
Packit |
030a23 |
}
|