diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2019-03-01 08:18:07 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2019-03-01 08:18:27 +0100 |
commit | f5e87d01738b72630996adc102c64455af225950 (patch) | |
tree | 11053bd7f81d540adbe40fcc6fedf9c5e37a92d7 | |
parent | db5ccee78a02ff0adb0779753c2a986a1107a073 (diff) | |
download | drminfo-f5e87d01738b72630996adc102c64455af225950.tar.gz |
autotest tweaks
-rw-r--r-- | drminfo.c | 40 | ||||
-rw-r--r-- | drmtest.c | 45 | ||||
-rw-r--r-- | fbtest.c | 26 | ||||
-rw-r--r-- | render.c | 30 |
4 files changed, 91 insertions, 50 deletions
@@ -307,19 +307,34 @@ static void drm_info_planes(int fd, bool print_modifiers, bool print_properties) } } -static void drm_info_fmts(int fd) +static void drm_info_fmts(int fd, bool listonly) { + bool first = true; int i; drm_plane_init(fd); - fprintf(stdout, "framebuffer formats\n"); - drm_print_format_hdr(stdout, 4, true); - for (i = 0; i < fmtcnt; i++) { - if (!drm_probe_format_fb(fd, &fmts[i])) - continue; - drm_print_format(stdout, &fmts[i], 4, true); + if (listonly) { + for (i = 0; i < fmtcnt; i++) { + if (!drm_probe_format_fb(fd, &fmts[i])) + continue; + if (!drm_probe_format_primary(&fmts[i])) + continue; + if (!fmts[i].pixman) + continue; + fprintf(stdout, "%s%s", first ? "" : " ", fmts[i].name); + first = false; + } + fprintf(stdout, "\n"); + } else { + fprintf(stdout, "framebuffer formats\n"); + drm_print_format_hdr(stdout, 4, true); + for (i = 0; i < fmtcnt; i++) { + if (!drm_probe_format_fb(fd, &fmts[i])) + continue; + drm_print_format(stdout, &fmts[i], 4, true); + } + fprintf(stdout, "\n"); } - fprintf(stdout, "\n"); } static int drm_open(int devnr) @@ -386,6 +401,7 @@ static void usage(FILE *fp) " -p print supported planes\n" " -P print supported planes, with modifiers\n" " -f print supported formats\n" + " -F print testable (drmtest) formats\n" " -r list properties\n" " -l list all known formats\n" "\n"); @@ -401,10 +417,11 @@ int main(int argc, char **argv) bool modifiers = false; bool properties = false; bool format = false; + bool listonly = false; char *columns; for (;;) { - c = getopt(argc, argv, "hlaAmopPfrc:"); + c = getopt(argc, argv, "hlaAmopPfFrc:"); if (c == -1) break; switch (c) { @@ -438,6 +455,9 @@ int main(int argc, char **argv) case 'r': properties = true; break; + case 'F': + /* fall through */ + listonly = true; case 'f': format = true; break; @@ -469,6 +489,6 @@ int main(int argc, char **argv) if (plane) drm_info_planes(fd, modifiers, properties); if (format) - drm_info_fmts(fd); + drm_info_fmts(fd, listonly); return 0; } @@ -43,40 +43,39 @@ static cairo_surface_t *image; /* ------------------------------------------------------------------ */ -static void drm_draw(void) +static void drm_draw(bool autotest) { char name[64]; char info1[80], info2[80], info3[80]; cairo_t *cr; - snprintf(info1, sizeof(info1), "drm driver: %s, v%d.%d.%d (%s)", - version->name, version->version_major, version->version_minor, - version->version_patchlevel, version->desc); - - drm_conn_name(conn, name, sizeof(name)); - snprintf(info2, sizeof(info2), "%dx%d, output %.10s, %.10s mode", - mode->hdisplay, mode->vdisplay, name, - pxcs && pxfb ? "pixman" : "cairo"); + snprintf(info1, sizeof(info1), "mode: %dx%d", + mode->hdisplay, mode->vdisplay); if (fmt->fourcc) { - snprintf(info3, sizeof(info3), - "dumb drm buffer, bpp %d, fourcc %c%c%c%c (ADDFB2)", + snprintf(info2, sizeof(info2), + "bpp %d, fourcc %c%c%c%c (ADDFB2)", fmt->bpp, (fmt->fourcc >> 0) & 0xff, (fmt->fourcc >> 8) & 0xff, (fmt->fourcc >> 16) & 0xff, (fmt->fourcc >> 24) & 0xff); } else { - snprintf(info3, sizeof(info3), - "dumb drm buffer, bpp %d, depth %d (legacy ADDFB)", + snprintf(info2, sizeof(info2), + "bpp %d, depth %d (legacy ADDFB)", fmt->bpp, fmt->depth); } + drm_conn_name(conn, name, sizeof(name)); + snprintf(info3, sizeof(info3), "drm driver: %s, output %.10s", + version->name, name); + cr = cairo_create(cs); if (image) { render_image(cr, mode->hdisplay, mode->vdisplay, image); } else { - render_test(cr, mode->hdisplay, mode->vdisplay, info1, info2, info3); + render_test(cr, mode->hdisplay, mode->vdisplay, info1, info2, + autotest ? NULL : info3); } cairo_destroy(cr); @@ -168,9 +167,9 @@ static void drm_init_dumb_fb(bool use_pixman) } } -static void drm_draw_dumb_fb(void) +static void drm_draw_dumb_fb(bool autotest) { - drm_draw(); + drm_draw(autotest); drmModeDirtyFB(fd, fb_id, 0, 0); } @@ -202,17 +201,21 @@ int main(int argc, char **argv) char *format = NULL; char *modename = NULL; char buf[32]; + bool autotest = false; bool pixman = false; int c,i; for (;;) { - c = getopt(argc, argv, "hpc:s:o:i:f:m:"); + c = getopt(argc, argv, "hpac:s:o:i:f:m:"); if (c == -1) break; switch (c) { case 'p': pixman = true; break; + case 'a': + autotest = true; + break; case 'c': card = atoi(optarg); break; @@ -290,16 +293,18 @@ int main(int argc, char **argv) if (fmt->cairo == CAIRO_FORMAT_INVALID) { if (fmt->pixman) { - fprintf(stderr, "format not supported by cairo, enabling pixman mode\n"); + fprintf(stderr, "format %s not supported by cairo, enabling pixman mode\n", + fmt->name); pixman = true; } else { - fprintf(stderr, "format not supported by cairo or pixman\n"); + fprintf(stderr, "format %s not supported by cairo or pixman\n", + fmt->name); exit(1); } } drm_init_dumb_fb(pixman); - drm_draw_dumb_fb(); + drm_draw_dumb_fb(autotest); drm_show_fb(); tty_raw(); @@ -28,23 +28,28 @@ static cairo_surface_t *image; /* ------------------------------------------------------------------ */ -static void fb_draw(void) +static void fb_draw(bool autotest) { char info1[80]; char info2[80]; char info3[80]; cairo_t *cr; - snprintf(info1, sizeof(info1), "fb driver: %s", fb_fix.id); - snprintf(info2, sizeof(info2), "%dx%d", fb_var.xres, fb_var.yres); - snprintf(info3, sizeof(info3), "fbdev, %d bpp", - fb_var.bits_per_pixel); + snprintf(info1, sizeof(info1), "mode: %dx%d", fb_var.xres, fb_var.yres); + snprintf(info2, sizeof(info2), "%d bpp, rgba %d,%d,%d,%d", + fb_var.bits_per_pixel, + fb_var.red.length, + fb_var.green.length, + fb_var.blue.length, + fb_var.transp.length); + snprintf(info3, sizeof(info3), "fb driver: %s", fb_fix.id); cr = cairo_create(cs); if (image) { render_image(cr, fb_var.xres, fb_var.yres, image); } else { - render_test(cr, fb_var.xres, fb_var.yres, info1, info2, info3); + render_test(cr, fb_var.xres, fb_var.yres, info1, info2, + autotest ? NULL : info3); } cairo_destroy(cr); } @@ -59,6 +64,7 @@ static void usage(FILE *fp) "\n" "options:\n" " -h print this\n" + " -a autotest mode (don't print hardware info)\n" " -f <nr> pick framebuffer\n" " -s <secs> set sleep time (default: 60)\n" " -i <file> load and display image <file>\n" @@ -69,14 +75,18 @@ int main(int argc, char **argv) { int framebuffer = 0; int secs = 60; + bool autotest = false; char buf[32]; int c; for (;;) { - c = getopt(argc, argv, "hs:i:f:"); + c = getopt(argc, argv, "has:i:f:"); if (c == -1) break; switch (c) { + case 'a': + autotest = true; + break; case 'f': framebuffer = atoi(optarg); break; @@ -101,7 +111,7 @@ int main(int argc, char **argv) fb_var.xres, fb_var.yres, fb_fix.line_length); - fb_draw(); + fb_draw(autotest); tty_raw(); kbd_wait(secs); @@ -12,6 +12,7 @@ static void render_color_bar(cairo_t *cr, int x, int y, int w, int h, { cairo_font_extents_t ext; cairo_pattern_t *gr; + int lines; gr = cairo_pattern_create_linear(x, y+h/2, w, y+h/2); cairo_pattern_add_color_stop_rgb(gr, 0, 0, 0, 0); @@ -21,25 +22,30 @@ static void render_color_bar(cairo_t *cr, int x, int y, int w, int h, cairo_fill(cr); cairo_pattern_destroy(gr); + cairo_set_source_rgb(cr, r, g, b); cairo_select_font_face(cr, "Liberation Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); + + lines = 1; if (l2) { cairo_set_source_rgb(cr, 1, 1, 1); - cairo_set_font_size(cr, (h - 2*pad) / 3); - cairo_font_extents(cr, &ext); - cairo_move_to(cr, x + pad, y + pad + ext.ascent); - cairo_show_text(cr, l1); + lines++; + if (l3) + lines++; + } + + cairo_set_font_size(cr, (h - 2*pad) / lines); + cairo_font_extents(cr, &ext); + cairo_move_to(cr, x + pad, y + pad + ext.ascent); + cairo_show_text(cr, l1); + if (l2) { cairo_move_to(cr, x + pad, y + pad + ext.ascent + ext.height); cairo_show_text(cr, l2); - cairo_move_to(cr, x + pad, y + pad + ext.ascent + ext.height * 2); - cairo_show_text(cr, l3); - } else { - cairo_set_source_rgb(cr, r, g, b); - cairo_set_font_size(cr, h - 2*pad); - cairo_font_extents(cr, &ext); - cairo_move_to(cr, x + pad, y + pad + ext.ascent); - cairo_show_text(cr, l1); + if (l3) { + cairo_move_to(cr, x + pad, y + pad + ext.ascent + ext.height * 2); + cairo_show_text(cr, l3); + } } } |