gallium/ddebug: add 'verbose' option
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 21 Jan 2016 21:53:02 +0000 (16:53 -0500)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Tue, 26 Jan 2016 14:58:55 +0000 (09:58 -0500)
This currently just writes out the name of dump files, which can be useful
to easily correlate those files with other log outputs (driver debug output,
apitrace calls, etc.)

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/ddebug/dd_draw.c
src/gallium/drivers/ddebug/dd_pipe.h
src/gallium/drivers/ddebug/dd_screen.c
src/gallium/drivers/ddebug/dd_util.h
src/gallium/drivers/radeonsi/si_debug.c

index de484abbb3d443bae96959cc269a93733efc2a02..45e4e10d500d89f0734f04efa6437eb51471c4d0 100644 (file)
@@ -88,8 +88,9 @@ struct dd_call
 static FILE *
 dd_get_file_stream(struct dd_context *dctx)
 {
+   struct dd_screen *dscreen = dd_screen(dctx->base.screen);
    struct pipe_screen *screen = dctx->pipe->screen;
-   FILE *f = dd_get_debug_file();
+   FILE *f = dd_get_debug_file(dscreen->verbose);
    if (!f)
       return NULL;
 
index a045518dc16855b32086d37d988b072776138d8b..80098dcb6444fd0037cbed47fe5447dd586b5bae 100644 (file)
@@ -45,6 +45,7 @@ struct dd_screen
    unsigned timeout_ms;
    enum dd_mode mode;
    bool no_flush;
+   bool verbose;
    unsigned skip_count;
 };
 
index ab87d2596130b1d7506d28c24a5d4ecfa4d9c619..3706b2d63f52b35570d612781bd79bfdc1f31df7 100644 (file)
@@ -280,17 +280,18 @@ ddebug_screen_create(struct pipe_screen *screen)
       puts("");
       puts("Usage:");
       puts("");
-      puts("  GALLIUM_DDEBUG=\"always [noflush]\"");
+      puts("  GALLIUM_DDEBUG=\"always [noflush] [verbose]\"");
       puts("    Flush and dump context and driver information after every draw call into");
       puts("    $HOME/"DD_DIR"/.");
       puts("");
-      puts("  GALLIUM_DDEBUG=\"[timeout in ms] [noflush]\"");
+      puts("  GALLIUM_DDEBUG=\"[timeout in ms] [noflush] [verbose]\"");
       puts("    Flush and detect a device hang after every draw call based on the given");
       puts("    fence timeout and dump context and driver information into");
       puts("    $HOME/"DD_DIR"/ when a hang is detected.");
       puts("");
       puts("  If 'noflush' is specified, do not flush on every draw call. In hang");
       puts("  detection mode, this only detect hangs in pipe->flush.");
+      puts("  If 'verbose' is specified, additional information is written to stderr.");
       puts("");
       puts("  GALLIUM_DDEBUG_SKIP=[count]");
       puts("    Skip flush and hang detection for the given initial number of draw calls.");
@@ -341,6 +342,7 @@ ddebug_screen_create(struct pipe_screen *screen)
    dscreen->timeout_ms = timeout;
    dscreen->mode = dump_always ? DD_DUMP_ALL_CALLS : DD_DETECT_HANGS;
    dscreen->no_flush = no_flush;
+   dscreen->verbose = strstr(option, "verbose") != NULL;
 
    switch (dscreen->mode) {
    case DD_DUMP_ALL_CALLS:
index c217c8eed6826e24add96cec4bdf1fd905c93262..093bdff4a92a8778b2cd7ec595cca83893511239 100644 (file)
@@ -40,7 +40,7 @@
 #define DD_DIR "ddebug_dumps"
 
 static inline FILE *
-dd_get_debug_file()
+dd_get_debug_file(bool verbose)
 {
    static unsigned index;
    char proc_name[128], dir[256], name[512];
@@ -65,6 +65,9 @@ dd_get_debug_file()
       return NULL;
    }
 
+   if (verbose)
+      fprintf(stderr, "dd: dumping to file %s\n", name);
+
    return f;
 }
 
index a07b1c56579f601c0cc5f24b0c76e4e5f1cb7e07..e16ebbdef3e3b68bd950cc3839017b37bafe3032 100644 (file)
@@ -771,7 +771,7 @@ void si_check_vm_faults(struct si_context *sctx)
        if (!si_vm_fault_occured(sctx, &addr))
                return;
 
-       f = dd_get_debug_file();
+       f = dd_get_debug_file(false);
        if (!f)
                return;