11176bdada62cabc6ec4b0308a930e83b679d5d36John Reck#include <stdio.h>
21176bdada62cabc6ec4b0308a930e83b679d5d36John Reck#include <stdlib.h>
31176bdada62cabc6ec4b0308a930e83b679d5d36John Reck#include "utils.h"
41176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
51176bdada62cabc6ec4b0308a930e83b679d5d36John Recktypedef struct
61176bdada62cabc6ec4b0308a930e83b679d5d36John Reck{
71176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    int				width;
81176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    int				height;
91176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    int				stride;
101176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    pixman_format_code_t	format;
111176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
121176bdada62cabc6ec4b0308a930e83b679d5d36John Reck} image_info_t;
131176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
141176bdada62cabc6ec4b0308a930e83b679d5d36John Recktypedef struct
151176bdada62cabc6ec4b0308a930e83b679d5d36John Reck{
161176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    pixman_op_t		op;
171176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
181176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    image_info_t	src;
191176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    image_info_t	dest;
201176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
211176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    int			src_x;
221176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    int			src_y;
231176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    int			dest_x;
241176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    int			dest_y;
251176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    int			width;
261176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    int			height;
271176bdada62cabc6ec4b0308a930e83b679d5d36John Reck} composite_info_t;
281176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
291176bdada62cabc6ec4b0308a930e83b679d5d36John Reckconst composite_info_t info[] =
301176bdada62cabc6ec4b0308a930e83b679d5d36John Reck{
311176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    {
321176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	PIXMAN_OP_SRC,
331176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	{  3, 6, 16, PIXMAN_a8r8g8b8 },
341176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	{  5, 7, 20, PIXMAN_x8r8g8b8 },
351176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	1, 8,
361176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	1, -1,
371176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	1, 8
381176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    },
391176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    {
401176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	PIXMAN_OP_SRC,
411176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	{ 7, 5, 36, PIXMAN_a8r8g8b8 },
421176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	{ 6, 5, 28, PIXMAN_x8r8g8b8 },
431176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	8, 5,
441176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	5, 3,
451176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	1, 2
461176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    },
471176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    {
481176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	PIXMAN_OP_OVER,
491176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	{ 10, 10, 40, PIXMAN_a2b10g10r10 },
501176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	{ 10, 10, 40, PIXMAN_a2b10g10r10 },
511176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	0, 0,
521176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	0, 0,
531176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	10, 10
541176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    },
551176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    {
561176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	PIXMAN_OP_OVER,
571176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	{ 10, 10, 40, PIXMAN_x2b10g10r10 },
581176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	{ 10, 10, 40, PIXMAN_x2b10g10r10 },
591176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	0, 0,
601176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	0, 0,
611176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	10, 10
621176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    },
631176bdada62cabc6ec4b0308a930e83b679d5d36John Reck};
641176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
651176bdada62cabc6ec4b0308a930e83b679d5d36John Reckstatic pixman_image_t *
661176bdada62cabc6ec4b0308a930e83b679d5d36John Reckmake_image (const image_info_t *info)
671176bdada62cabc6ec4b0308a930e83b679d5d36John Reck{
681176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    char *data = malloc (info->stride * info->height);
691176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    int i;
701176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
711176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    for (i = 0; i < info->height * info->stride; ++i)
721176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	data[i] = (i % 255) ^ (((i % 16) << 4) | (i & 0xf0));
731176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
741176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    return pixman_image_create_bits (info->format, info->width, info->height, (uint32_t *)data, info->stride);
751176bdada62cabc6ec4b0308a930e83b679d5d36John Reck}
761176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
771176bdada62cabc6ec4b0308a930e83b679d5d36John Reckstatic void
781176bdada62cabc6ec4b0308a930e83b679d5d36John Recktest_composite (const composite_info_t *info)
791176bdada62cabc6ec4b0308a930e83b679d5d36John Reck{
801176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    pixman_image_t *src = make_image (&info->src);
811176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    pixman_image_t *dest = make_image (&info->dest);
821176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
831176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    pixman_image_composite (PIXMAN_OP_SRC, src, NULL, dest,
841176bdada62cabc6ec4b0308a930e83b679d5d36John Reck			    info->src_x, info->src_y,
851176bdada62cabc6ec4b0308a930e83b679d5d36John Reck			    0, 0,
861176bdada62cabc6ec4b0308a930e83b679d5d36John Reck			    info->dest_x, info->dest_y,
871176bdada62cabc6ec4b0308a930e83b679d5d36John Reck			    info->width, info->height);
881176bdada62cabc6ec4b0308a930e83b679d5d36John Reck}
891176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
901176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
911176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
921176bdada62cabc6ec4b0308a930e83b679d5d36John Reckint
931176bdada62cabc6ec4b0308a930e83b679d5d36John Reckmain (int argc, char **argv)
941176bdada62cabc6ec4b0308a930e83b679d5d36John Reck{
951176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    int i;
961176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
971176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    for (i = 0; i < ARRAY_LENGTH (info); ++i)
981176bdada62cabc6ec4b0308a930e83b679d5d36John Reck	test_composite (&info[i]);
991176bdada62cabc6ec4b0308a930e83b679d5d36John Reck
1001176bdada62cabc6ec4b0308a930e83b679d5d36John Reck    return 0;
1011176bdada62cabc6ec4b0308a930e83b679d5d36John Reck}
102