From 939d3a96fb5b0b5712de1132cdb0e7f27e03d5b9 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Wed, 28 May 2025 15:04:30 +0200 Subject: [PATCH] lima: add driconf infrastructure This is the boiler-plate code needed to support driver-specific driconf variables in Lima. Reviewed-by: Erico Nunes Part-of: --- src/gallium/auxiliary/target-helpers/drm_helper.h | 11 +++++++++-- src/gallium/drivers/lima/driinfo_lima.h | 1 + src/gallium/drivers/lima/lima_screen.c | 4 ++++ src/gallium/winsys/lima/drm/lima_drm_public.h | 3 ++- src/gallium/winsys/lima/drm/lima_drm_winsys.c | 4 ++-- 5 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 src/gallium/drivers/lima/driinfo_lima.h diff --git a/src/gallium/auxiliary/target-helpers/drm_helper.h b/src/gallium/auxiliary/target-helpers/drm_helper.h index ce56b1915bc..88cff81323a 100644 --- a/src/gallium/auxiliary/target-helpers/drm_helper.h +++ b/src/gallium/auxiliary/target-helpers/drm_helper.h @@ -397,10 +397,14 @@ pipe_lima_create_screen(int fd, const struct pipe_screen_config *config) { struct pipe_screen *screen; - screen = lima_drm_screen_create(fd); + screen = lima_drm_screen_create(fd, config); return screen ? debug_screen_wrap(screen) : NULL; } -DRM_DRIVER_DESCRIPTOR(lima, NULL, 0) + +const driOptionDescription lima_driconf[] = { + #include "lima/driinfo_lima.h" +}; +DRM_DRIVER_DESCRIPTOR(lima, lima_driconf, ARRAY_SIZE(lima_driconf)) #else DRM_DRIVER_DESCRIPTOR_STUB(lima) @@ -450,6 +454,9 @@ const driOptionDescription kmsro_driconf[] = { #ifdef GALLIUM_PANFROST #include "panfrost/driinfo_panfrost.h" #endif +#ifdef GALLIUM_LIMA + #include "lima/driinfo_lima.h" +#endif }; DRM_DRIVER_DESCRIPTOR(kmsro, kmsro_driconf, ARRAY_SIZE(kmsro_driconf)) diff --git a/src/gallium/drivers/lima/driinfo_lima.h b/src/gallium/drivers/lima/driinfo_lima.h new file mode 100644 index 00000000000..07e69ec3da9 --- /dev/null +++ b/src/gallium/drivers/lima/driinfo_lima.h @@ -0,0 +1 @@ +/* lima specific driconf options */ diff --git a/src/gallium/drivers/lima/lima_screen.c b/src/gallium/drivers/lima/lima_screen.c index 2d866e56a84..8657c18448c 100644 --- a/src/gallium/drivers/lima/lima_screen.c +++ b/src/gallium/drivers/lima/lima_screen.c @@ -27,6 +27,7 @@ #include "util/ralloc.h" #include "util/u_debug.h" #include "util/u_screen.h" +#include "util/xmlconfig.h" #include "renderonly/renderonly.h" #include "drm-uapi/drm_fourcc.h" @@ -585,6 +586,9 @@ lima_screen_create(int fd, const struct pipe_screen_config *config, lima_plb_pp_stream_cache_size = MAX2(128 * 1024 * lima_ctx_num_plb, lima_plb_pp_stream_cache_size); + driParseConfigFiles(config->options, config->options_info, 0, + "lima", NULL, NULL, NULL, 0, NULL, 0); + if (!lima_screen_query_info(screen)) goto err_out0; diff --git a/src/gallium/winsys/lima/drm/lima_drm_public.h b/src/gallium/winsys/lima/drm/lima_drm_public.h index 96faec814e9..03282b5f14b 100644 --- a/src/gallium/winsys/lima/drm/lima_drm_public.h +++ b/src/gallium/winsys/lima/drm/lima_drm_public.h @@ -29,7 +29,8 @@ struct pipe_screen; struct renderonly; -struct pipe_screen *lima_drm_screen_create(int drmFD); +struct pipe_screen *lima_drm_screen_create(int drmFD, + const struct pipe_screen_config *config); struct pipe_screen *lima_drm_screen_create_renderonly(int fd, struct renderonly *ro, const struct pipe_screen_config *config); diff --git a/src/gallium/winsys/lima/drm/lima_drm_winsys.c b/src/gallium/winsys/lima/drm/lima_drm_winsys.c index eb66b29fcee..cecfac2f40c 100644 --- a/src/gallium/winsys/lima/drm/lima_drm_winsys.c +++ b/src/gallium/winsys/lima/drm/lima_drm_winsys.c @@ -30,9 +30,9 @@ #include "lima/lima_screen.h" struct pipe_screen * -lima_drm_screen_create(int fd) +lima_drm_screen_create(int fd, const struct pipe_screen_config *config) { - return u_pipe_screen_lookup_or_create(os_dupfd_cloexec(fd), NULL, + return u_pipe_screen_lookup_or_create(os_dupfd_cloexec(fd), config, NULL, lima_screen_create); }