From ad8af99c86faca56451fd6f11259c69907feca0b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 31 Jul 2016 00:46:09 +0200 Subject: [PATCH] radeonsi: add environment variable SI_FORCE_FAMILY MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This will be used by: amdgcn_glslc -mcpu=[family] It can also be used for shader-db if you want stats for a different family. Reviewed-by: Nicolai Hähnle --- src/gallium/drivers/radeonsi/si_pipe.c | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index c540cfdfab5..e33823dcede 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -715,6 +715,36 @@ static bool si_init_gs_info(struct si_screen *sscreen) } } +static void si_handle_env_var_force_family(struct si_screen *sscreen) +{ + const char *family = debug_get_option("SI_FORCE_FAMILY", NULL); + unsigned i; + + if (!family) + return; + + for (i = CHIP_TAHITI; i < CHIP_LAST; i++) { + if (!strcmp(family, r600_get_llvm_processor_name(i))) { + /* Override family and chip_class. */ + sscreen->b.family = sscreen->b.info.family = i; + + if (i >= CHIP_TONGA) + sscreen->b.chip_class = sscreen->b.info.chip_class = VI; + else if (i >= CHIP_BONAIRE) + sscreen->b.chip_class = sscreen->b.info.chip_class = CIK; + else + sscreen->b.chip_class = sscreen->b.info.chip_class = SI; + + /* Don't submit any IBs. */ + setenv("RADEON_NOOP", "1", 1); + return; + } + } + + fprintf(stderr, "radeonsi: Unknown family: %s\n", family); + exit(1); +} + struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws) { struct si_screen *sscreen = CALLOC_STRUCT(si_screen); @@ -740,6 +770,8 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws) return NULL; } + si_handle_env_var_force_family(sscreen); + if (!debug_get_bool_option("RADEON_DISABLE_PERFCOUNTERS", false)) si_init_perfcounters(sscreen); -- 2.30.2