From 69c772e4ea8fbeb9e3520de9d6b7a071937fba30 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 18 Jun 2024 13:18:32 -0400 Subject: [PATCH] egl: link with libgallium directly Acked-by: Daniel Stone Part-of: --- src/egl/drivers/dri2/egl_dri2.c | 25 ++++++++----------------- src/egl/drivers/dri2/egl_dri2.h | 1 - src/egl/drivers/dri2/platform_android.c | 2 -- src/egl/meson.build | 7 +++++++ src/gbm/meson.build | 1 + 5 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index a6cdad72c47..891fefa5849 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -644,17 +644,15 @@ static const struct dri_extension_match optional_core_extensions[] = { {__DRI_KOPPER, 1, offsetof(struct dri2_egl_display, kopper), true}, }; +const __DRIextension ** +dri_loader_get_extensions(const char *driver_name); + static const __DRIextension ** dri2_open_driver(_EGLDisplay *disp) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); - static const char *search_path_vars[] = { - "LIBGL_DRIVERS_PATH", - NULL, - }; - return loader_open_driver(dri2_dpy->driver_name, &dri2_dpy->driver, - search_path_vars, disp->Options.FallbackZink); + return dri_loader_get_extensions(dri2_dpy->driver_name); } static EGLBoolean @@ -666,13 +664,14 @@ dri2_load_driver_common(_EGLDisplay *disp, const __DRIextension **extensions; extensions = dri2_open_driver(disp); - if (!extensions) + if (!extensions) { + if (disp->Options.FallbackZink) + _eglLog(_LOADER_WARNING, "MESA-LOADER: failed to open %s: driver not built!)\n", dri2_dpy->driver_name); return EGL_FALSE; + } if (!loader_bind_extensions(dri2_dpy, driver_extensions, num_matches, extensions)) { - dlclose(dri2_dpy->driver); - dri2_dpy->driver = NULL; return EGL_FALSE; } dri2_dpy->driver_extensions = extensions; @@ -1137,14 +1136,6 @@ dri2_display_destroy(_EGLDisplay *disp) if (dri2_dpy->fd_render_gpu >= 0) close(dri2_dpy->fd_render_gpu); - /* Don't dlclose the driver when building with the address sanitizer, so - * you get good symbols from the leak reports. - */ -#if !BUILT_WITH_ASAN || defined(NDEBUG) - if (dri2_dpy->driver) - dlclose(dri2_dpy->driver); -#endif - free(dri2_dpy->driver_name); #ifdef HAVE_WAYLAND_PLATFORM diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index 765db0a8f2c..c8356180597 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -240,7 +240,6 @@ struct dri2_egl_display { __DRIscreen *dri_screen_display_gpu; bool own_dri_screen; const __DRIconfig **driver_configs; - void *driver; const __DRIcoreExtension *core; const __DRImesaCoreExtension *mesa; const __DRIimageDriverExtension *image_driver; diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c index a4b1910c2a5..4cee318ecba 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c @@ -1012,8 +1012,6 @@ droid_unload_driver(_EGLDisplay *disp) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); - dlclose(dri2_dpy->driver); - dri2_dpy->driver = NULL; free(dri2_dpy->driver_name); dri2_dpy->driver_name = NULL; } diff --git a/src/egl/meson.build b/src/egl/meson.build index 634fd3e9007..12f8422a60c 100644 --- a/src/egl/meson.build +++ b/src/egl/meson.build @@ -7,6 +7,12 @@ inc_egl_dri2 = include_directories('drivers/dri2') c_args_for_egl = [asan_c_args] cpp_args_for_egl = [] link_for_egl = [] +if with_dri + link_for_egl += libgallium_dri +endif +if with_platform_windows + link_for_egl += libgallium_wgl +endif deps_for_egl = [] incs_for_egl = [inc_include, inc_src, inc_egl] @@ -184,6 +190,7 @@ libegl = shared_library( link_args : [ld_args_bsymbolic, ld_args_gc_sections], dependencies : [deps_for_egl, dep_dl, dep_libdrm, dep_clock, dep_thread, idep_mesautil], install : true, + install_rpath : dri_drivers_path, version : egl_lib_version, soversion : egl_lib_soversion, name_prefix : host_machine.system() == 'windows' ? 'lib' : [], # always use lib, but avoid warnings on !windows diff --git a/src/gbm/meson.build b/src/gbm/meson.build index e0704792e17..8216a0f7931 100644 --- a/src/gbm/meson.build +++ b/src/gbm/meson.build @@ -45,6 +45,7 @@ libgbm = shared_library( gnu_symbol_visibility : 'hidden', version : '1.0.0', install : true, + install_rpath : dri_drivers_path, ) if with_tests