From b24af6c6af003368ebb5c3e042db0ab7a295d89e Mon Sep 17 00:00:00 2001 From: marha Date: Sun, 19 Dec 2010 17:44:53 +0000 Subject: libXext libXdmcp pixman git update 29/12/2010 --- pixman/test/gradient-crash-test.c | 123 +++++++++++++++++++++++++------------- 1 file changed, 82 insertions(+), 41 deletions(-) (limited to 'pixman/test/gradient-crash-test.c') diff --git a/pixman/test/gradient-crash-test.c b/pixman/test/gradient-crash-test.c index 88424dee9..35b25b2cb 100644 --- a/pixman/test/gradient-crash-test.c +++ b/pixman/test/gradient-crash-test.c @@ -1,6 +1,6 @@ #include #include -#include "pixman.h" +#include "utils.h" int main (int argc, char **argv) @@ -11,8 +11,14 @@ main (int argc, char **argv) uint32_t *dest = malloc (WIDTH * HEIGHT * 4); pixman_image_t *src_img; pixman_image_t *dest_img; - int i, j; + int i, j, k, p; + typedef struct + { + pixman_point_fixed_t p0; + pixman_point_fixed_t p1; + } point_pair_t; + pixman_gradient_stop_t onestop[1] = { { pixman_int_to_fixed (1), { 0xffff, 0xeeee, 0xeeee, 0xeeee } }, @@ -30,29 +36,56 @@ main (int argc, char **argv) { pixman_int_to_fixed (1), { 0xffff, 0x1111, 0x1111, 0x1111 } } }; - pixman_point_fixed_t p1 = { pixman_double_to_fixed (0), 0 }; - pixman_point_fixed_t p2 = { pixman_double_to_fixed (WIDTH / 8.), - pixman_int_to_fixed (0) }; - -#if 0 - pixman_transform_t trans = { - { { pixman_double_to_fixed (2), pixman_double_to_fixed (0.5), pixman_double_to_fixed (-100), }, - { pixman_double_to_fixed (0), pixman_double_to_fixed (3), pixman_double_to_fixed (0), }, - { pixman_double_to_fixed (0), pixman_double_to_fixed (0.000), pixman_double_to_fixed (1.0) } - } - }; -#else - pixman_transform_t trans = { - { { pixman_fixed_1, 0, 0 }, - { 0, pixman_fixed_1, 0 }, - { 0, 0, pixman_fixed_1 } } + point_pair_t point_pairs [] = + { { { pixman_double_to_fixed (0), 0 }, + { pixman_double_to_fixed (WIDTH / 8.), pixman_int_to_fixed (0) } }, + { { pixman_double_to_fixed (WIDTH / 2.0), pixman_double_to_fixed (HEIGHT / 2.0) }, + { pixman_double_to_fixed (WIDTH / 2.0), pixman_double_to_fixed (HEIGHT / 2.0) } } + }; + + pixman_transform_t transformations[] = { + { + { { pixman_double_to_fixed (2), pixman_double_to_fixed (0.5), pixman_double_to_fixed (-100), }, + { pixman_double_to_fixed (0), pixman_double_to_fixed (3), pixman_double_to_fixed (0), }, + { pixman_double_to_fixed (0), pixman_double_to_fixed (0.000), pixman_double_to_fixed (1.0) } + } + }, + { + { { pixman_double_to_fixed (1), pixman_double_to_fixed (0), pixman_double_to_fixed (0), }, + { pixman_double_to_fixed (0), pixman_double_to_fixed (1), pixman_double_to_fixed (0), }, + { pixman_double_to_fixed (0), pixman_double_to_fixed (0.000), pixman_double_to_fixed (1.0) } + } + }, + { + { { pixman_double_to_fixed (2), pixman_double_to_fixed (1), pixman_double_to_fixed (0), }, + { pixman_double_to_fixed (1), pixman_double_to_fixed (1), pixman_double_to_fixed (0), }, + { pixman_double_to_fixed (2), pixman_double_to_fixed (1.000), pixman_double_to_fixed (1.0) } + } + }, + { + { { pixman_double_to_fixed (2), pixman_double_to_fixed (1), pixman_double_to_fixed (0), }, + { pixman_double_to_fixed (1), pixman_double_to_fixed (1), pixman_double_to_fixed (0), }, + { pixman_double_to_fixed (0), pixman_double_to_fixed (0), pixman_double_to_fixed (0) } + } + }, + { + { { pixman_double_to_fixed (2), pixman_double_to_fixed (1), pixman_double_to_fixed (0), }, + { pixman_double_to_fixed (1), pixman_double_to_fixed (1), pixman_double_to_fixed (0), }, + { pixman_double_to_fixed (2), pixman_double_to_fixed (-1), pixman_double_to_fixed (0) } + } + }, + { + { { pixman_double_to_fixed (2), pixman_double_to_fixed (1), pixman_double_to_fixed (3), }, + { pixman_double_to_fixed (1), pixman_double_to_fixed (1), pixman_double_to_fixed (0), }, + { pixman_double_to_fixed (2), pixman_double_to_fixed (-1), pixman_double_to_fixed (0) } + } + }, }; -#endif - - pixman_point_fixed_t c_inner; - pixman_point_fixed_t c_outer; + pixman_fixed_t r_inner; pixman_fixed_t r_outer; + + enable_fp_exceptions(); for (i = 0; i < WIDTH * HEIGHT; ++i) dest[i] = 0x4f00004f; /* pale blue */ @@ -62,10 +95,6 @@ main (int argc, char **argv) dest, WIDTH * 4); - c_inner.x = pixman_double_to_fixed (50.0); - c_inner.y = pixman_double_to_fixed (50.0); - c_outer.x = pixman_double_to_fixed (50.0); - c_outer.y = pixman_double_to_fixed (50.0); r_inner = 0; r_outer = pixman_double_to_fixed (50.0); @@ -73,6 +102,7 @@ main (int argc, char **argv) { pixman_gradient_stop_t *stops; int num_stops; + if (i == 0) { stops = onestop; @@ -91,23 +121,34 @@ main (int argc, char **argv) for (j = 0; j < 3; ++j) { - if (j == 0) - src_img = pixman_image_create_conical_gradient (&c_inner, r_inner, - stops, num_stops); - else if (j == 1) - src_img = pixman_image_create_radial_gradient (&c_inner, &c_outer, - r_inner, r_outer, - stops, num_stops); - else - src_img = pixman_image_create_linear_gradient (&p1, &p2, - stops, num_stops); - pixman_image_set_transform (src_img, &trans); - pixman_image_set_repeat (src_img, PIXMAN_REPEAT_NONE); - pixman_image_composite (PIXMAN_OP_OVER, src_img, NULL, dest_img, - 0, 0, 0, 0, 0, 0, 10 * WIDTH, HEIGHT); + for (p = 0; p < ARRAY_LENGTH (point_pairs); ++p) + { + point_pair_t *pair = &(point_pairs[p]); + + if (j == 0) + src_img = pixman_image_create_conical_gradient (&(pair->p0), r_inner, + stops, num_stops); + else if (j == 1) + src_img = pixman_image_create_radial_gradient (&(pair->p0), &(pair->p1), + r_inner, r_outer, + stops, num_stops); + else + src_img = pixman_image_create_linear_gradient (&(pair->p0), &(pair->p1), + stops, num_stops); + + for (k = 0; k < ARRAY_LENGTH (transformations); ++k) + { + pixman_image_set_transform (src_img, &transformations[k]); + + pixman_image_set_repeat (src_img, PIXMAN_REPEAT_NONE); + pixman_image_composite (PIXMAN_OP_OVER, src_img, NULL, dest_img, + 0, 0, 0, 0, 0, 0, 10 * WIDTH, HEIGHT); + } + + pixman_image_unref (src_img); + } } - pixman_image_unref (src_img); } pixman_image_unref (dest_img); -- cgit v1.2.3