Mesa (main): freedreno: Support per-device driconf overrides

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Aug 3 00:25:18 UTC 2021


Module: Mesa
Branch: main
Commit: 8813dfab8306dc63cbe0b71eb7513964fc0ba02d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8813dfab8306dc63cbe0b71eb7513964fc0ba02d

Author: Rob Clark <robdclark at chromium.org>
Date:   Fri Jul 30 17:00:32 2021 -0700

freedreno: Support per-device driconf overrides

Signed-off-by: Rob Clark <robdclark at chromium.org>
Reviewed-by: Emil Velikov <emil.l.velikov at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12135>

---

 src/gallium/auxiliary/target-helpers/drm_helper.h       | 2 +-
 src/gallium/drivers/freedreno/freedreno_screen.c        | 8 +++++++-
 src/gallium/drivers/freedreno/freedreno_screen.h        | 3 ++-
 src/gallium/drivers/freedreno/meson.build               | 6 +++++-
 src/gallium/winsys/freedreno/drm/freedreno_drm_public.h | 3 ++-
 src/gallium/winsys/freedreno/drm/freedreno_drm_winsys.c | 5 +++--
 src/gallium/winsys/kmsro/drm/kmsro_drm_winsys.c         | 2 +-
 7 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/src/gallium/auxiliary/target-helpers/drm_helper.h b/src/gallium/auxiliary/target-helpers/drm_helper.h
index ff4621e1a88..6167a94d85f 100644
--- a/src/gallium/auxiliary/target-helpers/drm_helper.h
+++ b/src/gallium/auxiliary/target-helpers/drm_helper.h
@@ -265,7 +265,7 @@ pipe_msm_create_screen(int fd, const struct pipe_screen_config *config)
 {
    struct pipe_screen *screen;
 
-   screen = fd_drm_screen_create(fd, NULL);
+   screen = fd_drm_screen_create(fd, NULL, config);
    return screen ? debug_screen_wrap(screen) : NULL;
 }
 DRM_DRIVER_DESCRIPTOR(msm, NULL, 0)
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
index 2e377f9e05f..7b27846ef1a 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -35,6 +35,7 @@
 #include "util/u_memory.h"
 #include "util/u_screen.h"
 #include "util/u_string.h"
+#include "util/xmlconfig.h"
 
 #include "util/os_time.h"
 
@@ -923,7 +924,8 @@ fd_screen_get_driver_uuid(struct pipe_screen *pscreen, char *uuid)
 }
 
 struct pipe_screen *
-fd_screen_create(struct fd_device *dev, struct renderonly *ro)
+fd_screen_create(struct fd_device *dev, struct renderonly *ro,
+                 const struct pipe_screen_config *config)
 {
    struct fd_screen *screen = CALLOC_STRUCT(fd_screen);
    struct pipe_screen *pscreen;
@@ -1013,6 +1015,10 @@ fd_screen_create(struct fd_device *dev, struct renderonly *ro)
 
    screen->has_syncobj = fd_has_syncobj(screen->dev);
 
+   /* parse driconf configuration now for device specific overrides: */
+   driParseConfigFiles(config->options, config->options_info, 0, "msm",
+                       NULL, fd_dev_name(screen->gpu_id), NULL, 0, NULL, 0);
+
    struct sysinfo si;
    sysinfo(&si);
    screen->ram_size = si.totalram;
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.h b/src/gallium/drivers/freedreno/freedreno_screen.h
index ddc450a57a8..7928ccb613a 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.h
+++ b/src/gallium/drivers/freedreno/freedreno_screen.h
@@ -179,7 +179,8 @@ struct fd_bo *fd_screen_bo_from_handle(struct pipe_screen *pscreen,
                                        struct winsys_handle *whandle);
 
 struct pipe_screen *fd_screen_create(struct fd_device *dev,
-                                     struct renderonly *ro);
+                                     struct renderonly *ro,
+                                     const struct pipe_screen_config *config);
 
 static inline boolean
 is_a20x(struct fd_screen *screen)
