core: Improve GPU detection and mapping logic (#15918)

Refactor GPU detection logic to map DRI nodes to their owning GPUs based on vendor IDs. Update messages for detected Intel and AMD GPUs.
This commit is contained in:
CanbiZ (MickLesk)
2026-07-20 11:46:33 +02:00
committed by GitHub
parent d6cd545e98
commit 9ea82fa992
+23 -19
View File
@@ -4233,27 +4233,31 @@ $PCT_OPTIONS_STRING"
return 0
fi
# Check for Intel GPU - look for Intel vendor ID [8086]
if grep -q "\[8086:" <<<"$pci_vga_info"; then
msg_custom "🎮" "${BL}" "Detected Intel GPU"
if [[ -d /dev/dri ]]; then
for d in /dev/dri/renderD* /dev/dri/card*; do
[[ -e "$d" ]] && INTEL_DEVICES+=("$d")
done
fi
# Map each DRI render/card node to its owning GPU via the PCI vendor ID
# exposed in sysfs (/sys/class/drm/<node>/device/vendor). This is required
# on multi-GPU hosts: globbing every /dev/dri node onto the first detected
# vendor would pass through *both* GPUs and skip the selection prompt.
if [[ -d /dev/dri ]]; then
for d in /dev/dri/renderD* /dev/dri/card*; do
[[ -e "$d" ]] || continue
local node vendor
node=$(basename "$d")
vendor=$(cat "/sys/class/drm/${node}/device/vendor" 2>/dev/null || true)
case "$vendor" in
0x8086) INTEL_DEVICES+=("$d") ;; # Intel
0x1002 | 0x1022) AMD_DEVICES+=("$d") ;; # AMD/ATI
0x10de) ;; # NVIDIA - handled via /dev/nvidia* below
*) msg_debug "Unmapped GPU vendor '${vendor:-unknown}' for $d" ;;
esac
done
fi
# Check for AMD GPU - look for AMD vendor IDs [1002] (AMD/ATI) or [1022] (AMD)
if grep -qE "\[1002:|\[1022:" <<<"$pci_vga_info"; then
msg_custom "🎮" "${RD}" "Detected AMD GPU"
if [[ -d /dev/dri ]]; then
# Only add if not already claimed by Intel
if [[ ${#INTEL_DEVICES[@]} -eq 0 ]]; then
for d in /dev/dri/renderD* /dev/dri/card* /dev/kfd; do
[[ -e "$d" ]] && AMD_DEVICES+=("$d")
done
fi
fi
[[ ${#INTEL_DEVICES[@]} -gt 0 ]] && msg_custom "🎮" "${BL}" "Detected Intel GPU"
[[ ${#AMD_DEVICES[@]} -gt 0 ]] && msg_custom "🎮" "${RD}" "Detected AMD GPU"
# AMD compute (ROCm) additionally needs /dev/kfd alongside the render nodes
if [[ ${#AMD_DEVICES[@]} -gt 0 && -e /dev/kfd ]]; then
AMD_DEVICES+=("/dev/kfd")
fi
# Check for NVIDIA GPU - look for NVIDIA vendor ID [10de]