From f00fca998ea25f5583608a975bc213de975a7cd6 Mon Sep 17 00:00:00 2001 From: Caio Oliveira Date: Fri, 19 Sep 2025 15:19:08 -0700 Subject: [PATCH] intel/mda: Add MDA_FILTER to select which archives to generate Matches if names contains the filter value, multiple values separated by commas. Acked-by: Kenneth Graunke Acked-by: Lionel Landwerlin Part-of: --- docs/envvars.rst | 5 ++++ src/gallium/drivers/iris/iris_program.c | 6 +++-- src/intel/mda/debug_archiver.c | 34 +++++++++++++++++++++++++ src/intel/vulkan/anv_shader_compile.c | 4 ++- 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/docs/envvars.rst b/docs/envvars.rst index 3cb56c21e13..050f0c35de0 100644 --- a/docs/envvars.rst +++ b/docs/envvars.rst @@ -896,6 +896,11 @@ Intel driver environment variables Prefix added to the mda.tar filenames generated when using INTEL_DEBUG=mda. If set to ``timestamp`` it will generate the current time/date as prefix. +.. envvar:: MDA_FILTER + + When set, will only generate mda.tar files which names contain any of the + comma-separated filter values as substrings. + Anvil(ANV) driver environment variables --------------------------------------- diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c index 7a6674e7841..8c84d7cd00f 100644 --- a/src/gallium/drivers/iris/iris_program.c +++ b/src/gallium/drivers/iris/iris_program.c @@ -1858,8 +1858,10 @@ iris_debug_archiver_open(void *tmp_ctx, struct iris_screen *screen, debug_archiver *debug_archiver = debug_archiver_open(tmp_ctx, name, PACKAGE_VERSION MESA_GIT_SHA1); - debug_archiver_set_prefix(debug_archiver, - _mesa_shader_stage_to_abbrev(ish->nir->info.stage)); + if (debug_archiver) { + debug_archiver_set_prefix(debug_archiver, + _mesa_shader_stage_to_abbrev(ish->nir->info.stage)); + } return debug_archiver; } diff --git a/src/intel/mda/debug_archiver.c b/src/intel/mda/debug_archiver.c index cf177c22860..e908dcafcf5 100644 --- a/src/intel/mda/debug_archiver.c +++ b/src/intel/mda/debug_archiver.c @@ -5,6 +5,7 @@ #include "debug_archiver.h" +#include "slice.h" #include "tar.h" #include "util/ralloc.h" #include "util/u_debug.h" @@ -26,6 +27,7 @@ struct debug_archiver DEBUG_GET_ONCE_OPTION(mda_output_dir, "MDA_OUTPUT_DIR", ".") DEBUG_GET_ONCE_OPTION(mda_prefix, "MDA_PREFIX", NULL) +DEBUG_GET_ONCE_OPTION(mda_filter, "MDA_FILTER", NULL) static bool ensure_output_dir(const char *dir) @@ -40,9 +42,38 @@ ensure_output_dir(const char *dir) return mkdir(dir, 0755) == 0; } +static bool +debug_archiver_should_create(const char *name_str) +{ + const char *filter_str = debug_get_option_mda_filter(); + if (filter_str && *filter_str) { + slice filter = slice_from_cstr(filter_str); + slice name = slice_from_cstr(name_str); + + while (!slice_is_empty(filter)) { + slice_cut_result cut = slice_cut(filter, ','); + slice pattern = cut.before; + + if (!slice_is_empty(pattern) && + slice_contains_str(name, pattern)) + return true; + + filter = cut.after; + } + + /* MDA_FILTER exist but did not match, don't create. */ + return false; + } + + return true; +} + debug_archiver * debug_archiver_open(void *mem_ctx, const char *name, const char *info) { + if (!debug_archiver_should_create(name)) + return NULL; + debug_archiver *da = rzalloc(mem_ctx, debug_archiver); char *filename = ralloc_asprintf(mem_ctx, "%s.mda.tar", name); @@ -117,6 +148,9 @@ debug_archiver_open(void *mem_ctx, const char *name, const char *info) void debug_archiver_set_prefix(debug_archiver *da, const char *prefix) { + if (!da) + return; + if (!prefix || !*prefix) { snprintf(da->prefix, ARRAY_SIZE(da->prefix) - 1, "%s", da->mda_dir_in_archive); } else { diff --git a/src/intel/vulkan/anv_shader_compile.c b/src/intel/vulkan/anv_shader_compile.c index 1b26ca721d9..0514cd3f695 100644 --- a/src/intel/vulkan/anv_shader_compile.c +++ b/src/intel/vulkan/anv_shader_compile.c @@ -1690,8 +1690,10 @@ anv_debug_archiver_init(void *mem_ctx, struct anv_shader_data *shaders_data, shader_data->archiver = debug_archiver_open(mem_ctx, name, PACKAGE_VERSION MESA_GIT_SHA1); - debug_archiver_set_prefix(shader_data->archiver, + if (shader_data->archiver) { + debug_archiver_set_prefix(shader_data->archiver, _mesa_shader_stage_to_abbrev(info->stage)); + } } }