diff --git a/src/gallium/drivers/freedreno/meson.build b/src/gallium/drivers/freedreno/meson.build
index 9f1747646e1..dac51b1c3c7 100644
--- a/src/gallium/drivers/freedreno/meson.build
+++ b/src/gallium/drivers/freedreno/meson.build
@@ -286,7 +286,10 @@ driver_freedreno = declare_dependency(
     libfreedreno_layout,
     libfreedreno_perfcntrs
   ],
-  dependencies : idep_nir,
+  dependencies : [
+    idep_nir,
+    idep_xmlconfig,
+  ],
 )
 
 ir3_compiler = executable(
@@ -320,6 +323,7 @@ gmemtool = executable(
     idep_nir,
     idep_mesautil,
     idep_u_tracepoints,
+    idep_xmlconfig,
   ],
   link_with : [
     libfreedreno,
diff --git a/src/gallium/winsys/freedreno/drm/freedreno_drm_public.h b/src/gallium/winsys/freedreno/drm/freedreno_drm_public.h
index 2f5591e867a..a15f6cf8683 100644
--- a/src/gallium/winsys/freedreno/drm/freedreno_drm_public.h
+++ b/src/gallium/winsys/freedreno/drm/freedreno_drm_public.h
@@ -5,6 +5,7 @@
 struct pipe_screen;
 struct renderonly;
 
-struct pipe_screen *fd_drm_screen_create(int drmFD, struct renderonly *ro);
+struct pipe_screen *fd_drm_screen_create(int drmFD, struct renderonly *ro,
+		const struct pipe_screen_config *config);
 
 #endif
diff --git a/src/gallium/winsys/freedreno/drm/freedreno_drm_winsys.c b/src/gallium/winsys/freedreno/drm/freedreno_drm_winsys.c
index 211e1656429..3e4109e3e9a 100644
--- a/src/gallium/winsys/freedreno/drm/freedreno_drm_winsys.c
+++ b/src/gallium/winsys/freedreno/drm/freedreno_drm_winsys.c
@@ -69,7 +69,8 @@ fd_drm_screen_destroy(struct pipe_screen *pscreen)
 }
 
 struct pipe_screen *
-fd_drm_screen_create(int fd, struct renderonly *ro)
+fd_drm_screen_create(int fd, struct renderonly *ro,
+		const struct pipe_screen_config *config)
 {
 	struct pipe_screen *pscreen = NULL;
 
@@ -88,7 +89,7 @@ fd_drm_screen_create(int fd, struct renderonly *ro)
 		if (!dev)
 			goto unlock;
 
-		pscreen = fd_screen_create(dev, ro);
+		pscreen = fd_screen_create(dev, ro, config);
 		if (pscreen) {
 			int fd = fd_device_fd(dev);
 
diff --git a/src/gallium/winsys/kmsro/drm/kmsro_drm_winsys.c b/src/gallium/winsys/kmsro/drm/kmsro_drm_winsys.c
index ec927986c80..6d2f0cabd67 100644
--- a/src/gallium/winsys/kmsro/drm/kmsro_drm_winsys.c
+++ b/src/gallium/winsys/kmsro/drm/kmsro_drm_winsys.c
@@ -91,7 +91,7 @@ struct pipe_screen *kmsro_drm_screen_create(int fd,
    ro->gpu_fd = drmOpenWithType("msm", NULL, DRM_NODE_RENDER);
    if (ro->gpu_fd >= 0) {
       ro->create_for_resource = renderonly_create_kms_dumb_buffer_for_resource;
-      screen = fd_drm_screen_create(ro->gpu_fd, ro);
+      screen = fd_drm_screen_create(ro->gpu_fd, ro, config);
       if (!screen)
          goto out_free;
 



More information about the mesa-commit mailing list