gallium/ddebug: make 'noflush' also affect 'always' mode
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>
This commit is contained in:
@@ -602,6 +602,7 @@ static void
|
|||||||
dd_after_draw(struct dd_context *dctx, struct dd_call *call)
|
dd_after_draw(struct dd_context *dctx, struct dd_call *call)
|
||||||
{
|
{
|
||||||
struct dd_screen *dscreen = dd_screen(dctx->base.screen);
|
struct dd_screen *dscreen = dd_screen(dctx->base.screen);
|
||||||
|
struct pipe_context *pipe = dctx->pipe;
|
||||||
|
|
||||||
if (dctx->num_draw_calls >= dscreen->skip_count) {
|
if (dctx->num_draw_calls >= dscreen->skip_count) {
|
||||||
switch (dscreen->mode) {
|
switch (dscreen->mode) {
|
||||||
@@ -615,6 +616,8 @@ dd_after_draw(struct dd_context *dctx, struct dd_call *call)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DD_DUMP_ALL_CALLS:
|
case DD_DUMP_ALL_CALLS:
|
||||||
|
if (!dscreen->no_flush)
|
||||||
|
pipe->flush(pipe, NULL, 0);
|
||||||
dd_dump_call(dctx, call, 0);
|
dd_dump_call(dctx, call, 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@@ -270,7 +270,7 @@ ddebug_screen_create(struct pipe_screen *screen)
|
|||||||
{
|
{
|
||||||
struct dd_screen *dscreen;
|
struct dd_screen *dscreen;
|
||||||
const char *option = debug_get_option("GALLIUM_DDEBUG", NULL);
|
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 no_flush = option && strstr(option, "noflush");
|
||||||
bool help = option && !strcmp(option, "help");
|
bool help = option && !strcmp(option, "help");
|
||||||
unsigned timeout = 0;
|
unsigned timeout = 0;
|
||||||
@@ -280,15 +280,17 @@ ddebug_screen_create(struct pipe_screen *screen)
|
|||||||
puts("");
|
puts("");
|
||||||
puts("Usage:");
|
puts("Usage:");
|
||||||
puts("");
|
puts("");
|
||||||
puts(" GALLIUM_DDEBUG=always");
|
puts(" GALLIUM_DDEBUG=\"always [noflush]\"");
|
||||||
puts(" Dump context and driver information after every draw call into");
|
puts(" Flush and dump context and driver information after every draw call into");
|
||||||
puts(" $HOME/"DD_DIR"/.");
|
puts(" $HOME/"DD_DIR"/.");
|
||||||
puts("");
|
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(" 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(" fence timeout and dump context and driver information into");
|
||||||
puts(" $HOME/"DD_DIR"/ when a hang is detected.");
|
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("");
|
||||||
puts(" GALLIUM_DDEBUG_SKIP=[count]");
|
puts(" GALLIUM_DDEBUG_SKIP=[count]");
|
||||||
puts(" Skip flush and hang detection for the given initial number of draw calls.");
|
puts(" Skip flush and hang detection for the given initial number of draw calls.");
|
||||||
|
Reference in New Issue
Block a user