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