gallium/ddebug: make 'noflush' also affect 'always' mode
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 21 Jan 2016 21:46:59 +0000 (16:46 -0500)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Tue, 26 Jan 2016 14:58:49 +0000 (09:58 -0500)
This changes the default behavior of 'always' mode to be consistent with
hang detection mode.

I have used this to more easily compare dumped command streams using diff.

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

index 0d7ee9a168602d2de686a04ca0bd5f51bb9f0de2..de484abbb3d443bae96959cc269a93733efc2a02 100644 (file)
@@ -602,6 +602,7 @@ static void
 dd_after_draw(struct dd_context *dctx, struct dd_call *call)
 {
    struct dd_screen *dscreen = dd_screen(dctx->base.screen);
+   struct pipe_context *pipe = dctx->pipe;
 
    if (dctx->num_draw_calls >= dscreen->skip_count) {
       switch (dscreen->mode) {
@@ -615,6 +616,8 @@ dd_after_draw(struct dd_context *dctx, struct dd_call *call)
          }
          break;
       case DD_DUMP_ALL_CALLS:
+         if (!dscreen->no_flush)
+            pipe->flush(pipe, NULL, 0);
          dd_dump_call(dctx, call, 0);
          break;
       default:
index 2716845f58f72946894bc44abc37f7bd0c24cf28..ab87d2596130b1d7506d28c24a5d4ecfa4d9c619 100644 (file)
@@ -270,7 +270,7 @@ ddebug_screen_create(struct pipe_screen *screen)
 {
    struct dd_screen *dscreen;
    const char *option = debug_get_option("GALLIUM_DDEBUG", NULL);
-   bool dump_always = option && !strcmp(option, "always");
+   bool dump_always = option && !strncmp(option, "always", 6);
    bool no_flush = option && strstr(option, "noflush");
    bool help = option && !strcmp(option, "help");
    unsigned timeout = 0;
@@ -280,15 +280,17 @@ ddebug_screen_create(struct pipe_screen *screen)
       puts("");
       puts("Usage:");
       puts("");
-      puts("  GALLIUM_DDEBUG=always");
-      puts("    Dump context and driver information after every draw call into");
+      puts("  GALLIUM_DDEBUG=\"always [noflush]\"");
+      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]\"");
       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("    If 'noflush' is specified, only detect hangs in pipe->flush.");
+      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("");
       puts("  GALLIUM_DDEBUG_SKIP=[count]");
       puts("    Skip flush and hang detection for the given initial number of draw calls.");