fetch-test.c revision a450e446
1b4b94579Smrg#include <assert.h> 2b4b94579Smrg#include <stdlib.h> 3b4b94579Smrg#include <stdio.h> 4b4b94579Smrg#include "pixman.h" 5a450e446Smrg#include <config.h> 6b4b94579Smrg 7b4b94579Smrg#define SIZE 1024 8b4b94579Smrg 9b4b94579Smrgpixman_indexed_t mono_pallete = { 10b4b94579Smrg .rgba = { 0x00000000, 0x00ffffff }, 11b4b94579Smrg}; 12b4b94579Smrg 13b4b94579Smrg 14b4b94579Smrgtypedef struct { 15b4b94579Smrg pixman_format_code_t format; 16b4b94579Smrg int width, height; 17b4b94579Smrg int stride; 18b4b94579Smrg uint32_t src[SIZE]; 19b4b94579Smrg uint32_t dst[SIZE]; 20b4b94579Smrg pixman_indexed_t *indexed; 21b4b94579Smrg} testcase_t; 22b4b94579Smrg 23b4b94579Smrgtestcase_t testcases[] = { 24b4b94579Smrg { 25b4b94579Smrg .format = PIXMAN_a8r8g8b8, 26b4b94579Smrg .width = 2, .height = 2, 27b4b94579Smrg .stride = 8, 28b4b94579Smrg .src = { 0x00112233, 0x44556677, 29b4b94579Smrg 0x8899aabb, 0xccddeeff }, 30b4b94579Smrg .dst = { 0x00112233, 0x44556677, 31b4b94579Smrg 0x8899aabb, 0xccddeeff }, 32b4b94579Smrg .indexed = NULL, 33b4b94579Smrg }, 34b4b94579Smrg { 35b4b94579Smrg .format = PIXMAN_g1, 36b4b94579Smrg .width = 8, .height = 2, 37b4b94579Smrg .stride = 4, 38a450e446Smrg#ifdef WORDS_BIGENDIAN 39a450e446Smrg .src = { 0xaa000000, 40a450e446Smrg 0x55000000 }, 41a450e446Smrg#else 42b4b94579Smrg .src = { 0x00000055, 43b4b94579Smrg 0x000000aa }, 44a450e446Smrg#endif 45b4b94579Smrg .dst = { 0x00ffffff, 0x00000000, 0x00ffffff, 0x00000000, 0x00ffffff, 0x00000000, 0x00ffffff, 0x00000000, 46b4b94579Smrg 0x00000000, 0x00ffffff, 0x00000000, 0x00ffffff, 0x00000000, 0x00ffffff, 0x00000000, 0x00ffffff }, 47b4b94579Smrg .indexed = &mono_pallete, 48b4b94579Smrg }, 49b4b94579Smrg#if 0 50b4b94579Smrg { 51b4b94579Smrg .format = PIXMAN_g8, 52b4b94579Smrg .width = 4, .height = 2, 53b4b94579Smrg .stride = 4, 54b4b94579Smrg .src = { 0x01234567, 55b4b94579Smrg 0x89abcdef }, 56b4b94579Smrg .dst = { 0x00010101, 0x00232323, 0x00454545, 0x00676767, 57b4b94579Smrg 0x00898989, 0x00ababab, 0x00cdcdcd, 0x00efefef, }, 58b4b94579Smrg }, 59b4b94579Smrg#endif 60a450e446Smrg /* FIXME: make this work on big endian */ 61b4b94579Smrg { 62b4b94579Smrg .format = PIXMAN_yv12, 63b4b94579Smrg .width = 8, .height = 2, 64b4b94579Smrg .stride = 8, 65a450e446Smrg#ifdef WORDS_BIGENDIAN 66a450e446Smrg .src = { 0x00ff00ff, 0x00ff00ff, 67a450e446Smrg 0xff00ff00, 0xff00ff00, 68a450e446Smrg 0x80ff8000, 69a450e446Smrg 0x800080ff 70a450e446Smrg }, 71a450e446Smrg#else 72b4b94579Smrg .src = { 0xff00ff00, 0xff00ff00, 73b4b94579Smrg 0x00ff00ff, 0x00ff00ff, 74b4b94579Smrg 0x0080ff80, 75a450e446Smrg 0xff800080 76a450e446Smrg }, 77a450e446Smrg#endif 78b4b94579Smrg .dst = { 79b4b94579Smrg 0xff000000, 0xffffffff, 0xffb80000, 0xffffe113, 80b4b94579Smrg 0xff000000, 0xffffffff, 0xff0023ee, 0xff4affff, 81b4b94579Smrg 0xffffffff, 0xff000000, 0xffffe113, 0xffb80000, 82b4b94579Smrg 0xffffffff, 0xff000000, 0xff4affff, 0xff0023ee, 83b4b94579Smrg }, 84b4b94579Smrg }, 85b4b94579Smrg}; 86b4b94579Smrg 87b4b94579Smrgconst int ntestcases = sizeof(testcases)/sizeof(testcases[0]); 88b4b94579Smrg 89b4b94579Smrg 90b4b94579Smrgstatic uint32_t 91b4b94579Smrgreader (const void *src, int size) 92b4b94579Smrg{ 93b4b94579Smrg switch (size) 94b4b94579Smrg { 95b4b94579Smrg case 1: 96b4b94579Smrg return *(uint8_t *)src; 97b4b94579Smrg case 2: 98b4b94579Smrg return *(uint16_t *)src; 99b4b94579Smrg case 4: 100b4b94579Smrg return *(uint32_t *)src; 101b4b94579Smrg default: 102b4b94579Smrg assert(0); 103b4b94579Smrg } 104b4b94579Smrg} 105b4b94579Smrg 106b4b94579Smrg 107b4b94579Smrgstatic void 108b4b94579Smrgwriter (void *src, uint32_t value, int size) 109b4b94579Smrg{ 110b4b94579Smrg switch (size) 111b4b94579Smrg { 112b4b94579Smrg case 1: 113b4b94579Smrg *(uint8_t *)src = value; 114b4b94579Smrg break; 115b4b94579Smrg case 2: 116b4b94579Smrg *(uint16_t *)src = value; 117b4b94579Smrg break; 118b4b94579Smrg case 4: 119b4b94579Smrg *(uint32_t *)src = value; 120b4b94579Smrg break; 121b4b94579Smrg default: 122b4b94579Smrg assert(0); 123b4b94579Smrg } 124b4b94579Smrg} 125b4b94579Smrg 126b4b94579Smrg 127b4b94579Smrgint 128b4b94579Smrgmain (int argc, char **argv) 129b4b94579Smrg{ 130b4b94579Smrg uint32_t dst[SIZE]; 131b4b94579Smrg pixman_image_t *src_img; 132b4b94579Smrg pixman_image_t *dst_img; 133b4b94579Smrg int i, j, x, y; 134b4b94579Smrg int ret = 0; 135b4b94579Smrg 136b4b94579Smrg for (i = 0; i < ntestcases; ++i) { 137b4b94579Smrg for (j = 0; j < 2; ++j) { 138b4b94579Smrg src_img = pixman_image_create_bits (testcases[i].format, 139b4b94579Smrg testcases[i].width, 140b4b94579Smrg testcases[i].height, 141b4b94579Smrg testcases[i].src, 142b4b94579Smrg testcases[i].stride); 143b4b94579Smrg pixman_image_set_indexed(src_img, testcases[i].indexed); 144b4b94579Smrg 145b4b94579Smrg dst_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, 146b4b94579Smrg testcases[i].width, 147b4b94579Smrg testcases[i].height, 148b4b94579Smrg dst, 149b4b94579Smrg testcases[i].width*4); 150b4b94579Smrg 151b4b94579Smrg if (j) { 152b4b94579Smrg pixman_image_set_accessors (src_img, reader, writer); 153b4b94579Smrg pixman_image_set_accessors (dst_img, reader, writer); 154b4b94579Smrg } 155b4b94579Smrg 156b4b94579Smrg pixman_image_composite (PIXMAN_OP_SRC, src_img, NULL, dst_img, 157b4b94579Smrg 0, 0, 0, 0, 0, 0, testcases[i].width, testcases[i].height); 158b4b94579Smrg 159b4b94579Smrg pixman_image_unref (src_img); 160b4b94579Smrg pixman_image_unref (dst_img); 161b4b94579Smrg 162b4b94579Smrg for (y = 0; y < testcases[i].height; ++y) 163b4b94579Smrg for (x = 0; x < testcases[i].width; ++x) { 164b4b94579Smrg int offset = y*testcases[i].width + x; 165b4b94579Smrg if (dst[offset] != testcases[i].dst[offset]) { 166b4b94579Smrg printf ("test %i%c: pixel mismatch at (x=%d,y=%d): %08x expected, %08x obtained\n", 167b4b94579Smrg i + 1, 'a' + j, 168b4b94579Smrg x, y, 169b4b94579Smrg testcases[i].dst[offset], dst[offset]); 170b4b94579Smrg ret = 1; 171b4b94579Smrg } 172b4b94579Smrg } 173b4b94579Smrg } 174b4b94579Smrg } 175b4b94579Smrg 176b4b94579Smrg return ret; 177b4b94579Smrg} 178