Update display.sh

This commit is contained in:
Kroese
2026-09-02 21:27:40 +02:00
committed by GitHub
parent 01252ffe68
commit a1c7316dcf
+20 -195
View File
@@ -68,34 +68,10 @@ case "${DISPLAY,,}" in
esac esac
gpuFallbackAllowed() {
local app="${APP:-}"
case "${app,,}" in
"chrome"* ) return 0 ;;
esac
return 1
}
gpuSetupFailure() { gpuSetupFailure() {
local reason="$1" local reason="$1"
if gpuFallbackAllowed; then
warn "$reason; falling back to software rendering."
return 0
fi
error "$reason"
exit 87
}
vmwareGpuSetupFailure() {
local reason="$1"
error "$reason" error "$reason"
exit 87 exit 87
} }
@@ -316,18 +292,18 @@ vmwareGpuSetup() {
VMWARE_VULKAN_REASON="" VMWARE_VULKAN_REASON=""
if ! vmwareRenderNodeReady; then if ! vmwareRenderNodeReady; then
vmwareGpuSetupFailure "VMware GPU acceleration requires a usable host GPU, but $VMWARE_RENDER_REASON" gpuSetupFailure "VMware GPU acceleration requires a usable host GPU, but $VMWARE_RENDER_REASON"
fi fi
local library local library
for library in libvulkan.so.1 libdxvk_d3d9.so.0 libdxvk_d3d11.so.0; do for library in libvulkan.so.1 libdxvk_d3d9.so.0 libdxvk_d3d11.so.0; do
if ! vmwareLibraryReady "$library"; then if ! vmwareLibraryReady "$library"; then
vmwareGpuSetupFailure "VMware GPU acceleration is unavailable because $VMWARE_LIBRARY_REASON" gpuSetupFailure "VMware GPU acceleration is unavailable because $VMWARE_LIBRARY_REASON"
fi fi
done done
if ! vmwareVulkanReady; then if ! vmwareVulkanReady; then
vmwareGpuSetupFailure "VMware GPU acceleration is unavailable because $VMWARE_VULKAN_REASON" gpuSetupFailure "VMware GPU acceleration is unavailable because $VMWARE_VULKAN_REASON"
fi fi
echo echo
@@ -350,7 +326,7 @@ enabled "$DEBUG" && echo "$msg"
if [[ "$ARCH" != "amd64" ]]; then if [[ "$ARCH" != "amd64" ]]; then
if [[ "${VGA_DEVICE,,}" == "vmware-svga" ]]; then if [[ "${VGA_DEVICE,,}" == "vmware-svga" ]]; then
vmwareGpuSetupFailure "GPU acceleration is only supported for the AMD64 platform" gpuSetupFailure "GPU acceleration is only supported for the AMD64 platform"
fi fi
gpuSetupFailure "GPU acceleration is only supported for the AMD64 platform" gpuSetupFailure "GPU acceleration is only supported for the AMD64 platform"
return 0 return 0
@@ -460,29 +436,6 @@ intelMesaReady() {
return 0 return 0
} }
# Venus requires a Vulkan userspace driver in addition to the normal EGL/GBM
# rendering path. Keep this separate so normal VirGL/OpenGL does not require Vulkan.
venusEnabled() {
[[ ",${VGA,,}," =~ ,venus=(on|true|yes|1), ]]
}
disableVenus() {
VGA="$(sed -E 's/,venus=(on|true|yes|1)(,|$)/\2/I' <<< "$VGA")"
}
drmNativeEnabled() {
[[ ",${VGA,,}," =~ ,drm_native_context=(on|true|yes|1), ]]
}
disableDrmNative() {
VGA="$(sed -E 's/,drm_native_context=(on|true|yes|1)(,|$)/\2/I' <<< "$VGA")"
}
vulkanLibraryAvailable() { vulkanLibraryAvailable() {
local library="$1" local library="$1"
@@ -680,7 +633,7 @@ vulkanRuntimeReady() {
return 1 return 1
fi fi
if [[ "${APP,,}" == "windows" && "$external_memory_dma_buf" != "1" ]]; then if [[ "$external_memory_dma_buf" != "1" ]]; then
VULKAN_REASON="the selected GPU does not support VK_EXT_external_memory_dma_buf required by Helios" VULKAN_REASON="the selected GPU does not support VK_EXT_external_memory_dma_buf required by Helios"
return 1 return 1
fi fi
@@ -868,69 +821,11 @@ nvidiaGpuReady() {
return 0 return 0
} }
modernVirtioGpuGuest() {
case "${APP,,}" in
"macos" ) return 1 ;;
esac
return 0
}
drmNativeGpuGuest() {
case "${APP,,}" in
"qemu" ) return 0 ;;
esac
return 1
}
hostBlobsSupported() { hostBlobsSupported() {
kernelAtLeast 6 13 kernelAtLeast 6 13
} }
# qemu-render builds the AMDGPU and i915 native-context backends. Host support
# can be validated here; arbitrary guest kernel/Mesa support is negotiated later.
drmNativeReady() {
DRM_REASON=""
if [[ "${APP,,}" == "windows" ]]; then
DRM_REASON="DRM native contexts require a Linux guest"
return 1
fi
if ! hostBlobsSupported; then
DRM_REASON="Linux 6.13 or newer is required for DRM native contexts"
return 1
fi
if ! [[ ",${VGA,,}," =~ ,blob=(on|true|yes|1), ]]; then
DRM_REASON="virtio-gpu host blobs are not enabled"
return 1
fi
case "$GPU_VENDOR" in
"0x1002" )
if [[ "$GPU_DRIVER" != "amdgpu" ]]; then
DRM_REASON="the AMD GPU is using '$GPU_DRIVER' instead of the amdgpu DRM driver"
return 1
fi ;;
"0x8086" )
if [[ "$GPU_DRIVER" != "i915" ]]; then
DRM_REASON="the Intel GPU is using '$GPU_DRIVER' instead of the i915 DRM driver"
return 1
fi ;;
* )
DRM_REASON="no native DRM renderer is available for this GPU"
return 1 ;;
esac
return 0
}
venusGuestPatRequired() { venusGuestPatRequired() {
local cpu_vendor driver device="" local cpu_vendor driver device=""
@@ -983,14 +878,10 @@ venusGuestPatReady() {
} }
GPU_VENDOR="" GPU_VENDOR=""
DRM_REASON=""
NVIDIA_NODE="" NVIDIA_NODE=""
NVIDIA_REASON="" NVIDIA_REASON=""
VULKAN_REASON="" VULKAN_REASON=""
VULKAN_PAT_REASON="" VULKAN_PAT_REASON=""
VULKAN_STATE_REASON=""
OPENGL_46_REASON=""
DRM_STATE_REASON=""
VIRTGPU_GUEST_PAT="" VIRTGPU_GUEST_PAT=""
if [ -n "$RENDERNODE" ]; then if [ -n "$RENDERNODE" ]; then
@@ -1130,88 +1021,29 @@ if ! gpuNodeVendor "$RENDERNODE"; then
return 0 return 0
fi fi
if venusEnabled; then if ! hostBlobsSupported; then
gpuSetupFailure "Windows GPU acceleration requires virtio-gpu host blobs (Linux 6.13+ host kernel)"
fi
case "$GPU_VENDOR" in VGA+=",hostmem=$VRAM_BYTES,max_hostmem=$VRAM_BYTES,blob=true"
VGA+=",host3d_blob_limit=$VRAM_BYTES"
case "$GPU_VENDOR" in
"0x8086" | "0x1002" ) "0x8086" | "0x1002" )
if ! mesaVulkanReady "$GPU_VENDOR"; then if ! mesaVulkanReady "$GPU_VENDOR"; then
VULKAN_STATE_REASON="$VULKAN_REASON" gpuSetupFailure "Windows GPU acceleration requires Vulkan via Venus, but $VULKAN_REASON"
disableVenus
fi ;; fi ;;
"0x10de" ) "0x10de" )
if ! nvidiaVulkanReady; then if ! nvidiaVulkanReady; then
VULKAN_STATE_REASON="$NVIDIA_REASON" gpuSetupFailure "Windows GPU acceleration requires Vulkan via Venus, but $NVIDIA_REASON"
disableVenus
fi ;; fi ;;
esac esac
if venusEnabled && ! venusGuestPatReady; then
VULKAN_STATE_REASON="$VULKAN_PAT_REASON"
disableVenus
fi
if ! venusGuestPatReady; then
gpuSetupFailure "Windows GPU acceleration requires Vulkan via Venus, but $VULKAN_PAT_REASON"
fi fi
if modernVirtioGpuGuest; then VGA+=",venus=true"
if hostBlobsSupported; then
VGA+=",hostmem=$VRAM_BYTES,max_hostmem=$VRAM_BYTES,blob=true"
VGA+=",host3d_blob_limit=$VRAM_BYTES"
if drmNativeGpuGuest; then
VGA+=",drm_native_context=on"
fi
case "$GPU_VENDOR" in
"0x8086" | "0x1002" )
if ! mesaVulkanReady "$GPU_VENDOR"; then
VULKAN_STATE_REASON="$VULKAN_REASON"
elif ! venusGuestPatReady; then
VULKAN_STATE_REASON="$VULKAN_PAT_REASON"
else
VGA+=",venus=true"
fi ;;
"0x10de" )
if ! nvidiaVulkanReady; then
VULKAN_STATE_REASON="$NVIDIA_REASON"
elif ! venusGuestPatReady; then
VULKAN_STATE_REASON="$VULKAN_PAT_REASON"
else
VGA+=",venus=true"
fi ;;
esac
else
OPENGL_46_REASON="requires virtio-gpu host blobs (Linux 6.13+ host kernel)"
VULKAN_STATE_REASON="requires virtio-gpu host blobs (Linux 6.13+ host kernel)"
if drmNativeGpuGuest; then
DRM_STATE_REASON="requires virtio-gpu host blobs (Linux 6.13+ host kernel)"
fi
fi
fi
if [[ "${APP,,}" == "windows" ]] && ! venusEnabled; then
error "Windows GPU acceleration requires Vulkan via Venus, but Venus could not be enabled${VULKAN_STATE_REASON:+: $VULKAN_STATE_REASON}."
exit 87
fi
if drmNativeEnabled && ! drmNativeReady; then
DRM_STATE_REASON="$DRM_REASON"
disableDrmNative
fi
OPENGL_46=" "
[[ ",${VGA,,}," =~ ,blob=(on|true|yes|1), ]] && OPENGL_46=" ✓ "
VULKAN_STATE=" "
venusEnabled && VULKAN_STATE=" ✓ "
DRM_STATE=" "
drmNativeEnabled && DRM_STATE=" ✓ "
echo echo
info "Hardware rendering enabled:" info "Hardware rendering enabled:"
@@ -1237,15 +1069,8 @@ fi
info "Render: $RENDERNODE" info "Render: $RENDERNODE"
info info
info "Vulkan: [ ✓ ]"
if modernVirtioGpuGuest; then info "Backend: Venus"
info "Vulkan: [$VULKAN_STATE]${VULKAN_STATE_REASON:+ $VULKAN_STATE_REASON}"
if drmNativeGpuGuest; then
info "DRM Native: [$DRM_STATE]${DRM_STATE_REASON:+ $DRM_STATE_REASON}"
fi
info "OpenGL 4.3: [ ✓ ]"
info "OpenGL 4.6: [$OPENGL_46]${OPENGL_46_REASON:+ $OPENGL_46_REASON}"
fi
DISPLAY_OPTS="-display egl-headless,rendernode=$RENDERNODE" DISPLAY_OPTS="-display egl-headless,rendernode=$RENDERNODE"
DISPLAY_OPTS+=" -device $VGA" DISPLAY_OPTS+=" -device $VGA"