From: Jonathan Gray Subject: Re: fail early in mesa/eglInitialize when on wayland To: Landry Breuil Cc: tech@openbsd.org Date: Mon, 3 Nov 2025 16:24:08 +1100 On Sat, Nov 01, 2025 at 06:33:19PM +0100, Landry Breuil wrote: > hi, > > currently mesa isnt built with wayland support (which is a topic in itself). > When running on wayland, starting any gtk+4 app will crash early when > initializing, because we end up taking a libxcb codepath, eg run gtk+4-demo: > > Program terminated with signal SIGSEGV, Segmentation fault. > #0 0x00000316d2ae48aa in XGetXCBConnection () from /usr/X11R6/lib/libX11-xcb.so.2.0 > [Current thread is 1 (process 381892)] > (gdb) bt > #0 0x00000316d2ae48aa in XGetXCBConnection () from /usr/X11R6/lib/libX11-xcb.so.2.0 > #1 0x00000316849f7ff4 in dri2_get_xcb_connection (disp=0x31632dbc5a0, dri2_dpy=0x3161541bcc0) at /usr/xenocara/lib/mesa/mk/libEGL/../../src/egl/drivers/dri2/platform_x11.c:1720 > #2 0x00000316849f7ad8 in dri2_initialize_x11_dri3 (disp=0x31632dbc5a0) at /usr/xenocara/lib/mesa/mk/libEGL/../../src/egl/drivers/dri2/platform_x11.c:1926 > #3 dri2_initialize_x11 (disp=0x31632dbc5a0) at /usr/xenocara/lib/mesa/mk/libEGL/../../src/egl/drivers/dri2/platform_x11.c:2095 > #4 0x00000316849e3ee5 in dri2_initialize (disp=0x31632dbc5a0) at /usr/xenocara/lib/mesa/mk/libEGL/../../src/egl/drivers/dri2/egl_dri2.c:891 > #5 0x00000316849e79b1 in eglInitialize (dpy=, major=0x7eac247c3468, minor=0x7eac247c346c) at /usr/xenocara/lib/mesa/mk/libEGL/../../src/egl/main/eglapi.c:705 > #6 0x000003163bf7675e in gdk_display_init_egl () from /usr/local/lib/libgtk-4.so.5.5 > #7 0x000003163bf0c073 in gdk_wayland_display_init_gl () from /usr/local/lib/libgtk-4.so.5.5 > #8 0x000003163bf76399 in gdk_display_prepare_gl () from /usr/local/lib/libgtk-4.so.5.5 > #9 0x000003163bfe1217 in get_renderer_for_gl () from /usr/local/lib/libgtk-4.so.5.5 > #10 0x000003163bfe0880 in gsk_renderer_new_for_surface_full () from /usr/local/lib/libgtk-4.so.5.5 > #11 0x000003163bd2b543 in gtk_window_realize () from /usr/local/lib/libgtk-4.so.5.5 > > it can also be seen with /usr/local/lib/firefox/glxtest -w, which also calls > eglIinitialize: > https://searchfox.org/firefox-main/source/toolkit/xre/glxtest/glxtest.cpp#612 > > looking at the code, display->Platform is X11, since wayland support isnt > builtin: > > #4 0x00000316849e3ee5 in dri2_initialize (disp=0x31632dbc5a0) at /usr/xenocara/lib/mesa/mk/libEGL/../../src/egl/drivers/dri2/egl_dri2.c:891 > (gdb) p disp->Platform > $3 = _EGL_PLATFORM_X11 Do you see this because XGetXCBConnection() is passed a NULL argument? Can't tell from the trace. Index: lib/mesa/src/egl/drivers/dri2/platform_x11.c =================================================================== RCS file: /cvs/xenocara/lib/mesa/src/egl/drivers/dri2/platform_x11.c,v diff -u -p -r1.21 platform_x11.c --- lib/mesa/src/egl/drivers/dri2/platform_x11.c 5 Jun 2025 14:19:04 -0000 1.21 +++ lib/mesa/src/egl/drivers/dri2/platform_x11.c 3 Nov 2025 05:18:08 -0000 @@ -1717,6 +1717,10 @@ dri2_get_xcb_connection(_EGLDisplay *dis screen = dri2_find_screen_for_display(disp, screen); } else if (disp->Platform == _EGL_PLATFORM_X11) { Display *dpy = disp->PlatformDisplay; + if (dpy == NULL) { + msg = "failed to get platform display"; + goto disconnect; + } dri2_dpy->conn = XGetXCBConnection(dpy); screen = DefaultScreen(dpy); } else {