diff options
Diffstat (limited to 'src/pixman/test/oob-test.c')
-rw-r--r-- | src/pixman/test/oob-test.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/pixman/test/oob-test.c b/src/pixman/test/oob-test.c new file mode 100644 index 0000000..0d19b50 --- /dev/null +++ b/src/pixman/test/oob-test.c @@ -0,0 +1,101 @@ +#include <stdio.h> +#include <stdlib.h> +#include "utils.h" + +typedef struct +{ + int width; + int height; + int stride; + pixman_format_code_t format; + +} image_info_t; + +typedef struct +{ + pixman_op_t op; + + image_info_t src; + image_info_t dest; + + int src_x; + int src_y; + int dest_x; + int dest_y; + int width; + int height; +} composite_info_t; + +const composite_info_t info[] = +{ + { + PIXMAN_OP_SRC, + { 3, 6, 16, PIXMAN_a8r8g8b8 }, + { 5, 7, 20, PIXMAN_x8r8g8b8 }, + 1, 8, + 1, -1, + 1, 8 + }, + { + PIXMAN_OP_SRC, + { 7, 5, 36, PIXMAN_a8r8g8b8 }, + { 6, 5, 28, PIXMAN_x8r8g8b8 }, + 8, 5, + 5, 3, + 1, 2 + }, + { + PIXMAN_OP_OVER, + { 10, 10, 40, PIXMAN_a2b10g10r10 }, + { 10, 10, 40, PIXMAN_a2b10g10r10 }, + 0, 0, + 0, 0, + 10, 10 + }, + { + PIXMAN_OP_OVER, + { 10, 10, 40, PIXMAN_x2b10g10r10 }, + { 10, 10, 40, PIXMAN_x2b10g10r10 }, + 0, 0, + 0, 0, + 10, 10 + }, +}; + +static pixman_image_t * +make_image (const image_info_t *info) +{ + char *data = malloc (info->stride * info->height); + int i; + + for (i = 0; i < info->height * info->stride; ++i) + data[i] = (i % 255) ^ (((i % 16) << 4) | (i & 0xf0)); + + return pixman_image_create_bits (info->format, info->width, info->height, (uint32_t *)data, info->stride); +} + +static void +test_composite (const composite_info_t *info) +{ + pixman_image_t *src = make_image (&info->src); + pixman_image_t *dest = make_image (&info->dest); + + pixman_image_composite (PIXMAN_OP_SRC, src, NULL, dest, + info->src_x, info->src_y, + 0, 0, + info->dest_x, info->dest_y, + info->width, info->height); +} + + + +int +main (int argc, char **argv) +{ + int i; + + for (i = 0; i < ARRAY_LENGTH (info); ++i) + test_composite (&info[i]); + + return 0; +} |