radeonsi: move SI_FORCE_FAMILY functionality to winsys
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Sat, 18 Nov 2017 22:23:04 +0000 (23:23 +0100)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 19 Dec 2018 11:01:25 +0000 (12:01 +0100)
This helps some debugging cases by initializing addrlib with
slightly more appropriate settings.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c

index 39bb192b1de336435a0efecf7655d68adaa4b6dd..8f24194ab5ae36e1f243dddb9e5c909a0304b7ff 100644 (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;
index 6b7f484f2399d40d56ba0f0a82dc4875137508d7..79d2c1345efc61a3d8104fc89b1803edb51ddcb1 100644 (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");