From 50fc7cc290db49288b318c116c6fdc3daaf801e9 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 18 Jun 2024 13:14:10 -0400 Subject: [PATCH] glx: directly link to gallium this eliminates the loader interface, which avoids an entire class of issues and simplifies a bunch of code Acked-by: Daniel Stone Part-of: --- .gitlab-ci/common/init-stage2.sh | 4 +- .gitlab-ci/common/start-x.sh | 2 +- .gitlab-ci/cuttlefish-runner.sh | 2 +- .gitlab-ci/deqp-runner.sh | 2 +- .gitlab-ci/fossilize-runner.sh | 2 +- .gitlab-ci/gtest-runner.sh | 2 +- .gitlab-ci/piglit/piglit-runner.sh | 2 +- .gitlab-ci/piglit/piglit-traces.sh | 2 +- .gitlab-ci/run-shader-db.sh | 2 +- .gitlab-ci/vkd3d-proton/run.sh | 2 +- src/gallium/targets/dri/dri.sym.in | 1 + src/gallium/targets/dri/dri_target.c | 193 +++++++++++++++++++++++++++ src/gallium/targets/dri/meson.build | 3 +- src/gallium/targets/dril/meson.build | 2 - src/glx/dri2_glx.c | 4 +- src/glx/dri2_priv.h | 1 - src/glx/dri3_glx.c | 4 +- src/glx/dri3_priv.h | 1 - src/glx/dri_common.c | 26 ++-- src/glx/dri_common.h | 1 - src/glx/drisw_glx.c | 6 +- src/glx/drisw_priv.h | 1 - src/glx/meson.build | 10 +- src/glx/tests/meson.build | 2 +- 24 files changed, 229 insertions(+), 48 deletions(-) diff --git a/.gitlab-ci/common/init-stage2.sh b/.gitlab-ci/common/init-stage2.sh index 1c280a13fc0..dfa1043a94e 100755 --- a/.gitlab-ci/common/init-stage2.sh +++ b/.gitlab-ci/common/init-stage2.sh @@ -94,7 +94,7 @@ fi # Fix prefix confusion: the build installs to $CI_PROJECT_DIR, but we expect # it in /install ln -sf $CI_PROJECT_DIR/install /install -export LD_LIBRARY_PATH=/install/lib +export LD_LIBRARY_PATH=/install/lib:/install/lib/dri export LIBGL_DRIVERS_PATH=/install/lib/dri # https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22495#note_1876691 @@ -113,7 +113,7 @@ export PYTHONPATH=$(python3 -c "import sys;print(\":\".join(sys.path))") if [ -n "$MESA_LOADER_DRIVER_OVERRIDE" ]; then rm /install/lib/dri/!($MESA_LOADER_DRIVER_OVERRIDE)_dri.so fi -ls -1 /install/lib/dri/*_dri.so || true +ls -1 /install/lib/dri/*.so || true if [ "$HWCI_FREQ_MAX" = "true" ]; then # Ensure initialization of the DRM device (needed by MSM) diff --git a/.gitlab-ci/common/start-x.sh b/.gitlab-ci/common/start-x.sh index ccd132358cb..7820c8e8779 100755 --- a/.gitlab-ci/common/start-x.sh +++ b/.gitlab-ci/common/start-x.sh @@ -7,7 +7,7 @@ _FLAG_FILE="/xorg-started" echo "touch ${_FLAG_FILE}; sleep 100000" > "${_XORG_SCRIPT}" if [ "x$1" != "x" ]; then - export LD_LIBRARY_PATH="${1}/lib" + export LD_LIBRARY_PATH="${1}/lib:${1}/lib/dri" export LIBGL_DRIVERS_PATH="${1}/lib/dri" fi xinit /bin/sh "${_XORG_SCRIPT}" -- /usr/bin/Xorg vt45 -noreset -s 0 -dpms -logfile /Xorg.0.log & diff --git a/.gitlab-ci/cuttlefish-runner.sh b/.gitlab-ci/cuttlefish-runner.sh index 562de581cf2..5b3f2a9150d 100755 --- a/.gitlab-ci/cuttlefish-runner.sh +++ b/.gitlab-ci/cuttlefish-runner.sh @@ -6,7 +6,7 @@ set -xe export HOME=/cuttlefish export PATH=$PATH:/cuttlefish/bin -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${CI_PROJECT_DIR}/install/lib/:/cuttlefish/lib64 +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${CI_PROJECT_DIR}/install/lib/:${CI_PROJECT_DIR}/install/lib/dri:/cuttlefish/lib64 export EGL_PLATFORM=surfaceless syslogd diff --git a/.gitlab-ci/deqp-runner.sh b/.gitlab-ci/deqp-runner.sh index 7f680f5cb33..7bddf2eee3f 100755 --- a/.gitlab-ci/deqp-runner.sh +++ b/.gitlab-ci/deqp-runner.sh @@ -16,7 +16,7 @@ fi INSTALL=$(realpath -s "$PWD"/install) # Set up the driver environment. -export LD_LIBRARY_PATH="$INSTALL"/lib/:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH="$INSTALL"/lib/:"$INSTALL"/lib/dri:$LD_LIBRARY_PATH export EGL_PLATFORM=surfaceless ARCH=$(uname -m) export VK_DRIVER_FILES="$PWD"/install/share/vulkan/icd.d/"$VK_DRIVER"_icd."$ARCH".json diff --git a/.gitlab-ci/fossilize-runner.sh b/.gitlab-ci/fossilize-runner.sh index af0182bb9ac..9c05f69d2d2 100755 --- a/.gitlab-ci/fossilize-runner.sh +++ b/.gitlab-ci/fossilize-runner.sh @@ -10,7 +10,7 @@ fi INSTALL=$PWD/install # Set up the driver environment. -export LD_LIBRARY_PATH="$INSTALL/lib/" +export LD_LIBRARY_PATH="$INSTALL/lib/:$INSTALL/lib/dri" export VK_DRIVER_FILES="$INSTALL/share/vulkan/icd.d/${VK_DRIVER}_icd.x86_64.json" # To store Fossilize logs on failure. diff --git a/.gitlab-ci/gtest-runner.sh b/.gitlab-ci/gtest-runner.sh index c4ae1e741db..cfda839513b 100755 --- a/.gitlab-ci/gtest-runner.sh +++ b/.gitlab-ci/gtest-runner.sh @@ -6,7 +6,7 @@ set -ex INSTALL=$PWD/install # Set up the driver environment. -export LD_LIBRARY_PATH=$INSTALL/lib/ +export LD_LIBRARY_PATH=$INSTALL/lib/:$INSTALL/lib/dri RESULTS="$PWD/${GTEST_RESULTS_DIR:-results}" mkdir -p "$RESULTS" diff --git a/.gitlab-ci/piglit/piglit-runner.sh b/.gitlab-ci/piglit/piglit-runner.sh index 878d30307b2..695bd18f33a 100755 --- a/.gitlab-ci/piglit/piglit-runner.sh +++ b/.gitlab-ci/piglit/piglit-runner.sh @@ -11,7 +11,7 @@ fi INSTALL="$PWD/install" # Set up the driver environment. -export LD_LIBRARY_PATH="$INSTALL/lib/" +export LD_LIBRARY_PATH="$INSTALL/lib/:$INSTALL/lib/dri" export EGL_PLATFORM=surfaceless ARCH=$(uname -m) export VK_DRIVER_FILES="$INSTALL/share/vulkan/icd.d/${VK_DRIVER}_icd.$ARCH.json" diff --git a/.gitlab-ci/piglit/piglit-traces.sh b/.gitlab-ci/piglit/piglit-traces.sh index 38c204df689..be7653825f5 100755 --- a/.gitlab-ci/piglit/piglit-traces.sh +++ b/.gitlab-ci/piglit/piglit-traces.sh @@ -47,7 +47,7 @@ export WINEDLLOVERRIDES="mscoree=d;mshtml=d" # FIXME: drop, not needed anymore? # Modifiying here directly LD_LIBRARY_PATH may cause problems when # using a command wrapper. Hence, we will just set it when running the # command. -export __LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$INSTALL/lib/" +export __LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$INSTALL/lib/:$INSTALL/lib/dri" if [ -n "${VK_DRIVER}" ]; then # Set environment for DXVK. export DXVK_LOG_LEVEL="info" diff --git a/.gitlab-ci/run-shader-db.sh b/.gitlab-ci/run-shader-db.sh index c4a9680a696..3089488d20c 100755 --- a/.gitlab-ci/run-shader-db.sh +++ b/.gitlab-ci/run-shader-db.sh @@ -6,7 +6,7 @@ mkdir -p "$ARTIFACTSDIR" export DRM_SHIM_DEBUG=true LIBDIR=$(pwd)/install/lib -export LD_LIBRARY_PATH=$LIBDIR +export LD_LIBRARY_PATH=$LIBDIR:$LIBDIR/dri cd /usr/local/shader-db diff --git a/.gitlab-ci/vkd3d-proton/run.sh b/.gitlab-ci/vkd3d-proton/run.sh index cf96aa5fe7e..b891e9a7707 100755 --- a/.gitlab-ci/vkd3d-proton/run.sh +++ b/.gitlab-ci/vkd3d-proton/run.sh @@ -17,7 +17,7 @@ mkdir -p "$RESULTS" # Modifiying here directly LD_LIBRARY_PATH may cause problems when # using a command wrapper. Hence, we will just set it when running the # command. -export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$INSTALL/lib/:/vkd3d-proton-tests/x64/" +export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$INSTALL/lib/:$INSTALL/lib/dri/vkd3d-proton-tests/x64/" # Set the Vulkan driver to use. diff --git a/src/gallium/targets/dri/dri.sym.in b/src/gallium/targets/dri/dri.sym.in index b43cf80020d..4d2391dd86e 100644 --- a/src/gallium/targets/dri/dri.sym.in +++ b/src/gallium/targets/dri/dri.sym.in @@ -1,6 +1,7 @@ { global: __driDriverGetExtensions*; + dri_loader_get_extensions; @nouveau_drm_screen_create@ @radeon_drm_winsys_create@ @amdgpu_winsys_create@ diff --git a/src/gallium/targets/dri/dri_target.c b/src/gallium/targets/dri/dri_target.c index e61622a69e3..5231c0a7c1c 100644 --- a/src/gallium/targets/dri/dri_target.c +++ b/src/gallium/targets/dri/dri_target.c @@ -158,3 +158,196 @@ PUBLIC const __DRIextension **__driDriverGetExtensions_zink(void) #if defined(GALLIUM_D3D12) DEFINE_LOADER_DRM_ENTRYPOINT(d3d12); #endif + +const __DRIextension ** +dri_loader_get_extensions(const char *driver_name); + +PUBLIC const __DRIextension ** +dri_loader_get_extensions(const char *driver_name) +{ +#if defined(HAVE_I915) + if (!strcmp(driver_name, "i915")) + return __driDriverGetExtensions_i915(); +#endif + +#if defined(HAVE_IRIS) + if (!strcmp(driver_name, "iris")) + return __driDriverGetExtensions_iris(); +#endif + +#if defined(HAVE_CROCUS) + if (!strcmp(driver_name, "crocus")) + return __driDriverGetExtensions_crocus(); +#endif + +#if defined(HAVE_NOUVEAU) + if (!strcmp(driver_name, "nouveau")) + return __driDriverGetExtensions_nouveau(); +#endif + +#if defined(HAVE_R300) + if (!strcmp(driver_name, "r300")) + return __driDriverGetExtensions_r300(); +#endif + +#if defined(HAVE_R600) + if (!strcmp(driver_name, "r600")) + return __driDriverGetExtensions_r600(); +#endif + +#if defined(HAVE_RADEONSI) + if (!strcmp(driver_name, "radeonsi")) + return __driDriverGetExtensions_radeonsi(); +#endif + +#if defined(HAVE_VMWGFX) + if (!strcmp(driver_name, "vmwgfx")) + return __driDriverGetExtensions_vmwgfx(); +#endif + +#if defined(HAVE_FREEDRENO) + if (!strcmp(driver_name, "msm")) + return __driDriverGetExtensions_msm(); + if (!strcmp(driver_name, "kgsl")) + return __driDriverGetExtensions_kgsl(); +#endif + +#if defined(HAVE_VIRGL) || (defined(HAVE_FREEDRENO) && !defined(PIPE_LOADER_DYNAMIC)) + if (!strcmp(driver_name, "virtio_gpu")) + return __driDriverGetExtensions_virtio_gpu(); +#endif + +#if defined(HAVE_V3D) + if (!strcmp(driver_name, "v3d")) + return __driDriverGetExtensions_v3d(); +#endif + +#if defined(HAVE_VC4) + if (!strcmp(driver_name, "vc4")) + return __driDriverGetExtensions_vc4(); +#endif + +#if defined(HAVE_PANFROST) + if (!strcmp(driver_name, "panfrost")) + return __driDriverGetExtensions_panfrost(); + if (!strcmp(driver_name, "panthor")) + return __driDriverGetExtensions_panthor(); +#endif + +#if defined(HAVE_ASAHI) + if (!strcmp(driver_name, "asahi")) + return __driDriverGetExtensions_asahi(); +#endif + +#if defined(HAVE_ETNAVIV) + if (!strcmp(driver_name, "etnaviv")) + return __driDriverGetExtensions_etnaviv(); +#endif + +#if defined(HAVE_TEGRA) + if (!strcmp(driver_name, "tegra")) + return __driDriverGetExtensions_tegra(); +#endif + +#if defined(HAVE_KMSRO) + if (!strcmp(driver_name, "armada_drm")) + return __driDriverGetExtensions_armada_drm(); + if (!strcmp(driver_name, "exynos")) + return __driDriverGetExtensions_exynos(); + if (!strcmp(driver_name, "gm12u320")) + return __driDriverGetExtensions_gm12u320(); + if (!strcmp(driver_name, "hdlcd")) + return __driDriverGetExtensions_hdlcd(); + if (!strcmp(driver_name, "hx8357d")) + return __driDriverGetExtensions_hx8357d(); + if (!strcmp(driver_name, "ili9163")) + return __driDriverGetExtensions_ili9163(); + if (!strcmp(driver_name, "ili9225")) + return __driDriverGetExtensions_ili9225(); + if (!strcmp(driver_name, "ili9341")) + return __driDriverGetExtensions_ili9341(); + if (!strcmp(driver_name, "ili9486")) + return __driDriverGetExtensions_ili9486(); + if (!strcmp(driver_name, "imx_drm")) + return __driDriverGetExtensions_imx_drm(); + if (!strcmp(driver_name, "imx_dcss")) + return __driDriverGetExtensions_imx_dcss(); + if (!strcmp(driver_name, "imx_lcdif")) + return __driDriverGetExtensions_imx_lcdif(); + if (!strcmp(driver_name, "ingenic_drm")) + return __driDriverGetExtensions_ingenic_drm(); + if (!strcmp(driver_name, "kirin")) + return __driDriverGetExtensions_kirin(); + if (!strcmp(driver_name, "komeda")) + return __driDriverGetExtensions_komeda(); + if (!strcmp(driver_name, "mali_dp")) + return __driDriverGetExtensions_mali_dp(); + if (!strcmp(driver_name, "mcde")) + return __driDriverGetExtensions_mcde(); + if (!strcmp(driver_name, "mediatek")) + return __driDriverGetExtensions_mediatek(); + if (!strcmp(driver_name, "meson")) + return __driDriverGetExtensions_meson(); + if (!strcmp(driver_name, "mi0283qt")) + return __driDriverGetExtensions_mi0283qt(); + if (!strcmp(driver_name, "mxsfb_drm")) + return __driDriverGetExtensions_mxsfb_drm(); + if (!strcmp(driver_name, "panel_mipi_dbi")) + return __driDriverGetExtensions_panel_mipi_dbi(); + if (!strcmp(driver_name, "pl111")) + return __driDriverGetExtensions_pl111(); + if (!strcmp(driver_name, "rcar_du")) + return __driDriverGetExtensions_rcar_du(); + if (!strcmp(driver_name, "repaper")) + return __driDriverGetExtensions_repaper(); + if (!strcmp(driver_name, "rockchip")) + return __driDriverGetExtensions_rockchip(); + if (!strcmp(driver_name, "rzg2l_du")) + return __driDriverGetExtensions_rzg2l_du(); + if (!strcmp(driver_name, "ssd130x")) + return __driDriverGetExtensions_ssd130x(); + if (!strcmp(driver_name, "st7586")) + return __driDriverGetExtensions_st7586(); + if (!strcmp(driver_name, "st7735r")) + return __driDriverGetExtensions_st7735r(); + if (!strcmp(driver_name, "sti")) + return __driDriverGetExtensions_sti(); + if (!strcmp(driver_name, "stm")) + return __driDriverGetExtensions_stm(); + if (!strcmp(driver_name, "sun4i_drm")) + return __driDriverGetExtensions_sun4i_drm(); + if (!strcmp(driver_name, "udl")) + return __driDriverGetExtensions_udl(); + if (!strcmp(driver_name, "vkms")) + return __driDriverGetExtensions_vkms(); + if (!strcmp(driver_name, "zynqmp_dpsub")) + return __driDriverGetExtensions_zynqmp_dpsub(); +#endif + +#if defined(HAVE_LIMA) + if (!strcmp(driver_name, "lima")) + return __driDriverGetExtensions_lima(); +#endif + +#if defined(HAVE_ZINK) + if (!strcmp(driver_name, "zink")) + return __driDriverGetExtensions_zink(); +#endif + +#if defined(HAVE_D3D12) + if (!strcmp(driver_name, "d3d12")) + return __driDriverGetExtensions_d3d12(); +#endif + +#if defined(HAVE_SWRAST) + if (!strcmp(driver_name, "swrast")) + return __driDriverGetExtensions_swrast(); + +#if defined(HAVE_LIBDRM) + if (!strcmp(driver_name, "kms_swrast")) + return __driDriverGetExtensions_kms_swrast(); +#endif +#endif + + return NULL; +} diff --git a/src/gallium/targets/dri/meson.build b/src/gallium/targets/dri/meson.build index 8336ebc65a1..5b5e4e6837d 100644 --- a/src/gallium/targets/dri/meson.build +++ b/src/gallium/targets/dri/meson.build @@ -34,7 +34,7 @@ libgallium_dri = shared_library( link_depends : gallium_dri_link_depends, link_with : [ libdri, libmesa, libgalliumvl, - libgallium, libglapi, libloader, libpipe_loader_static, libws_null, libwsw, libswdri, + libgallium, libglapi, libpipe_loader_static, libws_null, libwsw, libswdri, libswkmsdri, ], dependencies : [ @@ -45,7 +45,6 @@ libgallium_dri = shared_library( driver_panfrost, driver_iris, driver_lima, driver_zink, driver_d3d12, driver_asahi, driver_crocus ], - # Will be deleted during installation, see install_megadrivers.py install : true, install_dir : dri_drivers_path, name_suffix : 'so', diff --git a/src/gallium/targets/dril/meson.build b/src/gallium/targets/dril/meson.build index 071c695a05a..df79a49d80e 100644 --- a/src/gallium/targets/dril/meson.build +++ b/src/gallium/targets/dril/meson.build @@ -130,8 +130,6 @@ endforeach # This only works on Unix-like oses, which is probably fine for dri prog_ln = find_program('ln', required : false) if prog_ln.found() - devenv.set('LIBGL_DRIVERS_PATH', meson.current_build_dir()) - foreach d : dril_drivers custom_target( 'devenv_@0@'.format(d), diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index fbef32ac3fb..b178146c6fb 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -1058,7 +1058,7 @@ dri2CreateScreen(int screen, struct glx_display * priv, bool driver_name_is_infe } psc->driverName = driverName; - extensions = driOpenDriver(driverName, &psc->driver, driver_name_is_inferred); + extensions = driOpenDriver(driverName, driver_name_is_inferred); if (extensions == NULL) goto handle_error; @@ -1178,8 +1178,6 @@ handle_error: psc->driScreen = NULL; if (psc->fd >= 0) close(psc->fd); - if (psc->driver) - dlclose(psc->driver); free(deviceName); glx_screen_cleanup(&psc->base); diff --git a/src/glx/dri2_priv.h b/src/glx/dri2_priv.h index c4c5f3b9459..376e977a9b7 100644 --- a/src/glx/dri2_priv.h +++ b/src/glx/dri2_priv.h @@ -56,7 +56,6 @@ struct dri2_screen { const __DRI2interopExtension *interop; const __DRIconfig **driver_configs; - void *driver; char *driverName; int fd; diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c index 2d3dd404571..73dbc6ec1fc 100644 --- a/src/glx/dri3_glx.c +++ b/src/glx/dri3_glx.c @@ -842,7 +842,7 @@ dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_in goto handle_error; } - extensions = driOpenDriver(driverName, &psc->driver, driver_name_is_inferred); + extensions = driOpenDriver(driverName, driver_name_is_inferred); if (extensions == NULL) goto handle_error; @@ -1033,8 +1033,6 @@ handle_error: close(psc->fd_display_gpu); if (psc->fd_render_gpu >= 0) close(psc->fd_render_gpu); - if (psc->driver) - dlclose(psc->driver); free(driverName); glx_screen_cleanup(&psc->base); diff --git a/src/glx/dri3_priv.h b/src/glx/dri3_priv.h index 047369fabe0..a1bf26cfa60 100644 --- a/src/glx/dri3_priv.h +++ b/src/glx/dri3_priv.h @@ -98,7 +98,6 @@ struct dri3_screen { const __DRI2interopExtension *interop; const __DRIconfig **driver_configs; - void *driver; /* fd of the GPU used for rendering. */ int fd_render_gpu; /* fd of the GPU used for display. If the same GPU is used for display diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c index 40cf9a0bae2..a02f8492244 100644 --- a/src/glx/dri_common.c +++ b/src/glx/dri_common.c @@ -55,13 +55,12 @@ #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. * - * This function adds the "_dri.so" suffix to the driver name and searches the - * directories specified by the \c LIBGL_DRIVERS_PATH environment variable in - * order to find the driver. - * * \param driverName - a name like "i965", "radeon", "nouveau", etc. * \param out_driver_handle - Address to return the resulting dlopen() handle. * @@ -70,21 +69,19 @@ * file not found. */ _X_HIDDEN const __DRIextension ** -driOpenDriver(const char *driverName, void **out_driver_handle, bool driver_name_is_inferred) +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); - static const char *search_path_vars[] = { - "LIBGL_DRIVERS_PATH", - "LIBGL_DRIVERS_DIR", /* deprecated */ - NULL - }; + const __DRIextension **extensions = dri_loader_get_extensions(driverName); - const __DRIextension **extensions = - loader_open_driver(driverName, out_driver_handle, search_path_vars, driver_name_is_inferred); + if (driver_name_is_inferred) { + glx_message(_LOADER_WARNING, + "MESA-LOADER: failed to open %s: driver not built!)\n", driverName); + } if (glhandle) dlclose(glhandle); @@ -742,9 +739,8 @@ clear_driver_config_cache() static char * get_driver_config(const char *driverName) { - void *handle; char *config = NULL; - const __DRIextension **extensions = driOpenDriver(driverName, &handle, false); + const __DRIextension **extensions = driOpenDriver(driverName, false); if (extensions) { for (int i = 0; extensions[i]; i++) { if (strcmp(extensions[i]->name, __DRI_CONFIG_OPTIONS) != 0) @@ -760,8 +756,6 @@ get_driver_config(const char *driverName) } } - dlclose(handle); - return config; } diff --git a/src/glx/dri_common.h b/src/glx/dri_common.h index a2a0ec1c3cc..adb2aaf2dbe 100644 --- a/src/glx/dri_common.h +++ b/src/glx/dri_common.h @@ -64,7 +64,6 @@ extern void driReleaseDrawables(struct glx_context *gc); extern const __DRIextension **driOpenDriver(const char *driverName, - void **out_driver_handle, bool driver_name_is_inferred); struct dri_ctx_attribs { diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index c45308b8f09..534e260234c 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -800,8 +800,6 @@ driswDestroyScreen(struct glx_screen *base) psc->core->destroyScreen(psc->driScreen); driDestroyConfigs(psc->driver_configs); psc->driScreen = NULL; - if (psc->driver) - dlclose(psc->driver); free(psc); } @@ -955,7 +953,7 @@ driswCreateScreenDriver(int screen, struct glx_display *priv, return NULL; } - extensions = driOpenDriver(driver, &psc->driver, driver_name_is_inferred); + extensions = driOpenDriver(driver, driver_name_is_inferred); if (extensions == NULL) goto handle_error; psc->name = driver; @@ -1051,8 +1049,6 @@ driswCreateScreenDriver(int screen, struct glx_display *priv, psc->core->destroyScreen(psc->driScreen); psc->driScreen = NULL; - if (psc->driver) - dlclose(psc->driver); glx_screen_cleanup(&psc->base); free(psc); diff --git a/src/glx/drisw_priv.h b/src/glx/drisw_priv.h index f5a045da5f8..83d5275645f 100644 --- a/src/glx/drisw_priv.h +++ b/src/glx/drisw_priv.h @@ -53,7 +53,6 @@ struct drisw_screen const __DRIconfig **driver_configs; - void *driver; const char *name; bool has_multibuffer; diff --git a/src/glx/meson.build b/src/glx/meson.build index fda4b4b691c..41711a5113a 100644 --- a/src/glx/meson.build +++ b/src/glx/meson.build @@ -105,6 +105,13 @@ else ) endif +glx_gallium_link = [] +if with_dri + glx_gallium_link += libgallium_dri +endif +if with_platform_windows + glx_gallium_link += libgallium_wgl +endif libglx = static_library( 'glx', [files_libglx, glx_generated], @@ -115,7 +122,7 @@ libglx = static_library( gnu_symbol_visibility : 'hidden', link_with : [ libloader, libloader_dri3_helper, - extra_libs_libglx, + extra_libs_libglx, glx_gallium_link ], dependencies : [ idep_mesautil, idep_xmlconfig, @@ -137,6 +144,7 @@ libgl = shared_library( version : gl_lib_version, darwin_versions : '4.0.0', install : true, + install_rpath : dri_drivers_path, ) if with_tests diff --git a/src/glx/tests/meson.build b/src/glx/tests/meson.build index 947d76a5a71..e82178d1e2f 100644 --- a/src/glx/tests/meson.build +++ b/src/glx/tests/meson.build @@ -26,7 +26,7 @@ if with_shared_glapi executable( 'glx-test', [files_glx_test, glx_indirect_size_h, main_dispatch_h], - link_with : [libglx, libglapi, libloader], + link_with : [libglx, libglapi, glx_gallium_link, libloader], include_directories : [ inc_src, inc_include, inc_mesa, inc_mapi, inc_glx, inc_loader, inc_gallium ],