radeonsi: move SI_FORCE_FAMILY functionality to winsys

This helps some debugging cases by initializing addrlib with
slightly more appropriate settings.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Nicolai Hähnle
2017-11-18 23:23:04 +01:00
parent 0ef263d62f
commit ec22dd34c8
2 changed files with 36 additions and 34 deletions

View File

@@ -725,39 +725,6 @@ static void si_init_gs_info(struct si_screen *sscreen)
sscreen->info.family);
}
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, ac_get_llvm_processor_name(i))) {
/* Override family and chip_class. */
sscreen->info.family = i;
sscreen->info.name = "GCN-NOOP";
if (i >= CHIP_VEGA10)
sscreen->info.chip_class = GFX9;
else if (i >= CHIP_TONGA)
sscreen->info.chip_class = VI;
else if (i >= CHIP_BONAIRE)
sscreen->info.chip_class = CIK;
else
sscreen->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);
}
static void si_test_vmfault(struct si_screen *sscreen)
{
struct pipe_context *ctx = sscreen->aux_context;
@@ -878,7 +845,6 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws,
sscreen->ws = ws;
ws->query_info(ws, &sscreen->info);
si_handle_env_var_force_family(sscreen);
if (sscreen->info.chip_class >= GFX9) {
sscreen->se_tile_repeat = 32 * sscreen->info.max_se;

View File

@@ -38,6 +38,7 @@
#include <xf86drm.h>
#include <stdio.h>
#include <sys/stat.h>
#include "amd/common/ac_llvm_util.h"
#include "amd/common/sid.h"
#include "amd/common/gfx9d.h"
@@ -50,6 +51,39 @@ static simple_mtx_t dev_tab_mutex = _SIMPLE_MTX_INITIALIZER_NP;
DEBUG_GET_ONCE_BOOL_OPTION(all_bos, "RADEON_ALL_BOS", false)
static void handle_env_var_force_family(struct amdgpu_winsys *ws)
{
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, ac_get_llvm_processor_name(i))) {
/* Override family and chip_class. */
ws->info.family = i;
ws->info.name = "GCN-NOOP";
if (i >= CHIP_VEGA10)
ws->info.chip_class = GFX9;
else if (i >= CHIP_TONGA)
ws->info.chip_class = VI;
else if (i >= CHIP_BONAIRE)
ws->info.chip_class = CIK;
else
ws->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);
}
/* Helper function to do the ioctls needed for setup and init. */
static bool do_winsys_init(struct amdgpu_winsys *ws,
const struct pipe_screen_config *config,
@@ -58,6 +92,8 @@ static bool do_winsys_init(struct amdgpu_winsys *ws,
if (!ac_query_gpu_info(fd, ws->dev, &ws->info, &ws->amdinfo))
goto fail;
handle_env_var_force_family(ws);
ws->addrlib = amdgpu_addr_create(&ws->info, &ws->amdinfo, &ws->info.max_alignment);
if (!ws->addrlib) {
fprintf(stderr, "amdgpu: Cannot create addrlib.\n");