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.