Work around WebKitGTK EGL crash on Wayland #38

Merged
jknapp merged 2 commits from fix/wayland-webkit-egl-crash into main 2026-08-27 18:29:51 +00:00
Showing only changes of commit 6354cb42b2 - Show all commits
+29
View File
@@ -1,6 +1,35 @@
// Prevents additional console window on Windows in release
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
/// WebKitGTK's DMA-BUF renderer (its default accelerated-compositing path
/// since 2.42) fails outright on some Mesa/driver/compositor combinations
/// under Wayland, printing `Could not create default EGL display:
/// EGL_BAD_PARAMETER. Aborting.` straight to stderr from WebKitGTK's own C
/// code and killing the webview before Triple-C's own logging even starts —
/// see triple-c#34, reported on CachyOS/Arch with Wayland. There is no
/// reliable way to detect the affected driver/compositor combination ahead
/// of time (it is not simply "Wayland vs. X11" — the same failure has been
/// reported under XWayland too), so this is set unconditionally on Linux
/// rather than gated on `WAYLAND_DISPLAY`. WebKitGTK falls back to a
/// software/shared-memory compositing path when this is set, which costs
/// some rendering performance but nothing this app's UI depends on.
///
/// Must be set before `triple_c_lib::run()` — GTK/WebKitGTK reads it at
/// their own init time, which happens inside the Tauri builder that
/// function calls into, not at binary load.
///
/// A user who has already set this themselves (including to `0`, to force
/// the DMA-BUF path back on for their own hardware) is left alone.
#[cfg(target_os = "linux")]
fn apply_webkit_wayland_workaround() {
if std::env::var_os("WEBKIT_DISABLE_DMABUF_RENDERER").is_none() {
std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1");
}
}
fn main() {
#[cfg(target_os = "linux")]
apply_webkit_wayland_workaround();
triple_c_lib::run()
}