From 2638186ce1f27f769982696e510211da59d97a22 Mon Sep 17 00:00:00 2001 From: Vasilito Date: Fri, 1 May 2026 00:21:28 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Mesa=20virgl=20gallium=20driver=20?= =?UTF-8?q?=E2=80=94=20hardware-accelerated=203D=20for=20QEMU?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mesa now builds with -Dgallium-drivers=swrast,virgl for Redox target. Fixes: - virgl_screen.c: wrapped disk cache creation in #ifndef __redox__ (build_id_find_nhdr_for_addr uses dl_iterate_phdr — unavailable on Redox) - bits/safamily-t.h: provided to cross-compiler toolchain sysroot Durable patch: - local/patches/mesa/P4-virgl-redox-disk-cache.patch (25 lines) This enables hardware-accelerated 3D rendering in QEMU via virtio-gpu + virgl. Mesa EGL/GLES2/GBM now support the virgl gallium driver alongside llvmpipe software renderer. 63MB pkgar artifact with virgl support. --- .../mesa/P4-virgl-redox-disk-cache.patch | 25 +++++++++++++++++++ recipes/libs/mesa/recipe.toml | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 local/patches/mesa/P4-virgl-redox-disk-cache.patch diff --git a/local/patches/mesa/P4-virgl-redox-disk-cache.patch b/local/patches/mesa/P4-virgl-redox-disk-cache.patch new file mode 100644 index 00000000..192a34b4 --- /dev/null +++ b/local/patches/mesa/P4-virgl-redox-disk-cache.patch @@ -0,0 +1,25 @@ +diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c +index d86ca5d1e..f79b8c678 100644 +--- a/src/gallium/drivers/virgl/virgl_screen.c ++++ b/src/gallium/drivers/virgl/virgl_screen.c +@@ -1054,6 +1054,12 @@ static struct disk_cache *virgl_get_disk_shader_cache (struct pipe_screen *pscre + + static void virgl_disk_cache_create(struct virgl_screen *screen) + { ++#ifdef __redox__ ++ (void)screen; ++ /* build_id_find_nhdr_for_addr uses dl_iterate_phdr — not available on Redox. ++ * Disk cache is disabled; shader compilation works without it. */ ++ screen->disk_cache = NULL; ++#else + const struct build_id_note *note = + build_id_find_nhdr_for_addr(virgl_disk_cache_create); + assert(note); +@@ -1078,6 +1084,7 @@ static void virgl_disk_cache_create(struct virgl_screen *screen) + _mesa_sha1_format(timestamp, sha1); + + screen->disk_cache = disk_cache_create("virgl", timestamp, 0); ++#endif + } + + static bool diff --git a/recipes/libs/mesa/recipe.toml b/recipes/libs/mesa/recipe.toml index 391e774d..44deb639 100644 --- a/recipes/libs/mesa/recipe.toml +++ b/recipes/libs/mesa/recipe.toml @@ -3,6 +3,7 @@ git = "https://gitlab.redox-os.org/redox-os/mesa.git" upstream = "https://gitlab.freedesktop.org/mesa/mesa" branch = "redox-24.0" shallow_clone = true +patches = ["../../../local/patches/mesa/P4-virgl-redox-disk-cache.patch"] [build] template = "custom" dependencies = [ @@ -41,7 +42,7 @@ cookbook_meson \ -Degl=enabled \ -Dgbm=enabled \ -Dglx=disabled \ - -Dgallium-drivers=swrast \ + -Dgallium-drivers=swrast,virgl \ -Dllvm=enabled \ -Dosmesa=true \ -Dplatforms=redox \