From ae26e3c86310464073d73fd306bd1821ba443bb6 Mon Sep 17 00:00:00 2001 From: mofeng-git Date: Wed, 25 Mar 2026 20:27:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E5=9B=A0=E7=89=B9=E5=B0=94=20GPU=20=E9=A9=B1?= =?UTF-8?q?=E5=8A=A8=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/Dockerfile.runtime | 2 +- build/Dockerfile.runtime-full | 2 +- build/init.sh | 62 +++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 2 deletions(-) diff --git a/build/Dockerfile.runtime b/build/Dockerfile.runtime index 8d621904..45a7605c 100644 --- a/build/Dockerfile.runtime +++ b/build/Dockerfile.runtime @@ -26,7 +26,7 @@ RUN sed -i 's/ main$/ main contrib non-free/' /etc/apt/sources.list && \ if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \ apt-get install -y --no-install-recommends \ libva2 libva-drm2 libva-x11-2 libx11-6 libxcb1 libxau6 libxdmcp6 libmfx1 \ - i965-va-driver-shaders intel-media-va-driver-non-free; \ + i965-va-driver-shaders intel-media-va-driver-non-free vainfo; \ elif [ "$TARGETPLATFORM" = "linux/arm64" ]; then \ apt-get install -y --no-install-recommends \ libdrm2 libva2; \ diff --git a/build/Dockerfile.runtime-full b/build/Dockerfile.runtime-full index 08c0867f..27b7eab4 100644 --- a/build/Dockerfile.runtime-full +++ b/build/Dockerfile.runtime-full @@ -26,7 +26,7 @@ RUN sed -i 's/ main$/ main contrib non-free/' /etc/apt/sources.list && \ if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \ apt-get install -y --no-install-recommends \ libva2 libva-drm2 libva-x11-2 libx11-6 libxcb1 libxau6 libxdmcp6 libmfx1 \ - i965-va-driver-shaders intel-media-va-driver-non-free; \ + i965-va-driver-shaders intel-media-va-driver-non-free vainfo; \ elif [ "$TARGETPLATFORM" = "linux/arm64" ]; then \ apt-get install -y --no-install-recommends \ libdrm2 libva2; \ diff --git a/build/init.sh b/build/init.sh index 70089554..39db2768 100644 --- a/build/init.sh +++ b/build/init.sh @@ -4,6 +4,68 @@ set -e +detect_intel_libva_driver() { + if [ -n "${LIBVA_DRIVER_NAME:-}" ]; then + echo "[INFO] Using preconfigured LIBVA_DRIVER_NAME=$LIBVA_DRIVER_NAME" + return + fi + + if [ "$(uname -m)" != "x86_64" ]; then + return + fi + + local devices=() + if [ -n "${LIBVA_DEVICE:-}" ]; then + devices=("$LIBVA_DEVICE") + else + shopt -s nullglob + devices=(/dev/dri/renderD*) + shopt -u nullglob + fi + + if [ ${#devices[@]} -eq 0 ]; then + return + fi + + local device="" + local node="" + local vendor="" + local driver="" + + for device in "${devices[@]}"; do + if [ ! -e "$device" ]; then + continue + fi + + node="$(basename "$device")" + vendor="" + if [ -r "/sys/class/drm/$node/device/vendor" ]; then + vendor="$(cat "/sys/class/drm/$node/device/vendor")" + fi + + if [ -n "$vendor" ] && [ "$vendor" != "0x8086" ]; then + echo "[INFO] Skipping VA-API probe for $device (vendor=$vendor)" + continue + fi + + for driver in iHD i965; do + if LIBVA_DRIVER_NAME="$driver" vainfo --display drm --device "$device" >/dev/null 2>&1; then + export LIBVA_DRIVER_NAME="$driver" + if [ -n "$vendor" ]; then + echo "[INFO] Detected Intel VA-API driver '$driver' on $device (vendor=$vendor)" + else + echo "[INFO] Detected Intel VA-API driver '$driver' on $device" + fi + return + fi + done + done + + echo "[WARN] Unable to auto-detect an Intel VA-API driver; leaving LIBVA_DRIVER_NAME unset" +} + +detect_intel_libva_driver + # Start one-kvm with default options. # Additional options can be passed via environment variables.