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