Blame test/check-formats.c

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
}