core: Improve GPU detection and mapping logic

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:05:51 +02:00
committed by GitHub
parent a6a608614f
commit 30f855f852
+23 -19
View File
@@ -4233,27 +4233,31 @@ $PCT_OPTIONS_STRING"
return 0 return 0
fi fi
# Check for Intel GPU - look for Intel vendor ID [8086] # Map each DRI render/card node to its owning GPU via the PCI vendor ID
if grep -q "\[8086:" <<<"$pci_vga_info"; then # exposed in sysfs (/sys/class/drm/<node>/device/vendor). This is required
msg_custom "🎮" "${BL}" "Detected Intel GPU" # on multi-GPU hosts: globbing every /dev/dri node onto the first detected
if [[ -d /dev/dri ]]; then # vendor would pass through *both* GPUs and skip the selection prompt.
for d in /dev/dri/renderD* /dev/dri/card*; do if [[ -d /dev/dri ]]; then
[[ -e "$d" ]] && INTEL_DEVICES+=("$d") for d in /dev/dri/renderD* /dev/dri/card*; do
done [[ -e "$d" ]] || continue
fi 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 fi
# Check for AMD GPU - look for AMD vendor IDs [1002] (AMD/ATI) or [1022] (AMD) [[ ${#INTEL_DEVICES[@]} -gt 0 ]] && msg_custom "🎮" "${BL}" "Detected Intel GPU"
if grep -qE "\[1002:|\[1022:" <<<"$pci_vga_info"; then [[ ${#AMD_DEVICES[@]} -gt 0 ]] && msg_custom "🎮" "${RD}" "Detected AMD GPU"
msg_custom "🎮" "${RD}" "Detected AMD GPU"
if [[ -d /dev/dri ]]; then # AMD compute (ROCm) additionally needs /dev/kfd alongside the render nodes
# Only add if not already claimed by Intel if [[ ${#AMD_DEVICES[@]} -gt 0 && -e /dev/kfd ]]; then
if [[ ${#INTEL_DEVICES[@]} -eq 0 ]]; then AMD_DEVICES+=("/dev/kfd")
for d in /dev/dri/renderD* /dev/dri/card* /dev/kfd; do
[[ -e "$d" ]] && AMD_DEVICES+=("$d")
done
fi
fi
fi fi
# Check for NVIDIA GPU - look for NVIDIA vendor ID [10de] # Check for NVIDIA GPU - look for NVIDIA vendor ID [10de]