From a43eefa7182d41b7c5797dcbb31f77d337ebf65c Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 30 Jul 2024 15:32:29 -0400 Subject: [PATCH] glx: stop loading driver extensions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this is pointless now libGL still needs to be dlopen()ed on some systems tho Reviewed-by: Marek Olšák Reviewed-by: Adam Jackson Part-of: --- src/glx/dri2_glx.c | 5 ----- src/glx/dri3_glx.c | 5 ----- src/glx/dri_common.c | 45 -------------------------------------------- src/glx/dri_common.h | 3 --- src/glx/drisw_glx.c | 4 ---- src/glx/glxext.c | 19 +++++++++++++++++++ 6 files changed, 19 insertions(+), 62 deletions(-) diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index 642bb600102..174f552050e 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -846,7 +846,6 @@ struct glx_screen * dri2CreateScreen(int screen, struct glx_display * priv, bool driver_name_is_inferred) { const __DRIconfig **driver_configs; - const __DRIextension **extensions; struct dri2_screen *psc; __GLXDRIscreen *psp; struct glx_config *configs = NULL, *visuals = NULL; @@ -898,10 +897,6 @@ dri2CreateScreen(int screen, struct glx_display * priv, bool driver_name_is_infe } psc->base.driverName = driverName; - extensions = driOpenDriver(driverName, driver_name_is_inferred); - if (extensions == NULL) - goto handle_error; - psc->driScreen = driCreateNewScreen3(screen, psc->fd, loader_extensions, DRI_SCREEN_DRI3, &driver_configs, driver_name_is_inferred, psc); diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c index 3f16acbada0..7457d8c83b9 100644 --- a/src/glx/dri3_glx.c +++ b/src/glx/dri3_glx.c @@ -689,7 +689,6 @@ dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_in { xcb_connection_t *c = XGetXCBConnection(priv->dpy); const __DRIconfig **driver_configs; - const __DRIextension **extensions; struct dri3_screen *psc; __GLXDRIscreen *psp; struct glx_config *configs = NULL, *visuals = NULL; @@ -736,10 +735,6 @@ dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_in goto handle_error; } - extensions = driOpenDriver(driverName, driver_name_is_inferred); - if (extensions == NULL) - goto handle_error; - if (psc->fd_render_gpu != psc->fd_display_gpu) { driverNameDisplayGPU = loader_get_driver_for_fd(psc->fd_display_gpu); if (driverNameDisplayGPU) { diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c index a433200a626..bd882269cf1 100644 --- a/src/glx/dri_common.c +++ b/src/glx/dri_common.c @@ -46,51 +46,6 @@ #include "dri_util.h" #include "pipe-loader/pipe_loader.h" -#ifndef RTLD_NOW -#define RTLD_NOW 0 -#endif -#ifndef RTLD_GLOBAL -#define RTLD_GLOBAL 0 -#endif - -#ifndef GL_LIB_NAME -#define GL_LIB_NAME "libGL.so.1" -#endif - -const __DRIextension ** -dri_loader_get_extensions(const char *driver_name); - -/** - * Try to \c dlopen the named driver. - * - * \param driverName - a name like "i965", "radeon", "nouveau", etc. - * \param out_driver_handle - Address to return the resulting dlopen() handle. - * - * \returns - * The __DRIextension entrypoint table for the driver, or \c NULL if driver - * file not found. - */ -_X_HIDDEN const __DRIextension ** -driOpenDriver(const char *driverName, bool driver_name_is_inferred) -{ - void *glhandle; - - /* Attempt to make sure libGL symbols will be visible to the driver */ - glhandle = dlopen(GL_LIB_NAME, RTLD_NOW | RTLD_GLOBAL); - - const __DRIextension **extensions = dri_loader_get_extensions(driverName); - - if (!extensions && driver_name_is_inferred) { - glx_message(_LOADER_WARNING, - "MESA-LOADER: glx: failed to open %s: driver not built!\n", driverName); - } - - if (glhandle) - dlclose(glhandle); - - return extensions; -} - #define __ATTRIB(attrib, field) \ { attrib, offsetof(struct glx_config, field) } diff --git a/src/glx/dri_common.h b/src/glx/dri_common.h index f5c022854b7..1234ab26a62 100644 --- a/src/glx/dri_common.h +++ b/src/glx/dri_common.h @@ -62,9 +62,6 @@ driFetchDrawable(struct glx_context *gc, GLXDrawable glxDrawable); extern void driReleaseDrawables(struct glx_context *gc); -extern const __DRIextension **driOpenDriver(const char *driverName, - bool driver_name_is_inferred); - struct dri_ctx_attribs { unsigned major_ver; unsigned minor_ver; diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index 7b107cd95a3..277d5a68e88 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -833,7 +833,6 @@ driswCreateScreen(int screen, struct glx_display *priv, enum glx_driver glx_driv { __GLXDRIscreen *psp; const __DRIconfig **driver_configs; - const __DRIextension **extensions; struct drisw_screen *psc; struct glx_config *configs = NULL, *visuals = NULL; const __DRIextension **loader_extensions_local; @@ -853,9 +852,6 @@ driswCreateScreen(int screen, struct glx_display *priv, enum glx_driver glx_driv return NULL; } - extensions = driOpenDriver(driver, driver_name_is_inferred); - if (extensions == NULL) - goto handle_error; psc->base.driverName = strdup(driver); if (glx_driver) diff --git a/src/glx/glxext.c b/src/glx/glxext.c index 3ba2580207e..52d17ecd727 100644 --- a/src/glx/glxext.c +++ b/src/glx/glxext.c @@ -41,6 +41,9 @@ #include #include #include "dri_util.h" +#if defined(GLX_DIRECT_RENDERING) && (!defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE)) +#include +#endif #define __GLX_MIN_CONFIG_PROPS 18 #define __GLX_EXT_CONFIG_PROPS 32 @@ -1017,6 +1020,22 @@ __glXInitialize(Display * dpy) #ifdef GLX_USE_WINDOWSGL if (glx_direct && glx_accel) glx_driver |= GLX_DRIVER_WINDOWS; +#else +#ifndef RTLD_NOW +#define RTLD_NOW 0 +#endif +#ifndef RTLD_GLOBAL +#define RTLD_GLOBAL 0 +#endif + +#ifndef GL_LIB_NAME +#define GL_LIB_NAME "libGL.so.1" +#endif + + void *glhandle = dlopen(GL_LIB_NAME, RTLD_NOW | RTLD_GLOBAL); + if (glhandle) + dlclose(glhandle); + #endif #endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */