summaryrefslogtreecommitdiff
path: root/src/loader
diff options
context:
space:
mode:
authorEmma Anholt <emma@anholt.net>2022-11-28 12:50:59 -0800
committerMarge Bot <emma+marge@anholt.net>2022-12-05 19:26:41 +0000
commit1026d29344192755dd340d6ac13a9674189d2d61 (patch)
tree3fc33d24b56fba2676cbc639e99b2acea50ea677 /src/loader
parent2db044d7e53d960c2d7286d0b8899ba455254475 (diff)
downloadmesa-1026d29344192755dd340d6ac13a9674189d2d61.tar.gz
dri: Introduce internal Mesa DRI driver loader extension.
All DRI loaders in Mesa (EGL, GLX, gbm) now require this ext and that the driver come from a matching build. This will let us use Mesa-internal types and enums across the loader-driver bounary inside of Mesa. Reviewed-by: Adam Jackson <ajax@redhat.com> Acked-by: Eric Engestrom <eric@igalia.com> LOL-YESed-by: Kristian Høgsberg <krh@bitplanet.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20069>
Diffstat (limited to 'src/loader')
-rw-r--r--src/loader/loader.c14
-rw-r--r--src/loader/meson.build2
2 files changed, 15 insertions, 1 deletions
diff --git a/src/loader/loader.c b/src/loader/loader.c
index 5e27f84f51a..dd6f837911a 100644
--- a/src/loader/loader.c
+++ b/src/loader/loader.c
@@ -46,9 +46,11 @@
#endif
#include <GL/gl.h>
#include <GL/internal/dri_interface.h>
+#include <GL/internal/mesa_interface.h>
#include "loader.h"
#include "util/os_file.h"
#include "util/os_misc.h"
+#include "git_sha1.h"
#ifdef HAVE_LIBDRM
#include <xf86drm.h>
@@ -627,6 +629,18 @@ loader_bind_extensions(void *data,
if (!match->optional)
ret = false;
}
+
+ /* The loaders rely on the loaded DRI drivers being from the same Mesa
+ * build so that we can reference the same structs on both sides.
+ */
+ if (strcmp(match->name, __DRI_MESA) == 0) {
+ const __DRImesaCoreExtension *mesa = (const __DRImesaCoreExtension *)*field;
+ if (strcmp(mesa->version_string, MESA_INTERFACE_VERSION_STRING) != 0) {
+ log_(_LOADER_FATAL, "DRI driver not from this Mesa build ('%s' vs '%s')\n",
+ mesa->version_string, MESA_INTERFACE_VERSION_STRING);
+ ret = false;
+ }
+ }
}
return ret;
diff --git a/src/loader/meson.build b/src/loader/meson.build
index 6334cb9815c..bdebcb725a4 100644
--- a/src/loader/meson.build
+++ b/src/loader/meson.build
@@ -42,7 +42,7 @@ loader_c_args = [
]
libloader = static_library(
'loader',
- ['loader_dri_helper.c', 'loader.c'],
+ ['loader_dri_helper.c', 'loader.c', sha1_h],
c_args : loader_c_args,
gnu_symbol_visibility : 'hidden',
include_directories : [inc_include, inc_src, inc_util],