From 94090d528026fd3b238a82748dd601bd05054297 Mon Sep 17 00:00:00 2001 From: Mathieu Benoit Date: Thu, 3 Sep 2026 03:22:49 -0400 Subject: [PATCH] =?UTF-8?q?[FIX]=20qemu=203D=20:=20le=20module=20virtio-vg?= =?UTF-8?q?a-gl=20manquait=20au=20relev=C3=A9=20des=20pi=C3=A8ces?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les deux devices accélérés sont des modules séparés, empaquetés à part sur les distributions qui découpent QEMU. Le relevé ne cherchait que « virtio-gpu-gl » ; c'est « virtio-vga-gl » que libvirt exige pour un écran principal compatible VGA, soit le cas d'une VM graphique. Le rapport ressortait donc tout en vert à côté de la pièce absente. Sans ce module, QEMU n'annonce pas le device, libvirt le remplace en silence par « virtio-vga » nu et la VM démarre sans 3D — l'egl-headless demandé restant en place, rien dans la définition ne trahit le repli. --- EN --- The two accelerated devices are separate modules, packaged apart on distributions that split QEMU. The survey looked only for « virtio-gpu-gl »; libvirt needs « virtio-vga-gl » for a VGA-compatible primary display, which is what a graphical VM gets. The report therefore came back all green next to the missing piece. Without that module QEMU does not advertise the device, libvirt quietly falls back to plain « virtio-vga » and the VM boots with no 3D — the requested egl-headless still in place, nothing in the definition telling. Assisted-by: Claude Opus 5 --- script/todo/qemu_manage.py | 9 +++++++++ test/test_qemu_start_egl.py | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/script/todo/qemu_manage.py b/script/todo/qemu_manage.py index 5f4788d..8ee735c 100644 --- a/script/todo/qemu_manage.py +++ b/script/todo/qemu_manage.py @@ -385,8 +385,17 @@ class QemuManageMixin: # # Les fichiers plutôt que les paquets : leurs noms changent d'une # distribution à l'autre, leur emplacement beaucoup moins. + # Les deux devices 3D sont des modules SÉPARÉS, empaquetés à part sur + # les distributions qui découpent QEMU. Lequel sert dépend du type de + # vidéo : « virtio-vga-gl » pour l'écran principal compatible VGA, + # « virtio-gpu-gl » pour un affichage sans VGA. Ne chercher que le + # second laisse le rapport tout en vert alors que le premier manque. + # QEMU n'annonce pas un device dont le module est absent, libvirt le + # remplace alors par « virtio-vga » nu, et rien ne le signale : la VM + # démarre sans 3D, avec l'egl-headless demandé toujours en place. _GPU_3D_PIECES = ( ("qemu ui-egl-headless", "qemu/ui-egl-headless.so"), + ("qemu virtio-vga-gl", "qemu/hw-display-virtio-vga-gl.so"), ("qemu virtio-gpu-gl", "qemu/hw-display-virtio-gpu-gl.so"), ("virglrenderer", "libvirglrenderer.so"), ("mesa libgbm", "libgbm.so"), diff --git a/test/test_qemu_start_egl.py b/test/test_qemu_start_egl.py index 948ff79..d8c6e03 100644 --- a/test/test_qemu_start_egl.py +++ b/test/test_qemu_start_egl.py @@ -597,3 +597,23 @@ class LaSondeVideo(unittest.TestCase): sondes = dict(QemuManageMixin._DIAG_PROBES) self.assertIn("video du qemu en cours", sondes) + + +class LesPieces3D(unittest.TestCase): + """Le rapport 3D cherche les DEUX devices accélérés, non un seul. + + « virtio-vga-gl » et « virtio-gpu-gl » sont des modules distincts, et + les distributions qui découpent QEMU les empaquettent séparément. + Celui qui sert dépend du type de vidéo demandé ; n'en chercher qu'un + rend un rapport tout vert à côté de la pièce absente. + """ + + def test_both_accelerated_devices_are_looked_for(self): + from script.todo.qemu_manage import QemuManageMixin + + motifs = [m for _, m in QemuManageMixin._GPU_3D_PIECES] + for module in ( + "qemu/hw-display-virtio-vga-gl.so", + "qemu/hw-display-virtio-gpu-gl.so", + ): + self.assertIn(module, motifs)