qemu: enable support for CGL backend

Thanks to @startergo for the changes. This should enable OpenGL 4.1 on Linux

Resolves #4285
This commit is contained in:
osy
2026-01-04 21:54:36 -08:00
parent 79959928d7
commit 2a913cadb0
6 changed files with 2745 additions and 6 deletions
@@ -201,7 +201,7 @@ import Virtualization // for getting network interfaces
} else {
"streaming-video=filter"
}
"gl=\(isGLSupported && !isRemoteSpice ? "on" : "off")"
"gl=\(glBackend)"
f()
f("-chardev")
if isRemoteSpice {
@@ -281,7 +281,28 @@ import Virtualization // for getting network interfaces
display.hardware.rawValue.contains("-gl-") || display.hardware.rawValue.hasSuffix("-gl")
}
}
private var rendererBackend: UTMQEMURendererBackend {
let rawValue = UserDefaults.standard.integer(forKey: "QEMURendererBackend")
return UTMQEMURendererBackend(rawValue: rawValue) ?? .qemuRendererBackendDefault
}
private var glBackend: String {
if isGLSupported && !isRemoteSpice {
#if os(macOS)
if rendererBackend == .qemuRendererBackendCGL {
return "core"
} else {
return "es"
}
#else
return "on"
#endif
} else {
return "off"
}
}
private var isSparc: Bool {
system.architecture == .sparc || system.architecture == .sparc64
}
+1
View File
@@ -232,6 +232,7 @@ struct DisplaySettingsView: View {
Text("Default").tag(UTMQEMURendererBackend.qemuRendererBackendDefault)
Text("ANGLE (OpenGL)").tag(UTMQEMURendererBackend.qemuRendererBackendAngleGL)
Text("ANGLE (Metal)").tag(UTMQEMURendererBackend.qemuRendererBackendAngleMetal)
Text("Apple Core OpenGL").tag(UTMQEMURendererBackend.qemuRendererBackendCGL)
}.help("By default, the best renderer for this device will be used. You can override this with to always use a specific renderer. This only applies to QEMU VMs with GPU accelerated graphics.")
HStack {
Stepper("FPS Limit", value: $qemuRendererFpsLimit, in: 0...240, step: 15)
+2 -1
View File
@@ -22,7 +22,8 @@ typedef NS_ENUM(NSInteger, UTMQEMURendererBackend) {
kQEMURendererBackendDefault = 0,
kQEMURendererBackendAngleGL = 1,
kQEMURendererBackendAngleMetal = 2,
kQEMURendererBackendMax = 3,
kQEMURendererBackendCGL = 3,
kQEMURendererBackendMax = 4,
};
/// Specify the sound backend for this VM
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -42,9 +42,9 @@ WEBKIT_REPO="https://github.com/utmapp/WebKit.git"
WEBKIT_COMMIT="e9f29559b009011a1ee420d67e1994d3d5295f1a"
WEBKIT_SUBDIRS="Source/ThirdParty/ANGLE Configurations Tools/ccache"
EPOXY_REPO="https://github.com/utmapp/libepoxy.git"
EPOXY_COMMIT="266d2290a437c655f7419e85af06bfbb73a720c4"
EPOXY_COMMIT="5014658f79e4d6872a1ad6754da9098ccd9d4fc5"
VIRGLRENDERER_REPO="https://github.com/utmapp/virglrenderer.git"
VIRGLRENDERER_COMMIT="dc039d9ecd74fc671a85bfbe7c4e4bc552b7b855"
VIRGLRENDERER_COMMIT="31d91c3860749534aed7bd26af8f47f7de412681"
# Decompiled Hypervisor for iOS
HYPERVISOR_REPO="https://github.com/utmapp/Hypervisor.git"
+1 -1
View File
@@ -489,7 +489,7 @@ build_qemu_dependencies () {
# GPU support
build_angle
meson_build $EPOXY_REPO -Dtests=false -Dglx=no -Degl=yes
meson_build $VIRGLRENDERER_REPO -Dtests=false -Dcheck-gl-errors=false
meson_build $VIRGLRENDERER_REPO -Dtests=false -Dcheck-gl-errors=false -Dvenus=true -Drender-server-worker=thread
# Hypervisor for iOS
if [ "$PLATFORM" == "ios" ] || [ "$PLATFORM" == "ios_simulator" ]; then
build_hypervisor