I'd like to move driving of tests out of tests.c and into t_*.c, and part of that will be allowing tests to use the formats list. While I'm at it, save the name of the format in the array so it doesn't need to be recomputed.
Signed-off-by: Eric Anholt <e...@anholt.net> --- rendercheck.h | 8 ++++++++ tests.c | 51 ++++++++++++++++++++++++++------------------------- 2 files changed, 34 insertions(+), 25 deletions(-) diff --git a/rendercheck.h b/rendercheck.h index 55ffcff..2195cb4 100644 --- a/rendercheck.h +++ b/rendercheck.h @@ -80,6 +80,14 @@ struct op_info { #define TEST_GTK_ARGB_XBGR 0x2000 #define TEST_LIBREOFFICE_XRGB 0x4000 +struct render_format { + XRenderPictFormat *format; + char *name; +}; + +extern struct render_format *formats; +extern int nformats; + extern int pixmap_move_iter; extern int win_width, win_height; extern struct op_info ops[]; diff --git a/tests.c b/tests.c index 62fa34b..456e778 100644 --- a/tests.c +++ b/tests.c @@ -27,8 +27,8 @@ #include "rendercheck.h" -static XRenderPictFormat **format_list; -static int nformats; +struct render_format *formats; +int nformats; static int argb32index; /* Note: changing the order of these colors may disrupt tests that depend on @@ -240,36 +240,35 @@ create_formats_list(Display *dpy) { int i; int nformats_allocated = 5; - XRenderPictFormat templ; + XRenderPictFormat templ, *format; memset(&templ, 0, sizeof(templ)); templ.type = PictTypeDirect; - format_list = malloc(sizeof(XRenderPictFormat *) * nformats_allocated); - if (format_list == NULL) + formats = malloc(sizeof(*formats) * nformats_allocated); + if (formats == NULL) errx(1, "malloc error"); nformats = 0; argb32index = -1; for (i = 0; ; i++) { - char *name; int alphabits, redbits; if (nformats + 1 == nformats_allocated) { nformats_allocated *= 2; - format_list = realloc(format_list, sizeof(XRenderPictFormat *) * - nformats_allocated); - if (format_list == NULL) + formats = realloc(formats, sizeof(*formats) * nformats_allocated); + if (formats == NULL) errx(1, "realloc error"); } - format_list[nformats] = XRenderFindFormat(dpy, PictFormatType, &templ, - i); - if (format_list[nformats] == NULL) - break; + format = XRenderFindFormat(dpy, PictFormatType, &templ, i); + if (!format) + break; - alphabits = bit_count(format_list[nformats]->direct.alphaMask); - redbits = bit_count(format_list[nformats]->direct.redMask); + formats[nformats].format = format; + + alphabits = bit_count(format->direct.alphaMask); + redbits = bit_count(format->direct.redMask); /* Our testing code isn't all that hot, so don't bother trying at * the low depths yet. @@ -280,31 +279,33 @@ create_formats_list(Display *dpy) continue; } - describe_format(&name, NULL, format_list[nformats]); + describe_format(&formats[nformats].name, NULL, format); if (format_whitelist_len != 0) { bool ok = false; int j; for (j = 0; j < format_whitelist_len; j++) { - if (strcmp(format_whitelist[j], name) == 0) { + if (strcmp(format_whitelist[j], formats[nformats].name) == 0) { ok = true; break; } } if (!ok) { - printf("Ignoring server-supported format: %s\n", name); + printf("Ignoring server-supported format: %s\n", + formats[nformats].name); + free(formats[nformats].name); + formats[nformats].name = NULL; continue; } } - if (format_list[nformats] == XRenderFindStandardFormat(dpy, - PictStandardARGB32)) + if (format == XRenderFindStandardFormat(dpy, PictStandardARGB32)) { argb32index = nformats; } - printf("Found server-supported format: %s\n", name); + printf("Found server-supported format: %s\n", formats[nformats].name); nformats++; } @@ -336,7 +337,7 @@ do_tests(Display *dpy, picture_info *win) errx(1, "malloc error"); for (i = 0; i < num_dests; i++) { - dests[i].format = format_list[i]; + dests[i].format = formats[i].format; dests[i].d = XCreatePixmap(dpy, DefaultRootWindow(dpy), win_width, win_height, dests[i].format->depth); dests[i].pict = XRenderCreatePicture(dpy, dests[i].d, @@ -355,7 +356,7 @@ do_tests(Display *dpy, picture_info *win) color4d *c = &colors[i / nformats]; /* The standard PictFormat numbers go from 0 to 4 */ - pictures_1x1[i].format = format_list[i % nformats]; + pictures_1x1[i].format = formats[i % nformats].format; pictures_1x1[i].d = XCreatePixmap(dpy, DefaultRootWindow(dpy), 1, 1, pictures_1x1[i].format->depth); pa.repeat = true; @@ -385,7 +386,7 @@ do_tests(Display *dpy, picture_info *win) color4d *c = &colors[i / nformats]; /* The standard PictFormat numbers go from 0 to 4 */ - pictures_10x10[i].format = format_list[i % nformats]; + pictures_10x10[i].format = formats[i % nformats].format; pictures_10x10[i].d = XCreatePixmap(dpy, DefaultRootWindow(dpy), 10, 10, pictures_10x10[i].format->depth); pictures_10x10[i].pict = XRenderCreatePicture(dpy, @@ -423,7 +424,7 @@ do_tests(Display *dpy, picture_info *win) c.green = (int)(colors[i].g*65535); c.blue = (int)(colors[i].b*65535); pictures_solid[i].pict = XRenderCreateSolidFill(dpy, &c); - pictures_solid[i].format = format_list[argb32index]; + pictures_solid[i].format = formats[argb32index].format; pictures_solid[i].name = (char *)"Solid"; } -- 2.7.0 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel