From 5d7fcad842cbf3112cc7d50e2414451e22a066be Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 24 Aug 2025 16:31:54 +0200 Subject: [PATCH] Rework qemu gpu configuration * Make gpu=no work on arm64 and riscv64 * Register gpu's with the firmware as vga card on x86 where possible * Add a virtio-gl option for virtio-gpu with OpenGL support (no support on the driver side yet) * Support ramfb on x86 --- mk/qemu.mk | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/mk/qemu.mk b/mk/qemu.mk index 1bfa5d40..9713bf37 100644 --- a/mk/qemu.mk +++ b/mk/qemu.mk @@ -3,10 +3,13 @@ QEMU=SDL_VIDEO_X11_DGAMOUSE=0 qemu-system-$(QEMU_ARCH) QEMUFLAGS=-d guest_errors -name "Redox OS $(ARCH)" netboot?=no +VGA_SUPPORTED=no ifeq ($(ARCH),i686) audio?=ac97 + gpu?=vga uefi=no + VGA_SUPPORTED=yes QEMU_ARCH=i386 QEMU_MACHINE?=pc QEMU_CPU?=pentium2 @@ -18,6 +21,8 @@ ifeq ($(ARCH),i686) kvm?=yes endif else ifeq ($(ARCH),x86_64) + gpu?=vga + VGA_SUPPORTED=yes QEMU_ARCH=x86_64 QEMU_MACHINE?=q35 QEMU_CPU?=core2duo @@ -43,6 +48,7 @@ else ifeq ($(ARCH),aarch64) # setting up a framebuffer ourself. uefi?=yes live?=yes + gpu?=ramfb QEMU_ARCH=aarch64 QEMU_MACHINE?=virt QEMU_CPU=max @@ -73,9 +79,6 @@ else ifeq ($(ARCH),aarch64) else FIRMWARE=$(BUILD)/qemu_uboot.rom endif - ifneq ($(gpu),no) - QEMUFLAGS+=-device ramfb - endif ifneq ($(usb),no) QEMUFLAGS+=-device qemu-xhci -device usb-kbd -device usb-tablet endif @@ -84,7 +87,7 @@ else ifeq ($(ARCH),riscv64gc) live=no efi=yes audio=no - vga=no # virtio-gpu-pci + gpu?=ramfb net=bridge QEMU_ARCH=riscv64 # QEMU_MACHINE=virt for ACPI mode instead of DTB @@ -106,9 +109,6 @@ else ifeq ($(ARCH),riscv64gc) $(wildcard /usr/share/qemu/edk2-riscv-vars.fd) \ $(wildcard /opt/homebrew/opt/qemu/share/qemu/edk2-riscv-vars.fd) \ ) - ifneq ($(vga),no) - QEMUFLAGS+=-device ramfb - endif ifneq ($(usb),no) QEMUFLAGS+=-device qemu-xhci -device usb-kbd -device usb-tablet endif @@ -193,12 +193,32 @@ endif ifeq ($(gpu),no) QEMUFLAGS+=-nographic -vga none +else ifeq ($(gpu),vga) + ifeq ($(VGA_SUPPORTED),yes) + QEMUFLAGS+=-vga std + else + QEMUFLAGS+=-vga none -device secondary-vga + endif +else ifeq ($(gpu),ramfb) + QEMUFLAGS+=-vga none -device ramfb else ifeq ($(gpu),multi) - QEMUFLAGS+=-display sdl -vga none -device virtio-gpu,max_outputs=2 + ifeq ($(VGA_SUPPORTED),yes) + QEMUFLAGS+=-display sdl -vga none -device virtio-vga,max_outputs=2 + else + QEMUFLAGS+=-display sdl -vga none -device virtio-gpu,max_outputs=2 + endif else ifeq ($(gpu),virtio) - QEMUFLAGS+=-vga virtio -else ifeq ($(vga),virtio-gpu-pci) - QEMUFLAGS+= -vga virtio-gpu-pci + ifeq ($(VGA_SUPPORTED),yes) + QEMUFLAGS+=-vga none -device virtio-vga + else + QEMUFLAGS+=-vga none -device virtio-gpu + endif +else ifeq ($(gpu),virtio-gl) + ifeq ($(VGA_SUPPORTED),yes) + QEMUFLAGS+=-display gtk,gl=on -vga none -device virtio-vga-gl + else + QEMUFLAGS+=-display gtk,gl=on -vga none -device virtio-gpu-gl + endif endif EXTRA_DISK=$(BUILD)/extra.img