Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b51b21a195 | ||
|
|
3bc5b1c37c |
Executable
+254
@@ -0,0 +1,254 @@
|
|||||||
|
#!/usr/bin/env nix-shell
|
||||||
|
#!nix-shell -i bash -p bash coreutils gnugrep gum git pciutils
|
||||||
|
#
|
||||||
|
# Based on https://wiki.debian.org/NvidiaGraphicsDrivers?action=AttachFile&do=view&target=nvidia-versions.sh
|
||||||
|
#
|
||||||
|
# Copyright © 2026 Raphaël Numbus <[email protected]>
|
||||||
|
#
|
||||||
|
# This package is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
# Avoid cryptic failure when running dash on this script
|
||||||
|
shopt -s compat31 nocasematch 2>/dev/null || { echo "Error: this script only works with bash." && exit 1; }
|
||||||
|
|
||||||
|
# Colors
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
USER_ID="$(id -u)"
|
||||||
|
PCI_IDS_LOCATION="/run/user/${USER_ID}/gpu-detect"
|
||||||
|
|
||||||
|
declare -A args=(
|
||||||
|
["brand"]="all"
|
||||||
|
["hw_accel"]="true"
|
||||||
|
)
|
||||||
|
PCI_IDS=()
|
||||||
|
|
||||||
|
show_help() {
|
||||||
|
gum style --border-foreground="030" --bold --border=normal --padding="0 2" "GPU detection tool for NixOS"
|
||||||
|
echo "Usage: gpu-detect [OPTIONS] [PCIID]..."
|
||||||
|
echo ""
|
||||||
|
echo "Options:"
|
||||||
|
echo " -b, --brand BRAND Select GPU brand to detect: all, amd, intel, nvidia (default: all)"
|
||||||
|
echo " -hw, --hw_accel BOOL Provide hardware acceleration configuration: true, false (default: true)"
|
||||||
|
echo " -h, --help Show this help message and exit"
|
||||||
|
echo ""
|
||||||
|
echo "For each GPU installed in your system (or matching the specified brand/PCI ID),"
|
||||||
|
echo "the program will provide you the needed NixOS configuration."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "${1}" in
|
||||||
|
--brand|-b)
|
||||||
|
if [[ -n "${2}" && ! "${2}" =~ ^- ]]; then
|
||||||
|
args["brand"]="${2,,}"
|
||||||
|
shift 2
|
||||||
|
else
|
||||||
|
echo -e "${RED}Error: --brand requires an argument.${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
--hw_accel|-hw)
|
||||||
|
if [[ -n "${2}" && ! "${2}" =~ ^- ]]; then
|
||||||
|
args["hw_accel"]="${2,,}"
|
||||||
|
shift 2
|
||||||
|
else
|
||||||
|
echo -e "${RED}Error: --hw_accel requires an argument.${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
--help|-h)
|
||||||
|
show_help
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
echo -e "${RED}Unknown option ${1}${NC}"
|
||||||
|
show_help
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
PCI_IDS+=("${1}")
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
gum style --border-foreground="030" --bold --border=normal --padding="0 2" "GPU detection tool for NixOS"
|
||||||
|
|
||||||
|
# Get the PCI IDs from the repo
|
||||||
|
if [[ ! -d "${PCI_IDS_LOCATION}" ]]; then
|
||||||
|
echo -e "${BLUE}Fetching latest PCI IDs database...${NC}"
|
||||||
|
mkdir -p "${PCI_IDS_LOCATION}"
|
||||||
|
if ! git clone -q -b ids-database https://gittea.dev/numbus/gpu-detect.git "${PCI_IDS_LOCATION}"; then
|
||||||
|
# Fallback to local checkout if remote is not available for testing purposes
|
||||||
|
if [[ -d "../.git" ]]; then
|
||||||
|
git clone -q -b ids-database "file://$(realpath ../)" "${PCI_IDS_LOCATION}" || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${BLUE}Updating PCI IDs database...${NC}"
|
||||||
|
if ! git -C "${PCI_IDS_LOCATION}" pull -q; then
|
||||||
|
echo -e "${RED}Error: Directory ${PCI_IDS_LOCATION} is not empty and does not contain the repository. Please check the folder and clean up manually.${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
nvidia_detect() {
|
||||||
|
local PCI_ID="${1}"
|
||||||
|
local NVIDIA_VERSION=""
|
||||||
|
|
||||||
|
local VERSIONS=("unsupported" "legacy_340" "legacy_390" "legacy_470" "legacy_580" "current")
|
||||||
|
for version in "${VERSIONS[@]}"; do
|
||||||
|
if grep -q -i "${PCI_ID}" "${PCI_IDS_LOCATION}/nvidia/${version}.ids" 2>/dev/null; then
|
||||||
|
NVIDIA_VERSION="${version}"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -z "${NVIDIA_VERSION}" ]]; then
|
||||||
|
gum style --foreground="212" "Uh oh. It seems that your card couldn't be detected." "A newer driver may add support for your card later."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${NVIDIA_VERSION}" == "unsupported" ]]; then
|
||||||
|
gum style --foreground="212" "Good news! You have nothing to do, your card runs with the 'nouveau' driver that is integrated in the kernel." "" "It seems you have a very old card! The proprietary NVIDIA drivers have been removed from Nixpkgs therefore it is not possible to install them."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local EXTRA_PACKAGES=""
|
||||||
|
local HW_ACCEL_CONFIG=""
|
||||||
|
if [[ "${args["hw_accel"]}" == "true" ]]; then
|
||||||
|
if [[ "${NVIDIA_VERSION}" == "legacy_340" || "${NVIDIA_VERSION}" == "legacy_390" || "${NVIDIA_VERSION}" == "legacy_470" ]]; then
|
||||||
|
EXTRA_PACKAGES="libvdpau"
|
||||||
|
elif [[ "${NVIDIA_VERSION}" == "legacy_580" || "${NVIDIA_VERSION}" == "current" ]]; then
|
||||||
|
EXTRA_PACKAGES="nvidia-vaapi-driver libvdpau"
|
||||||
|
fi
|
||||||
|
HW_ACCEL_CONFIG="
|
||||||
|
hardware.graphics = {
|
||||||
|
enable = true;
|
||||||
|
extraPackages = with pkgs; [ ${EXTRA_PACKAGES} ];
|
||||||
|
};"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local DRIVER_INFO=""
|
||||||
|
local NVIDIA_CONFIG=""
|
||||||
|
local NIX_PACKAGE_VER="${NVIDIA_VERSION}"
|
||||||
|
if [[ "${NVIDIA_VERSION}" == "current" ]]; then
|
||||||
|
NIX_PACKAGE_VER="stable"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${NVIDIA_VERSION}" == "current" ]]; then
|
||||||
|
DRIVER_INFO="An official stable NVIDIA driver release is available for your card."
|
||||||
|
NVIDIA_CONFIG="{ config, lib, pkgs, ... }:
|
||||||
|
{${HW_ACCEL_CONFIG}
|
||||||
|
services.xserver.videoDrivers = [ \"nvidia\" ];
|
||||||
|
hardware.nvidia = {
|
||||||
|
modesetting.enable = true;
|
||||||
|
nvidiaSettings = true;
|
||||||
|
open = true;
|
||||||
|
package = config.boot.kernelPackages.nvidiaPackages.${NIX_PACKAGE_VER};
|
||||||
|
|
||||||
|
# Advanced options, tweak if needed
|
||||||
|
powerManagement.enable = false; # Experimental: Enable this if you have graphical corruption issues or application crashes after waking up from sleep.
|
||||||
|
powerManagement.finegrained = false; # Experimental: Turns off GPU when not in use
|
||||||
|
};
|
||||||
|
}"
|
||||||
|
else
|
||||||
|
DRIVER_INFO="An official legacy NVIDIA driver release is available for your card."
|
||||||
|
NVIDIA_CONFIG="{ config, lib, pkgs, ... }:
|
||||||
|
{${HW_ACCEL_CONFIG}
|
||||||
|
services.xserver.videoDrivers = [ \"nvidia\" ];
|
||||||
|
hardware.nvidia = {
|
||||||
|
modesetting.enable = true;
|
||||||
|
nvidiaSettings = true;
|
||||||
|
package = config.boot.kernelPackages.nvidiaPackages.${NIX_PACKAGE_VER};
|
||||||
|
|
||||||
|
# Unsupported options
|
||||||
|
powerManagement.enable = false;
|
||||||
|
powerManagement.finegrained = false;
|
||||||
|
open = false;
|
||||||
|
};
|
||||||
|
}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
gum style --foreground="212" "${DRIVER_INFO}"
|
||||||
|
if [[ "${args["hw_accel"]}" == "true" ]]; then
|
||||||
|
gum style "You can add the following code snippet to your NixOS configuration in order to enable the proprietary NVIDIA driver with hardware acceleration support."
|
||||||
|
else
|
||||||
|
gum style "You can add the following code snippet to your NixOS configuration in order to enable the proprietary NVIDIA driver."
|
||||||
|
fi
|
||||||
|
|
||||||
|
gum format '```nix
|
||||||
|
'"${NVIDIA_CONFIG}"'
|
||||||
|
```'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main logic
|
||||||
|
if [[ ${#PCI_IDS[@]} -gt 0 ]]; then
|
||||||
|
for id in "${PCI_IDS[@]}" ; do
|
||||||
|
# Try to parse NVIDIA PCI ID (vendor 10de)
|
||||||
|
PCIID=$(echo "$id" | sed -rn 's/^(10de)?:?([0-9a-fA-F]{4})$/10de\2/ip')
|
||||||
|
if [ -n "$PCIID" ]; then
|
||||||
|
gum style --foreground="030" "Checking driver support for NVIDIA PCI ID [$(echo $PCIID | sed -r 's/(....)(....)/\1:\2/')]"
|
||||||
|
nvidia_detect "$PCIID"
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}Currently only NVIDIA PCI IDs (10de:XXXX) are supported when passing explicitly.${NC}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
if [[ "${args["brand"]}" == "all" || "${args["brand"]}" == "nvidia" ]]; then
|
||||||
|
NV_DEVICES=$(lspci -mn 2>/dev/null | awk '{ gsub("\"",""); if (($2 ~ "030[0-2]") && ($3 == "10de" || $3 == "12d2")) { print $1 } }')
|
||||||
|
|
||||||
|
if [ -n "$NV_DEVICES" ]; then
|
||||||
|
gum style --foreground="030" "Detected NVIDIA GPUs:"
|
||||||
|
for d in $NV_DEVICES ; do
|
||||||
|
lspci -nn -s $d
|
||||||
|
done
|
||||||
|
|
||||||
|
for d in $NV_DEVICES ; do
|
||||||
|
gum style --foreground="030" "Checking card: $(lspci -s $d | awk -F: '{print $3}')"
|
||||||
|
nvidia_detect "$(lspci -mn -s "$d" | awk '{ gsub("\"",""); print $3 $4 }')"
|
||||||
|
done
|
||||||
|
else
|
||||||
|
if [[ "${args["brand"]}" == "nvidia" ]]; then
|
||||||
|
gum style --foreground="212" "No NVIDIA GPU detected."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${args["brand"]}" == "all" || "${args["brand"]}" == "amd" ]]; then
|
||||||
|
AMD_DEVICES=$(lspci -mn 2>/dev/null | awk '{ gsub("\"",""); if (($2 ~ "030[0-2]") && ($3 == "1002")) { print $1 } }')
|
||||||
|
if [ -n "$AMD_DEVICES" ]; then
|
||||||
|
gum style --foreground="030" "Detected AMD GPUs:"
|
||||||
|
for d in $AMD_DEVICES ; do
|
||||||
|
lspci -nn -s $d
|
||||||
|
done
|
||||||
|
gum style --foreground="212" "AMD configuration generation is not fully implemented yet."
|
||||||
|
else
|
||||||
|
if [[ "${args["brand"]}" == "amd" ]]; then
|
||||||
|
gum style --foreground="212" "No AMD GPU detected."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${args["brand"]}" == "all" || "${args["brand"]}" == "intel" ]]; then
|
||||||
|
INTEL_DEVICES=$(lspci -mn 2>/dev/null | awk '{ gsub("\"",""); if (($2 ~ "030[0-2]") && ($3 == "8086")) { print $1 } }')
|
||||||
|
if [ -n "$INTEL_DEVICES" ]; then
|
||||||
|
gum style --foreground="030" "Detected Intel GPUs:"
|
||||||
|
for d in $INTEL_DEVICES ; do
|
||||||
|
lspci -nn -s $d
|
||||||
|
done
|
||||||
|
gum style --foreground="212" "Intel configuration generation is not fully implemented yet."
|
||||||
|
else
|
||||||
|
if [[ "${args["brand"]}" == "intel" ]]; then
|
||||||
|
gum style --foreground="212" "No Intel GPU detected."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
8A51
|
|
||||||
8A52
|
|
||||||
8A53
|
|
||||||
8A50
|
|
||||||
8A57
|
|
||||||
8A59
|
|
||||||
8A54
|
|
||||||
8A5A
|
|
||||||
8A5C
|
|
||||||
8A5B
|
|
||||||
8A5D
|
|
||||||
8A56
|
|
||||||
8A58
|
|
||||||
8A70
|
|
||||||
8A71
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
0042
|
|
||||||
0046
|
|
||||||
0102
|
|
||||||
0106
|
|
||||||
010A
|
|
||||||
0112
|
|
||||||
0122
|
|
||||||
0116
|
|
||||||
0126
|
|
||||||
015A
|
|
||||||
0152
|
|
||||||
0156
|
|
||||||
016A
|
|
||||||
0162
|
|
||||||
0166
|
|
||||||
0402
|
|
||||||
0406
|
|
||||||
040A
|
|
||||||
040B
|
|
||||||
040E
|
|
||||||
0C02
|
|
||||||
0C06
|
|
||||||
0C0A
|
|
||||||
0C0B
|
|
||||||
0C0E
|
|
||||||
0A02
|
|
||||||
0A06
|
|
||||||
0A0A
|
|
||||||
0A0B
|
|
||||||
0A0E
|
|
||||||
0D02
|
|
||||||
0D06
|
|
||||||
0D0A
|
|
||||||
0D0B
|
|
||||||
0D0E
|
|
||||||
0A1E
|
|
||||||
041E
|
|
||||||
0A16
|
|
||||||
041B
|
|
||||||
0C12
|
|
||||||
0C16
|
|
||||||
0C1A
|
|
||||||
0C1B
|
|
||||||
0C1E
|
|
||||||
0A12
|
|
||||||
0A1A
|
|
||||||
0A1B
|
|
||||||
0D16
|
|
||||||
0D1A
|
|
||||||
0D1B
|
|
||||||
0D1E
|
|
||||||
041A
|
|
||||||
0412
|
|
||||||
0416
|
|
||||||
0D12
|
|
||||||
0D26
|
|
||||||
0D22
|
|
||||||
0A2E
|
|
||||||
0A26
|
|
||||||
0422
|
|
||||||
0426
|
|
||||||
042A
|
|
||||||
042B
|
|
||||||
042E
|
|
||||||
0C22
|
|
||||||
0C26
|
|
||||||
0C2A
|
|
||||||
0C2B
|
|
||||||
0C2E
|
|
||||||
0A22
|
|
||||||
0A2A
|
|
||||||
0A2B
|
|
||||||
0D2A
|
|
||||||
0D2B
|
|
||||||
0D2E
|
|
||||||
0F30
|
|
||||||
0F31
|
|
||||||
0F32
|
|
||||||
0F33
|
|
||||||
0157
|
|
||||||
0155
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
22B1
|
|
||||||
22B0
|
|
||||||
22B2
|
|
||||||
22B3
|
|
||||||
1602
|
|
||||||
1606
|
|
||||||
160A
|
|
||||||
160B
|
|
||||||
160D
|
|
||||||
160E
|
|
||||||
161E
|
|
||||||
161B
|
|
||||||
161D
|
|
||||||
161A
|
|
||||||
1616
|
|
||||||
1612
|
|
||||||
162D
|
|
||||||
162E
|
|
||||||
162B
|
|
||||||
162A
|
|
||||||
1626
|
|
||||||
1622
|
|
||||||
163D
|
|
||||||
163A
|
|
||||||
1632
|
|
||||||
163E
|
|
||||||
163B
|
|
||||||
1636
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
190A
|
|
||||||
190E
|
|
||||||
1902
|
|
||||||
1906
|
|
||||||
190B
|
|
||||||
191E
|
|
||||||
191D
|
|
||||||
1916
|
|
||||||
1921
|
|
||||||
1913
|
|
||||||
1915
|
|
||||||
1917
|
|
||||||
191A
|
|
||||||
1912
|
|
||||||
191B
|
|
||||||
192D
|
|
||||||
192B
|
|
||||||
1927
|
|
||||||
1926
|
|
||||||
1923
|
|
||||||
193A
|
|
||||||
193D
|
|
||||||
1932
|
|
||||||
193B
|
|
||||||
192A
|
|
||||||
5A84
|
|
||||||
0A84
|
|
||||||
1A84
|
|
||||||
5A85
|
|
||||||
1A85
|
|
||||||
3184
|
|
||||||
3185
|
|
||||||
590A
|
|
||||||
5908
|
|
||||||
590E
|
|
||||||
5902
|
|
||||||
5906
|
|
||||||
590B
|
|
||||||
5913
|
|
||||||
5915
|
|
||||||
87C0
|
|
||||||
591C
|
|
||||||
591E
|
|
||||||
591A
|
|
||||||
591D
|
|
||||||
5916
|
|
||||||
5921
|
|
||||||
5912
|
|
||||||
591B
|
|
||||||
5917
|
|
||||||
5927
|
|
||||||
5926
|
|
||||||
5923
|
|
||||||
593B
|
|
||||||
3EA9
|
|
||||||
3EA0
|
|
||||||
3E96
|
|
||||||
3E9A
|
|
||||||
3E94
|
|
||||||
9BC6
|
|
||||||
9BE6
|
|
||||||
9BF6
|
|
||||||
3E91
|
|
||||||
3E92
|
|
||||||
3E98
|
|
||||||
3E9B
|
|
||||||
9BC5
|
|
||||||
9BC8
|
|
||||||
87CA
|
|
||||||
3EA3
|
|
||||||
9B41
|
|
||||||
9BC0
|
|
||||||
9BC2
|
|
||||||
9BC4
|
|
||||||
9BCA
|
|
||||||
9BCB
|
|
||||||
9BCC
|
|
||||||
3EA4
|
|
||||||
9B21
|
|
||||||
9BA0
|
|
||||||
9BA2
|
|
||||||
9BA4
|
|
||||||
9BAA
|
|
||||||
9BAB
|
|
||||||
9BAC
|
|
||||||
3E90
|
|
||||||
3E93
|
|
||||||
3E99
|
|
||||||
3E9C
|
|
||||||
3EA1
|
|
||||||
9BA5
|
|
||||||
9BA8
|
|
||||||
3EA2
|
|
||||||
3EA7
|
|
||||||
3EA6
|
|
||||||
3EA5
|
|
||||||
3EA8
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
3577
|
|
||||||
2562
|
|
||||||
3582
|
|
||||||
358E
|
|
||||||
2572
|
|
||||||
2582
|
|
||||||
2582
|
|
||||||
258A
|
|
||||||
2592
|
|
||||||
2772
|
|
||||||
27A2
|
|
||||||
27AE
|
|
||||||
29B2
|
|
||||||
29C2
|
|
||||||
29D2
|
|
||||||
A011
|
|
||||||
A001
|
|
||||||
2A12
|
|
||||||
2A02
|
|
||||||
2972
|
|
||||||
2992
|
|
||||||
2982
|
|
||||||
29A2
|
|
||||||
2E42
|
|
||||||
2E92
|
|
||||||
2E32
|
|
||||||
2E22
|
|
||||||
2E12
|
|
||||||
2E02
|
|
||||||
2A42
|
|
||||||
-104
@@ -1,104 +0,0 @@
|
|||||||
0bd5
|
|
||||||
0bda
|
|
||||||
4541
|
|
||||||
4551
|
|
||||||
4555
|
|
||||||
4557
|
|
||||||
4571
|
|
||||||
4626
|
|
||||||
4628
|
|
||||||
462a
|
|
||||||
4680
|
|
||||||
4682
|
|
||||||
4688
|
|
||||||
468a
|
|
||||||
468b
|
|
||||||
4690
|
|
||||||
4692
|
|
||||||
4693
|
|
||||||
46a0
|
|
||||||
46a1
|
|
||||||
46a2
|
|
||||||
46a3
|
|
||||||
46a6
|
|
||||||
46a8
|
|
||||||
46aa
|
|
||||||
46b0
|
|
||||||
46b1
|
|
||||||
46b2
|
|
||||||
46b3
|
|
||||||
46c0
|
|
||||||
46c1
|
|
||||||
46c2
|
|
||||||
46c3
|
|
||||||
46d0
|
|
||||||
46d1
|
|
||||||
46d2
|
|
||||||
46d3
|
|
||||||
46d4
|
|
||||||
4905
|
|
||||||
4907
|
|
||||||
4908
|
|
||||||
4909
|
|
||||||
4c8a
|
|
||||||
4c8b
|
|
||||||
4c90
|
|
||||||
4c9a
|
|
||||||
4e51
|
|
||||||
4e55
|
|
||||||
4e57
|
|
||||||
4e61
|
|
||||||
4e71
|
|
||||||
5690
|
|
||||||
5691
|
|
||||||
5692
|
|
||||||
5693
|
|
||||||
5694
|
|
||||||
5696
|
|
||||||
5697
|
|
||||||
56a0
|
|
||||||
56a1
|
|
||||||
56a2
|
|
||||||
56a5
|
|
||||||
56a6
|
|
||||||
56b0
|
|
||||||
56b1
|
|
||||||
56b2
|
|
||||||
56b3
|
|
||||||
56ba
|
|
||||||
56bb
|
|
||||||
56bc
|
|
||||||
56bd
|
|
||||||
56c0
|
|
||||||
56c1
|
|
||||||
7d40
|
|
||||||
7d41
|
|
||||||
7d45
|
|
||||||
7d51
|
|
||||||
7d55
|
|
||||||
7d67
|
|
||||||
7dd5
|
|
||||||
9a40
|
|
||||||
9a49
|
|
||||||
9a59
|
|
||||||
9a60
|
|
||||||
9a68
|
|
||||||
9a70
|
|
||||||
9a78
|
|
||||||
a721
|
|
||||||
a780
|
|
||||||
a781
|
|
||||||
a782
|
|
||||||
a783
|
|
||||||
a788
|
|
||||||
a789
|
|
||||||
a78a
|
|
||||||
a78b
|
|
||||||
a7a0
|
|
||||||
a7a1
|
|
||||||
a7a8
|
|
||||||
a7a9
|
|
||||||
a7aa
|
|
||||||
a7ab
|
|
||||||
a7ac
|
|
||||||
a7ad
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
6420
|
|
||||||
64a0
|
|
||||||
b080
|
|
||||||
b081
|
|
||||||
b082
|
|
||||||
b083
|
|
||||||
b084
|
|
||||||
b085
|
|
||||||
b086
|
|
||||||
b087
|
|
||||||
b090
|
|
||||||
b0a0
|
|
||||||
e20b
|
|
||||||
e20c
|
|
||||||
e211
|
|
||||||
e212
|
|
||||||
e222
|
|
||||||
e223
|
|
||||||
@@ -1,293 +0,0 @@
|
|||||||
1e02
|
|
||||||
1e04
|
|
||||||
1e07
|
|
||||||
1e09
|
|
||||||
1e30
|
|
||||||
1e36
|
|
||||||
1e78
|
|
||||||
1e81
|
|
||||||
1e82
|
|
||||||
1e84
|
|
||||||
1e87
|
|
||||||
1e89
|
|
||||||
1e90
|
|
||||||
1e91
|
|
||||||
1e93
|
|
||||||
1eb0
|
|
||||||
1eb1
|
|
||||||
1eb5
|
|
||||||
1eb6
|
|
||||||
1eb8
|
|
||||||
1ec2
|
|
||||||
1ec7
|
|
||||||
1ed0
|
|
||||||
1ed1
|
|
||||||
1ed3
|
|
||||||
1ef5
|
|
||||||
1f02
|
|
||||||
1f03
|
|
||||||
1f06
|
|
||||||
1f07
|
|
||||||
1f08
|
|
||||||
1f0a
|
|
||||||
1f0b
|
|
||||||
1f10
|
|
||||||
1f11
|
|
||||||
1f12
|
|
||||||
1f14
|
|
||||||
1f15
|
|
||||||
1f36
|
|
||||||
1f42
|
|
||||||
1f47
|
|
||||||
1f50
|
|
||||||
1f51
|
|
||||||
1f54
|
|
||||||
1f55
|
|
||||||
1f76
|
|
||||||
1f82
|
|
||||||
1f83
|
|
||||||
1f91
|
|
||||||
1f95
|
|
||||||
1f96
|
|
||||||
1f97
|
|
||||||
1f98
|
|
||||||
1f99
|
|
||||||
1f9c
|
|
||||||
1f9d
|
|
||||||
1f9f
|
|
||||||
1fa0
|
|
||||||
1fb0
|
|
||||||
1fb1
|
|
||||||
1fb2
|
|
||||||
1fb6
|
|
||||||
1fb7
|
|
||||||
1fb8
|
|
||||||
1fb9
|
|
||||||
1fba
|
|
||||||
1fbb
|
|
||||||
1fbc
|
|
||||||
1fdd
|
|
||||||
1ff0
|
|
||||||
1ff2
|
|
||||||
1ff9
|
|
||||||
20b0
|
|
||||||
20b2
|
|
||||||
20b3
|
|
||||||
20b5
|
|
||||||
20b6
|
|
||||||
20b7
|
|
||||||
20bd
|
|
||||||
20f1
|
|
||||||
20f3
|
|
||||||
20f5
|
|
||||||
20f6
|
|
||||||
20fd
|
|
||||||
2182
|
|
||||||
2184
|
|
||||||
2187
|
|
||||||
2188
|
|
||||||
2189
|
|
||||||
2191
|
|
||||||
2192
|
|
||||||
21c4
|
|
||||||
21d1
|
|
||||||
2203
|
|
||||||
2204
|
|
||||||
2206
|
|
||||||
2207
|
|
||||||
2208
|
|
||||||
220a
|
|
||||||
220d
|
|
||||||
2216
|
|
||||||
2230
|
|
||||||
2231
|
|
||||||
2232
|
|
||||||
2233
|
|
||||||
2235
|
|
||||||
2236
|
|
||||||
2237
|
|
||||||
2238
|
|
||||||
230e
|
|
||||||
2321
|
|
||||||
2322
|
|
||||||
2324
|
|
||||||
2329
|
|
||||||
232c
|
|
||||||
2330
|
|
||||||
2331
|
|
||||||
2335
|
|
||||||
2339
|
|
||||||
233a
|
|
||||||
233b
|
|
||||||
2342
|
|
||||||
2348
|
|
||||||
2414
|
|
||||||
2420
|
|
||||||
2438
|
|
||||||
2460
|
|
||||||
2482
|
|
||||||
2484
|
|
||||||
2486
|
|
||||||
2487
|
|
||||||
2488
|
|
||||||
2489
|
|
||||||
248a
|
|
||||||
249c
|
|
||||||
249d
|
|
||||||
24a0
|
|
||||||
24b0
|
|
||||||
24b1
|
|
||||||
24b6
|
|
||||||
24b7
|
|
||||||
24b8
|
|
||||||
24b9
|
|
||||||
24ba
|
|
||||||
24bb
|
|
||||||
24c7
|
|
||||||
24c9
|
|
||||||
24dc
|
|
||||||
24dd
|
|
||||||
24e0
|
|
||||||
24fa
|
|
||||||
2503
|
|
||||||
2504
|
|
||||||
2507
|
|
||||||
2508
|
|
||||||
2520
|
|
||||||
2521
|
|
||||||
2523
|
|
||||||
2531
|
|
||||||
2544
|
|
||||||
2560
|
|
||||||
2563
|
|
||||||
2571
|
|
||||||
2582
|
|
||||||
2584
|
|
||||||
25a0
|
|
||||||
25a2
|
|
||||||
25a5
|
|
||||||
25a6
|
|
||||||
25a7
|
|
||||||
25a9
|
|
||||||
25aa
|
|
||||||
25ab
|
|
||||||
25ac
|
|
||||||
25ad
|
|
||||||
25b0
|
|
||||||
25b2
|
|
||||||
25b6
|
|
||||||
25b8
|
|
||||||
25b9
|
|
||||||
25ba
|
|
||||||
25bb
|
|
||||||
25bc
|
|
||||||
25bd
|
|
||||||
25e0
|
|
||||||
25e2
|
|
||||||
25e5
|
|
||||||
25ec
|
|
||||||
25ed
|
|
||||||
25f9
|
|
||||||
25fa
|
|
||||||
25fb
|
|
||||||
2684
|
|
||||||
2685
|
|
||||||
2689
|
|
||||||
26b1
|
|
||||||
26b2
|
|
||||||
26b3
|
|
||||||
26b5
|
|
||||||
26b9
|
|
||||||
26ba
|
|
||||||
2702
|
|
||||||
2704
|
|
||||||
2705
|
|
||||||
2709
|
|
||||||
2717
|
|
||||||
2730
|
|
||||||
2757
|
|
||||||
2770
|
|
||||||
2782
|
|
||||||
2783
|
|
||||||
2786
|
|
||||||
2788
|
|
||||||
27a0
|
|
||||||
27b0
|
|
||||||
27b1
|
|
||||||
27b2
|
|
||||||
27b6
|
|
||||||
27b8
|
|
||||||
27ba
|
|
||||||
27bb
|
|
||||||
27e0
|
|
||||||
27fb
|
|
||||||
2803
|
|
||||||
2805
|
|
||||||
2808
|
|
||||||
2820
|
|
||||||
2822
|
|
||||||
2838
|
|
||||||
2860
|
|
||||||
2882
|
|
||||||
28a0
|
|
||||||
28a1
|
|
||||||
28a3
|
|
||||||
28b0
|
|
||||||
28b8
|
|
||||||
28b9
|
|
||||||
28ba
|
|
||||||
28bb
|
|
||||||
28e0
|
|
||||||
28e1
|
|
||||||
28e3
|
|
||||||
28f8
|
|
||||||
2901
|
|
||||||
2909
|
|
||||||
2941
|
|
||||||
29bb
|
|
||||||
2b85
|
|
||||||
2b87
|
|
||||||
2b8c
|
|
||||||
2bb1
|
|
||||||
2bb3
|
|
||||||
2bb4
|
|
||||||
2bb5
|
|
||||||
2bb9
|
|
||||||
2c02
|
|
||||||
2c05
|
|
||||||
2c18
|
|
||||||
2c19
|
|
||||||
2c31
|
|
||||||
2c33
|
|
||||||
2c34
|
|
||||||
2c38
|
|
||||||
2c39
|
|
||||||
2c3a
|
|
||||||
2c58
|
|
||||||
2c59
|
|
||||||
2c77
|
|
||||||
2c79
|
|
||||||
2d04
|
|
||||||
2d05
|
|
||||||
2d18
|
|
||||||
2d19
|
|
||||||
2d30
|
|
||||||
2d39
|
|
||||||
2d58
|
|
||||||
2d59
|
|
||||||
2d79
|
|
||||||
2d83
|
|
||||||
2d98
|
|
||||||
2db8
|
|
||||||
2db9
|
|
||||||
2dd8
|
|
||||||
2df9
|
|
||||||
2e12
|
|
||||||
2f04
|
|
||||||
2f06
|
|
||||||
2f18
|
|
||||||
2f38
|
|
||||||
2f58
|
|
||||||
3182
|
|
||||||
31c2
|
|
||||||
31c3
|
|
||||||
@@ -1,244 +0,0 @@
|
|||||||
0191
|
|
||||||
0193
|
|
||||||
0194
|
|
||||||
0197
|
|
||||||
019d
|
|
||||||
019e
|
|
||||||
0400
|
|
||||||
0401
|
|
||||||
0402
|
|
||||||
0403
|
|
||||||
0404
|
|
||||||
0405
|
|
||||||
0406
|
|
||||||
0407
|
|
||||||
0408
|
|
||||||
0409
|
|
||||||
040a
|
|
||||||
040b
|
|
||||||
040c
|
|
||||||
040d
|
|
||||||
040e
|
|
||||||
040f
|
|
||||||
0410
|
|
||||||
0420
|
|
||||||
0421
|
|
||||||
0422
|
|
||||||
0423
|
|
||||||
0424
|
|
||||||
0425
|
|
||||||
0426
|
|
||||||
0427
|
|
||||||
0428
|
|
||||||
0429
|
|
||||||
042a
|
|
||||||
042b
|
|
||||||
042c
|
|
||||||
042d
|
|
||||||
042e
|
|
||||||
042f
|
|
||||||
05e0
|
|
||||||
05e1
|
|
||||||
05e2
|
|
||||||
05e3
|
|
||||||
05e6
|
|
||||||
05e7
|
|
||||||
05ea
|
|
||||||
05eb
|
|
||||||
05ed
|
|
||||||
05f8
|
|
||||||
05f9
|
|
||||||
05fd
|
|
||||||
05fe
|
|
||||||
05ff
|
|
||||||
0600
|
|
||||||
0601
|
|
||||||
0602
|
|
||||||
0603
|
|
||||||
0604
|
|
||||||
0605
|
|
||||||
0606
|
|
||||||
0607
|
|
||||||
0608
|
|
||||||
0609
|
|
||||||
060a
|
|
||||||
060b
|
|
||||||
060c
|
|
||||||
060d
|
|
||||||
060f
|
|
||||||
0610
|
|
||||||
0611
|
|
||||||
0612
|
|
||||||
0613
|
|
||||||
0614
|
|
||||||
0615
|
|
||||||
0617
|
|
||||||
0618
|
|
||||||
0619
|
|
||||||
061a
|
|
||||||
061b
|
|
||||||
061c
|
|
||||||
061d
|
|
||||||
061e
|
|
||||||
061f
|
|
||||||
0621
|
|
||||||
0622
|
|
||||||
0623
|
|
||||||
0625
|
|
||||||
0626
|
|
||||||
0627
|
|
||||||
0628
|
|
||||||
062a
|
|
||||||
062b
|
|
||||||
062c
|
|
||||||
062d
|
|
||||||
062e
|
|
||||||
0630
|
|
||||||
0631
|
|
||||||
0632
|
|
||||||
0635
|
|
||||||
0637
|
|
||||||
0638
|
|
||||||
063a
|
|
||||||
0640
|
|
||||||
0641
|
|
||||||
0643
|
|
||||||
0644
|
|
||||||
0645
|
|
||||||
0646
|
|
||||||
0647
|
|
||||||
0648
|
|
||||||
0649
|
|
||||||
064a
|
|
||||||
064b
|
|
||||||
064c
|
|
||||||
0651
|
|
||||||
0652
|
|
||||||
0653
|
|
||||||
0654
|
|
||||||
0655
|
|
||||||
0656
|
|
||||||
0658
|
|
||||||
0659
|
|
||||||
065a
|
|
||||||
065b
|
|
||||||
065c
|
|
||||||
06e0
|
|
||||||
06e1
|
|
||||||
06e2
|
|
||||||
06e3
|
|
||||||
06e4
|
|
||||||
06e5
|
|
||||||
06e6
|
|
||||||
06e7
|
|
||||||
06e8
|
|
||||||
06e9
|
|
||||||
06ea
|
|
||||||
06eb
|
|
||||||
06ec
|
|
||||||
06ef
|
|
||||||
06f1
|
|
||||||
06f8
|
|
||||||
06f9
|
|
||||||
06fa
|
|
||||||
06fb
|
|
||||||
06fd
|
|
||||||
06ff
|
|
||||||
0840
|
|
||||||
0844
|
|
||||||
0845
|
|
||||||
0846
|
|
||||||
0847
|
|
||||||
0848
|
|
||||||
0849
|
|
||||||
084a
|
|
||||||
084b
|
|
||||||
084c
|
|
||||||
084d
|
|
||||||
084f
|
|
||||||
0860
|
|
||||||
0861
|
|
||||||
0862
|
|
||||||
0863
|
|
||||||
0864
|
|
||||||
0865
|
|
||||||
0866
|
|
||||||
0867
|
|
||||||
0868
|
|
||||||
0869
|
|
||||||
086a
|
|
||||||
086c
|
|
||||||
086d
|
|
||||||
086e
|
|
||||||
086f
|
|
||||||
0870
|
|
||||||
0871
|
|
||||||
0872
|
|
||||||
0873
|
|
||||||
0874
|
|
||||||
0876
|
|
||||||
087a
|
|
||||||
087d
|
|
||||||
087e
|
|
||||||
087f
|
|
||||||
08a0
|
|
||||||
08a2
|
|
||||||
08a3
|
|
||||||
08a4
|
|
||||||
08a5
|
|
||||||
0a20
|
|
||||||
0a22
|
|
||||||
0a23
|
|
||||||
0a26
|
|
||||||
0a27
|
|
||||||
0a28
|
|
||||||
0a29
|
|
||||||
0a2a
|
|
||||||
0a2b
|
|
||||||
0a2c
|
|
||||||
0a2d
|
|
||||||
0a32
|
|
||||||
0a34
|
|
||||||
0a35
|
|
||||||
0a38
|
|
||||||
0a3c
|
|
||||||
0a60
|
|
||||||
0a62
|
|
||||||
0a63
|
|
||||||
0a64
|
|
||||||
0a65
|
|
||||||
0a66
|
|
||||||
0a67
|
|
||||||
0a68
|
|
||||||
0a69
|
|
||||||
0a6a
|
|
||||||
0a6c
|
|
||||||
0a6e
|
|
||||||
0a6f
|
|
||||||
0a70
|
|
||||||
0a71
|
|
||||||
0a72
|
|
||||||
0a73
|
|
||||||
0a74
|
|
||||||
0a75
|
|
||||||
0a76
|
|
||||||
0a78
|
|
||||||
0a7a
|
|
||||||
0a7c
|
|
||||||
0ca0
|
|
||||||
0ca2
|
|
||||||
0ca3
|
|
||||||
0ca4
|
|
||||||
0ca5
|
|
||||||
0ca7
|
|
||||||
0ca8
|
|
||||||
0ca9
|
|
||||||
0cac
|
|
||||||
0caf
|
|
||||||
0cb0
|
|
||||||
0cb1
|
|
||||||
0cbc
|
|
||||||
10c0
|
|
||||||
10c3
|
|
||||||
10c5
|
|
||||||
10d8
|
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
06c0
|
|
||||||
06c4
|
|
||||||
06ca
|
|
||||||
06cd
|
|
||||||
06d1
|
|
||||||
06d2
|
|
||||||
06d8
|
|
||||||
06d9
|
|
||||||
06da
|
|
||||||
06dc
|
|
||||||
06dd
|
|
||||||
06de
|
|
||||||
06df
|
|
||||||
0dc0
|
|
||||||
0dc4
|
|
||||||
0dc5
|
|
||||||
0dc6
|
|
||||||
0dcd
|
|
||||||
0dce
|
|
||||||
0dd1
|
|
||||||
0dd2
|
|
||||||
0dd3
|
|
||||||
0dd6
|
|
||||||
0dd8
|
|
||||||
0dda
|
|
||||||
0de0
|
|
||||||
0de1
|
|
||||||
0de2
|
|
||||||
0de3
|
|
||||||
0de4
|
|
||||||
0de5
|
|
||||||
0de7
|
|
||||||
0de8
|
|
||||||
0de9
|
|
||||||
0dea
|
|
||||||
0deb
|
|
||||||
0dec
|
|
||||||
0ded
|
|
||||||
0dee
|
|
||||||
0def
|
|
||||||
0df0
|
|
||||||
0df1
|
|
||||||
0df2
|
|
||||||
0df3
|
|
||||||
0df4
|
|
||||||
0df5
|
|
||||||
0df6
|
|
||||||
0df7
|
|
||||||
0df8
|
|
||||||
0df9
|
|
||||||
0dfa
|
|
||||||
0dfc
|
|
||||||
0e22
|
|
||||||
0e23
|
|
||||||
0e24
|
|
||||||
0e30
|
|
||||||
0e31
|
|
||||||
0e3a
|
|
||||||
0e3b
|
|
||||||
0f00
|
|
||||||
0f01
|
|
||||||
0f02
|
|
||||||
0f03
|
|
||||||
1040
|
|
||||||
1042
|
|
||||||
1048
|
|
||||||
1049
|
|
||||||
104a
|
|
||||||
104b
|
|
||||||
104c
|
|
||||||
1050
|
|
||||||
1051
|
|
||||||
1052
|
|
||||||
1054
|
|
||||||
1055
|
|
||||||
1056
|
|
||||||
1057
|
|
||||||
1058
|
|
||||||
1059
|
|
||||||
105a
|
|
||||||
105b
|
|
||||||
107c
|
|
||||||
107d
|
|
||||||
1080
|
|
||||||
1081
|
|
||||||
1082
|
|
||||||
1084
|
|
||||||
1086
|
|
||||||
1087
|
|
||||||
1088
|
|
||||||
1089
|
|
||||||
108b
|
|
||||||
1091
|
|
||||||
1094
|
|
||||||
1096
|
|
||||||
109a
|
|
||||||
109b
|
|
||||||
1140
|
|
||||||
1200
|
|
||||||
1201
|
|
||||||
1203
|
|
||||||
1205
|
|
||||||
1206
|
|
||||||
1207
|
|
||||||
1208
|
|
||||||
1210
|
|
||||||
1211
|
|
||||||
1212
|
|
||||||
1213
|
|
||||||
1241
|
|
||||||
1243
|
|
||||||
1244
|
|
||||||
1245
|
|
||||||
1246
|
|
||||||
1247
|
|
||||||
1248
|
|
||||||
1249
|
|
||||||
124b
|
|
||||||
124d
|
|
||||||
1251
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
0fc6
|
|
||||||
0fc8
|
|
||||||
0fc9
|
|
||||||
0fcd
|
|
||||||
0fce
|
|
||||||
0fd1
|
|
||||||
0fd2
|
|
||||||
0fd3
|
|
||||||
0fd4
|
|
||||||
0fd5
|
|
||||||
0fd8
|
|
||||||
0fd9
|
|
||||||
0fdf
|
|
||||||
0fe0
|
|
||||||
0fe1
|
|
||||||
0fe2
|
|
||||||
0fe3
|
|
||||||
0fe4
|
|
||||||
0fe9
|
|
||||||
0fea
|
|
||||||
0fec
|
|
||||||
0fed
|
|
||||||
0fee
|
|
||||||
0ff6
|
|
||||||
0ff8
|
|
||||||
0ff9
|
|
||||||
0ffa
|
|
||||||
0ffb
|
|
||||||
0ffc
|
|
||||||
0ffd
|
|
||||||
0ffe
|
|
||||||
0fff
|
|
||||||
1001
|
|
||||||
1004
|
|
||||||
1005
|
|
||||||
1007
|
|
||||||
1008
|
|
||||||
100a
|
|
||||||
100c
|
|
||||||
1021
|
|
||||||
1022
|
|
||||||
1023
|
|
||||||
1024
|
|
||||||
1026
|
|
||||||
1027
|
|
||||||
1028
|
|
||||||
1029
|
|
||||||
102a
|
|
||||||
102d
|
|
||||||
103a
|
|
||||||
103c
|
|
||||||
1180
|
|
||||||
1183
|
|
||||||
1184
|
|
||||||
1185
|
|
||||||
1187
|
|
||||||
1188
|
|
||||||
1189
|
|
||||||
118a
|
|
||||||
118e
|
|
||||||
118f
|
|
||||||
1193
|
|
||||||
1194
|
|
||||||
1195
|
|
||||||
1198
|
|
||||||
1199
|
|
||||||
119a
|
|
||||||
119d
|
|
||||||
119e
|
|
||||||
119f
|
|
||||||
11a0
|
|
||||||
11a1
|
|
||||||
11a2
|
|
||||||
11a3
|
|
||||||
11a7
|
|
||||||
11b4
|
|
||||||
11b6
|
|
||||||
11b7
|
|
||||||
11b8
|
|
||||||
11ba
|
|
||||||
11bc
|
|
||||||
11bd
|
|
||||||
11be
|
|
||||||
11c0
|
|
||||||
11c2
|
|
||||||
11c3
|
|
||||||
11c4
|
|
||||||
11c5
|
|
||||||
11c6
|
|
||||||
11c8
|
|
||||||
11cb
|
|
||||||
11e0
|
|
||||||
11e1
|
|
||||||
11e2
|
|
||||||
11e3
|
|
||||||
11fa
|
|
||||||
11fc
|
|
||||||
1280
|
|
||||||
1281
|
|
||||||
1282
|
|
||||||
1284
|
|
||||||
1286
|
|
||||||
1287
|
|
||||||
1288
|
|
||||||
1289
|
|
||||||
128b
|
|
||||||
1290
|
|
||||||
1291
|
|
||||||
1292
|
|
||||||
1293
|
|
||||||
1295
|
|
||||||
1296
|
|
||||||
1298
|
|
||||||
1299
|
|
||||||
129a
|
|
||||||
12b9
|
|
||||||
12ba
|
|
||||||
@@ -1,162 +0,0 @@
|
|||||||
1340
|
|
||||||
1341
|
|
||||||
1344
|
|
||||||
1346
|
|
||||||
1347
|
|
||||||
1348
|
|
||||||
1349
|
|
||||||
134b
|
|
||||||
134d
|
|
||||||
134e
|
|
||||||
134f
|
|
||||||
137a
|
|
||||||
137b
|
|
||||||
137d
|
|
||||||
1380
|
|
||||||
1381
|
|
||||||
1382
|
|
||||||
1390
|
|
||||||
1391
|
|
||||||
1392
|
|
||||||
1393
|
|
||||||
1398
|
|
||||||
1399
|
|
||||||
139a
|
|
||||||
139b
|
|
||||||
139c
|
|
||||||
139d
|
|
||||||
13b0
|
|
||||||
13b1
|
|
||||||
13b2
|
|
||||||
13b3
|
|
||||||
13b4
|
|
||||||
13b6
|
|
||||||
13b9
|
|
||||||
13ba
|
|
||||||
13bb
|
|
||||||
13bc
|
|
||||||
13c0
|
|
||||||
13c2
|
|
||||||
13d7
|
|
||||||
13d8
|
|
||||||
13d9
|
|
||||||
13da
|
|
||||||
13f0
|
|
||||||
13f1
|
|
||||||
13f2
|
|
||||||
13f3
|
|
||||||
13f8
|
|
||||||
13f9
|
|
||||||
13fa
|
|
||||||
13fb
|
|
||||||
1401
|
|
||||||
1402
|
|
||||||
1406
|
|
||||||
1407
|
|
||||||
1427
|
|
||||||
1430
|
|
||||||
1431
|
|
||||||
1436
|
|
||||||
15f0
|
|
||||||
15f7
|
|
||||||
15f8
|
|
||||||
15f9
|
|
||||||
1617
|
|
||||||
1618
|
|
||||||
1619
|
|
||||||
161a
|
|
||||||
1667
|
|
||||||
174d
|
|
||||||
174e
|
|
||||||
179c
|
|
||||||
17c2
|
|
||||||
17c8
|
|
||||||
17f0
|
|
||||||
17f1
|
|
||||||
17fd
|
|
||||||
1b00
|
|
||||||
1b02
|
|
||||||
1b06
|
|
||||||
1b30
|
|
||||||
1b38
|
|
||||||
1b80
|
|
||||||
1b81
|
|
||||||
1b82
|
|
||||||
1b83
|
|
||||||
1b84
|
|
||||||
1b87
|
|
||||||
1ba0
|
|
||||||
1ba1
|
|
||||||
1ba2
|
|
||||||
1bb0
|
|
||||||
1bb1
|
|
||||||
1bb3
|
|
||||||
1bb4
|
|
||||||
1bb5
|
|
||||||
1bb6
|
|
||||||
1bb7
|
|
||||||
1bb8
|
|
||||||
1bb9
|
|
||||||
1bbb
|
|
||||||
1bc7
|
|
||||||
1be0
|
|
||||||
1be1
|
|
||||||
1c02
|
|
||||||
1c03
|
|
||||||
1c04
|
|
||||||
1c06
|
|
||||||
1c07
|
|
||||||
1c09
|
|
||||||
1c20
|
|
||||||
1c21
|
|
||||||
1c22
|
|
||||||
1c23
|
|
||||||
1c30
|
|
||||||
1c31
|
|
||||||
1c60
|
|
||||||
1c61
|
|
||||||
1c62
|
|
||||||
1c81
|
|
||||||
1c82
|
|
||||||
1c83
|
|
||||||
1c8c
|
|
||||||
1c8d
|
|
||||||
1c8f
|
|
||||||
1c90
|
|
||||||
1c91
|
|
||||||
1c92
|
|
||||||
1c94
|
|
||||||
1c96
|
|
||||||
1cb1
|
|
||||||
1cb2
|
|
||||||
1cb3
|
|
||||||
1cb6
|
|
||||||
1cba
|
|
||||||
1cbb
|
|
||||||
1cbc
|
|
||||||
1cbd
|
|
||||||
1cfa
|
|
||||||
1cfb
|
|
||||||
1d01
|
|
||||||
1d02
|
|
||||||
1d10
|
|
||||||
1d11
|
|
||||||
1d12
|
|
||||||
1d13
|
|
||||||
1d16
|
|
||||||
1d33
|
|
||||||
1d34
|
|
||||||
1d52
|
|
||||||
1d81
|
|
||||||
1db1
|
|
||||||
1db3
|
|
||||||
1db4
|
|
||||||
1db5
|
|
||||||
1db6
|
|
||||||
1db7
|
|
||||||
1db8
|
|
||||||
1dba
|
|
||||||
1df0
|
|
||||||
1df2
|
|
||||||
1df5
|
|
||||||
1df6
|
|
||||||
@@ -1,236 +0,0 @@
|
|||||||
0020
|
|
||||||
0028
|
|
||||||
0029
|
|
||||||
002c
|
|
||||||
002d
|
|
||||||
00a0
|
|
||||||
0100
|
|
||||||
0101
|
|
||||||
0103
|
|
||||||
0150
|
|
||||||
0151
|
|
||||||
0152
|
|
||||||
0153
|
|
||||||
0110
|
|
||||||
0111
|
|
||||||
0112
|
|
||||||
0113
|
|
||||||
0170
|
|
||||||
0171
|
|
||||||
0172
|
|
||||||
0173
|
|
||||||
0174
|
|
||||||
0175
|
|
||||||
0176
|
|
||||||
0177
|
|
||||||
0178
|
|
||||||
0179
|
|
||||||
017a
|
|
||||||
017c
|
|
||||||
017d
|
|
||||||
0181
|
|
||||||
0182
|
|
||||||
0183
|
|
||||||
0185
|
|
||||||
0188
|
|
||||||
018a
|
|
||||||
018b
|
|
||||||
018c
|
|
||||||
01a0
|
|
||||||
01f0
|
|
||||||
0200
|
|
||||||
0201
|
|
||||||
0202
|
|
||||||
0203
|
|
||||||
0250
|
|
||||||
0251
|
|
||||||
0253
|
|
||||||
0258
|
|
||||||
0259
|
|
||||||
025b
|
|
||||||
0280
|
|
||||||
0281
|
|
||||||
0282
|
|
||||||
0286
|
|
||||||
0288
|
|
||||||
0289
|
|
||||||
028c
|
|
||||||
00fa
|
|
||||||
00fb
|
|
||||||
00fc
|
|
||||||
00fd
|
|
||||||
00fe
|
|
||||||
0301
|
|
||||||
0302
|
|
||||||
0308
|
|
||||||
0309
|
|
||||||
0311
|
|
||||||
0312
|
|
||||||
0314
|
|
||||||
031a
|
|
||||||
031b
|
|
||||||
031c
|
|
||||||
0320
|
|
||||||
0321
|
|
||||||
0322
|
|
||||||
0323
|
|
||||||
0324
|
|
||||||
0325
|
|
||||||
0326
|
|
||||||
0327
|
|
||||||
0328
|
|
||||||
032a
|
|
||||||
032b
|
|
||||||
032c
|
|
||||||
032d
|
|
||||||
0330
|
|
||||||
0331
|
|
||||||
0332
|
|
||||||
0333
|
|
||||||
0334
|
|
||||||
0338
|
|
||||||
033f
|
|
||||||
0341
|
|
||||||
0342
|
|
||||||
0343
|
|
||||||
0344
|
|
||||||
0347
|
|
||||||
0348
|
|
||||||
034c
|
|
||||||
034e
|
|
||||||
0040
|
|
||||||
0041
|
|
||||||
0042
|
|
||||||
0043
|
|
||||||
0044
|
|
||||||
0045
|
|
||||||
0046
|
|
||||||
0047
|
|
||||||
0048
|
|
||||||
004e
|
|
||||||
0090
|
|
||||||
0091
|
|
||||||
0092
|
|
||||||
0093
|
|
||||||
0095
|
|
||||||
0098
|
|
||||||
0099
|
|
||||||
009d
|
|
||||||
00c0
|
|
||||||
00c1
|
|
||||||
00c2
|
|
||||||
00c3
|
|
||||||
00c8
|
|
||||||
00c9
|
|
||||||
00cc
|
|
||||||
00cd
|
|
||||||
00ce
|
|
||||||
00f1
|
|
||||||
00f2
|
|
||||||
00f3
|
|
||||||
00f4
|
|
||||||
00f5
|
|
||||||
00f6
|
|
||||||
00f8
|
|
||||||
00f9
|
|
||||||
0140
|
|
||||||
0141
|
|
||||||
0142
|
|
||||||
0143
|
|
||||||
0144
|
|
||||||
0145
|
|
||||||
0146
|
|
||||||
0147
|
|
||||||
0148
|
|
||||||
0149
|
|
||||||
014a
|
|
||||||
014c
|
|
||||||
014d
|
|
||||||
014e
|
|
||||||
014f
|
|
||||||
0160
|
|
||||||
0161
|
|
||||||
0162
|
|
||||||
0163
|
|
||||||
0164
|
|
||||||
0165
|
|
||||||
0166
|
|
||||||
0167
|
|
||||||
0168
|
|
||||||
0169
|
|
||||||
016a
|
|
||||||
01d0
|
|
||||||
01d1
|
|
||||||
01d2
|
|
||||||
01d3
|
|
||||||
01d6
|
|
||||||
01d7
|
|
||||||
01d8
|
|
||||||
01da
|
|
||||||
01db
|
|
||||||
01dc
|
|
||||||
01dd
|
|
||||||
01de
|
|
||||||
01df
|
|
||||||
0211
|
|
||||||
0212
|
|
||||||
0215
|
|
||||||
0218
|
|
||||||
0221
|
|
||||||
0222
|
|
||||||
0240
|
|
||||||
0241
|
|
||||||
0242
|
|
||||||
0244
|
|
||||||
0245
|
|
||||||
0247
|
|
||||||
0290
|
|
||||||
0291
|
|
||||||
0292
|
|
||||||
0293
|
|
||||||
0294
|
|
||||||
0295
|
|
||||||
0297
|
|
||||||
0298
|
|
||||||
0299
|
|
||||||
029a
|
|
||||||
029b
|
|
||||||
029c
|
|
||||||
029d
|
|
||||||
029e
|
|
||||||
029f
|
|
||||||
02e0
|
|
||||||
02e1
|
|
||||||
02e2
|
|
||||||
02e3
|
|
||||||
02e4
|
|
||||||
038b
|
|
||||||
0390
|
|
||||||
0391
|
|
||||||
0392
|
|
||||||
0393
|
|
||||||
0394
|
|
||||||
0395
|
|
||||||
0397
|
|
||||||
0398
|
|
||||||
0399
|
|
||||||
039c
|
|
||||||
039e
|
|
||||||
03d0
|
|
||||||
03d1
|
|
||||||
03d2
|
|
||||||
03d5
|
|
||||||
03d6
|
|
||||||
0531
|
|
||||||
0533
|
|
||||||
053a
|
|
||||||
053b
|
|
||||||
053e
|
|
||||||
07e0
|
|
||||||
07e1
|
|
||||||
07e2
|
|
||||||
07e3
|
|
||||||
07e5
|
|
||||||
0fef
|
|
||||||
0ff2
|
|
||||||
11bf
|
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import requests
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
|
# The target URLs. You can freely add any new Intel GPU driver documentation links here.
|
||||||
|
URLS = [
|
||||||
|
"https://dgpu-docs.intel.com/overview/supported-hardware/xe-driver-gpus.html"
|
||||||
|
]
|
||||||
|
|
||||||
|
def get_filename_from_url(url):
|
||||||
|
"""
|
||||||
|
Derives a clean .ids filename from the URL slug.
|
||||||
|
Examples:
|
||||||
|
.../legacy-gpus.html -> legacy.ids
|
||||||
|
.../i915-driver-gpus.html -> i915.ids
|
||||||
|
.../xe2-driver-gpus.html -> xe2.ids (for future updates)
|
||||||
|
"""
|
||||||
|
slug = url.split('/')[-1].replace('.html', '')
|
||||||
|
for suffix in ['-driver-gpus', '-gpus', '-driver']:
|
||||||
|
if slug.endswith(suffix):
|
||||||
|
return slug[:-len(suffix)] + '.ids'
|
||||||
|
return slug + '.ids'
|
||||||
|
|
||||||
|
def extract_pci_ids(url):
|
||||||
|
"""
|
||||||
|
Scrapes the URL, dynamically locates the PCI ID column, and extracts
|
||||||
|
unique, clean 4-digit hexadecimal PCI IDs.
|
||||||
|
"""
|
||||||
|
print(f"Scraping: {url}")
|
||||||
|
headers = {
|
||||||
|
'User-Agent': 'Mozilla/5.0 (NixOS Intel-detect Tool)'
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.get(url, headers=headers, timeout=15)
|
||||||
|
response.raise_for_status()
|
||||||
|
except requests.RequestException as e:
|
||||||
|
print(f"Error fetching {url}: {e}", file=sys.stderr)
|
||||||
|
return []
|
||||||
|
|
||||||
|
soup = BeautifulSoup(response.text, 'html.parser')
|
||||||
|
pci_ids = set()
|
||||||
|
|
||||||
|
tables = soup.find_all('table')
|
||||||
|
if not tables:
|
||||||
|
print(f"Warning: No data tables found on {url}", file=sys.stderr)
|
||||||
|
return []
|
||||||
|
|
||||||
|
for table in tables:
|
||||||
|
# 1. Inspect headers to locate the exact index of the PCI/Device ID column
|
||||||
|
thead = table.find('thead')
|
||||||
|
if thead:
|
||||||
|
headers_text = [th.get_text(strip=True).lower() for th in thead.find_all('th')]
|
||||||
|
else:
|
||||||
|
first_tr = table.find('tr')
|
||||||
|
headers_text = [th.get_text(strip=True).lower() for th in first_tr.find_all(['th', 'td'])] if first_tr else []
|
||||||
|
|
||||||
|
pci_col_idx = -1
|
||||||
|
for idx, text in enumerate(headers_text):
|
||||||
|
if any(kwd in text for kwd in ['pci', 'device id', 'dev id', 'did']):
|
||||||
|
pci_col_idx = idx
|
||||||
|
break
|
||||||
|
|
||||||
|
# Soft fallback: check if header just contains 'id'
|
||||||
|
if pci_col_idx == -1:
|
||||||
|
for idx, text in enumerate(headers_text):
|
||||||
|
if 'id' in text:
|
||||||
|
pci_col_idx = idx
|
||||||
|
break
|
||||||
|
|
||||||
|
# 2. Iterate through rows and pull data
|
||||||
|
tbody = table.find('tbody')
|
||||||
|
rows = tbody.find_all('tr') if tbody else table.find_all('tr')
|
||||||
|
|
||||||
|
for row in rows:
|
||||||
|
cells = row.find_all('td')
|
||||||
|
if not cells:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Extract strictly from the matching column if found
|
||||||
|
if pci_col_idx != -1 and pci_col_idx < len(cells):
|
||||||
|
cell_text = cells[pci_col_idx].get_text(strip=True)
|
||||||
|
# Matches standalone 4-char hex strings, ignoring optional '0x' prefix
|
||||||
|
matches = re.findall(r'\b(?:0x)?([0-9a-fA-F]{4})\b', cell_text)
|
||||||
|
for match in matches:
|
||||||
|
pci_ids.add(match.lower())
|
||||||
|
else:
|
||||||
|
# Absolute fallback: Scan all cells but guard heavily against false-positive string matches
|
||||||
|
for cell in cells:
|
||||||
|
cell_text = cell.get_text(strip=True)
|
||||||
|
matches = re.findall(r'\b(?:0x)?([0-9a-fA-F]{4})\b', cell_text)
|
||||||
|
for match in matches:
|
||||||
|
# Only accept if the cell text is short (an ID cell) or explicitly contains 0x
|
||||||
|
if len(cell_text) < 15 or '0x' in cell_text.lower():
|
||||||
|
pci_ids.add(match.lower())
|
||||||
|
|
||||||
|
return sorted(list(pci_ids))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
for url in URLS:
|
||||||
|
filename = get_filename_from_url(url)
|
||||||
|
ids = extract_pci_ids(url)
|
||||||
|
|
||||||
|
if ids:
|
||||||
|
with open(filename, 'w', encoding='utf-8') as f:
|
||||||
|
for pci_id in ids:
|
||||||
|
f.write(f"{pci_id}\n")
|
||||||
|
print(f"-> Successfully saved {len(ids)} IDs to {filename}\n")
|
||||||
|
else:
|
||||||
|
print(f"-> No IDs extracted for {url}. Skipping file write.\n")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import requests
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
|
def generate_nvidia_ids(url, output_dir="."):
|
||||||
|
print(f"Fetching NVIDIA chip manifests from: {url}")
|
||||||
|
headers = {'User-Agent': 'Mozilla/5.0 (NixOS NVIDIA-detect Tool)'}
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
response.raise_for_status()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Execution failed - unable to fetch manifest: {e}", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
soup = BeautifulSoup(response.text, 'html.parser')
|
||||||
|
driver_maps = {"current": []}
|
||||||
|
current_driver = "current"
|
||||||
|
|
||||||
|
body = soup.body if soup.body else soup
|
||||||
|
|
||||||
|
# Linear DOM traversal utilizing structural and literal textual boundaries
|
||||||
|
for element in body.descendants:
|
||||||
|
# 1. Identify text blocks capable of changing the tracking context
|
||||||
|
if element.name in ['h1', 'h2', 'h3', 'h4', 'h5', 'p', 'div']:
|
||||||
|
text = element.get_text(" ", strip=True)
|
||||||
|
|
||||||
|
# Hard reset to stable driver branch when hitting the primary section header
|
||||||
|
if "Current NVIDIA GPUs" in text:
|
||||||
|
current_driver = "current"
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Switch to legacy branch tracking when encountering driver spec strings
|
||||||
|
match = re.search(r'The\s+(\d+)(?:\.\d+)?(?:\.xx)?\s+driver\s+supports', text, re.IGNORECASE)
|
||||||
|
if match:
|
||||||
|
ver = match.group(1)
|
||||||
|
current_driver = f"legacy_{ver}"
|
||||||
|
if current_driver == "legacy_470":
|
||||||
|
break
|
||||||
|
if current_driver not in driver_maps:
|
||||||
|
driver_maps[current_driver] = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 2. Process data rows inside standard HTML tables
|
||||||
|
elif element.name == 'tr':
|
||||||
|
cells = [td.get_text(strip=True) for td in element.find_all(['td', 'th'])]
|
||||||
|
if len(cells) < 2:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Evaluate columns looking for the primary 4-digit hex PCI ID
|
||||||
|
for cell in cells[1:]:
|
||||||
|
cleaned = cell.strip()
|
||||||
|
if cleaned.lower().startswith('0x'):
|
||||||
|
cleaned = cleaned[2:]
|
||||||
|
|
||||||
|
words = cleaned.split()
|
||||||
|
if not words:
|
||||||
|
continue
|
||||||
|
|
||||||
|
first_word = words[0]
|
||||||
|
if re.match(r'^[0-9a-fA-F]{4}$', first_word):
|
||||||
|
pci_id = first_word.lower()
|
||||||
|
if pci_id not in driver_maps[current_driver]:
|
||||||
|
driver_maps[current_driver].append(pci_id)
|
||||||
|
break
|
||||||
|
|
||||||
|
# 3. Fallback processing for older/minimalist pre-formatted text layouts
|
||||||
|
elif element.name == 'pre':
|
||||||
|
for line in element.get_text().split('\n'):
|
||||||
|
line = line.strip()
|
||||||
|
if not line:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if "Current NVIDIA GPUs" in line:
|
||||||
|
current_driver = "current"
|
||||||
|
continue
|
||||||
|
|
||||||
|
match = re.search(r'The\s+(\d+)(?:\.\d+)?(?:\.xx)?\s+driver\s+supports', line, re.IGNORECASE)
|
||||||
|
if match:
|
||||||
|
ver = match.group(1)
|
||||||
|
current_driver = f"legacy_{ver}"
|
||||||
|
if current_driver not in driver_maps:
|
||||||
|
driver_maps[current_driver] = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
parts = re.split(r'[,.]', line)
|
||||||
|
if len(parts) >= 2:
|
||||||
|
val = parts[1].strip()
|
||||||
|
if val.lower().startswith('0x'):
|
||||||
|
val = val[2:]
|
||||||
|
words = val.split()
|
||||||
|
if words:
|
||||||
|
first_word = words[0]
|
||||||
|
if re.match(r'^[0-9a-fA-F]{4}$', first_word):
|
||||||
|
pci_id = first_word.lower()
|
||||||
|
if pci_id not in driver_maps[current_driver]:
|
||||||
|
driver_maps[current_driver].append(pci_id)
|
||||||
|
|
||||||
|
# Clean file generation
|
||||||
|
os.makedirs(output_dir, exist_ok=True)
|
||||||
|
for driver, ids in driver_maps.items():
|
||||||
|
if not ids:
|
||||||
|
continue
|
||||||
|
filename = os.path.join(output_dir, f"{driver}.ids")
|
||||||
|
with open(filename, "w") as f:
|
||||||
|
for pci_id in sorted(ids):
|
||||||
|
f.write(f"{pci_id}\n")
|
||||||
|
print(f"Generated {filename} containing {len(ids)} mapped PCI IDs.")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
version = "595.84"
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
version = sys.argv[1]
|
||||||
|
target_url = f"https://download.nvidia.com/XFree86/Linux-x86_64/{version}/README/supportedchips.html"
|
||||||
|
else:
|
||||||
|
print("Please provide the driver version under following format : xxx.xx, for example : 595.84")
|
||||||
|
generate_nvidia_ids(target_url)
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# Intel APIs for hardware-acceleration
|
||||||
|
|
||||||
|
### ⚠️ Warning:
|
||||||
|
|
||||||
|
CPU and iGPU generations DO NOT coincide: they are two separate things. For example, when talking about Graphics (cf. "GPU Generation" in the table below) gen11, we are not talking about Intel® Core™ 11th gen processors but rather the processors that contain gen11 graphics (see the table below).
|
||||||
|
|
||||||
|
### APIs Overview
|
||||||
|
|
||||||
|
#### VA-API (Video Acceleration API):
|
||||||
|
|
||||||
|
This is the gold standard for Intel on Linux. Every player, browser, and transcoder (FFmpeg, GStreamer, mpv, Chromium) uses VA-API to talk to Intel hardware.
|
||||||
|
|
||||||
|
#### QSV (Quick Sync Video):
|
||||||
|
|
||||||
|
This is Intel's marketing name for the hardware encoding/decoding SIP block. On Linux, QSV isn't a separate driver; it is a high-level API layer exposed through oneVPL (or legacy Media SDK) that runs on top of the VA-API infrastructure.
|
||||||
|
|
||||||
|
#### VDPAU: This is NVIDIA's legacy framework.
|
||||||
|
|
||||||
|
Intel does not support VDPAU natively. While a translation wrapper exists (libvdpau-va-gl), it is obsolete and unmaintained.
|
||||||
|
|
||||||
|
### API Compatibility
|
||||||
|
|
||||||
|
|GPU Generation|CPU Architecture(s) (iGPUs)|GPU Architecture(s) (dGPUs)|Codec Capabilities (VA-API)|Libva driver name|Module name|QSV|GuC / HuC / FBC|openCL|NixOS Config Packages|
|
||||||
|
|--|----------|--|--|--|--|--|--|--|--|
|
||||||
|
|Gen 5 to Gen 7|Westmere (Intel® Core™ **1st gen**), <br> Sandy Bridge (Intel® Core™ **2nd gen**), <br> Ivy Bridge (Intel® Core™ **3rd gen**), <br> Haswell (Intel® Core™ **4th gen**), <br> Bay Trail (Intel® **Atom™ processor E3800** product family)|None|H.264, MPEG2, VC-1 decode only. No HEVC/AV1.|i965|i915|In theory yes, but **unsupported**. [Why?](#deprecation-of-intels-media-sdk)|Unsupported|Unsupported|`intel-vaapi-driver`|
|
||||||
|
|Gen 8|Broadwell (Intel® Core™ **5th gen**), <br> Cherryview and Braswell (Intel® **Atom™**, **Celeron™** and **Pentium™** processors)|None|Limited HEVC (8-bit) decode, VP8 decode/encode.|iHD (fallback to i965 available)|i915|In theory yes, but **unsupported**. [Why?](#deprecation-of-intels-media-sdk)|GuC and HuC are unsupported. <br> Enable FBC with kernel parameter: `i915.enable_fbc=1`|`intel-compute-runtime-legacy1` on Broadwell only.|`intel-media-driver`|
|
||||||
|
|Gen 9 / 9.5|Skylake (Intel® Core™ **6th gen**), <br> Kaby Lake (Intel® Core™ **7th gen**), <br> Coffee Lake (Intel® Core™ **8th gen** and **9th gen**), Comet Lake (Intel® Core™ **10th gen**), <br> Gemini Lake (Intel® **Celeron™** and **Pentium™ Silver**), <br> Apollo Lake (Intel® **Atom™**, **Celeron™** and **Pentium™**)|None|Adds full hardware HEVC 8/10-bit decode/encode, VP9 8-bit decode/encode (Gen 9), VP9 10-bit decode (Gen 9.5).|iHD (fallback to i965 available)|i915|In theory yes, but **unsupported**. [Why?](#deprecation-of-intels-media-sdk)|Kernel parameters: <br> `i915.enable_guc=2` <br> `i915.enable_fbc=1`|`intel-compute-runtime-legacy1`|`intel-media-driver`|
|
||||||
|
|Gen 11|Ice Lake (Intel® Core™ **10th gen**), <br> Jasper Lake and Elkhart Lake (Intel® **Atom™**, **Celeron™** and **Pentium Silver™**)|None|HEVC 10-bit decode/encode, VP9 10-bit decode/encode. Still no AV1.|iHD|i915|In theory yes, but **unsupported**. [Why?](#deprecation-of-intels-media-sdk)|Kernel parameters: <br> `i915.enable_guc=2` <br> `i915.enable_fbc=1`|`intel-compute-runtime-legacy1` except on Jasper Lake.|`intel-media-driver`|
|
||||||
|
Xe (Gen 12 / Xe-LP)|Rocket Lake (Intel® Core™ **11th gen**), <br> Tiger Lake (Intel® Core™ **11th gen**), <br> Alder Lake (Intel® Core™ **12th gen**), <br> Raptor Lake (Intel® Core™ **13th** and **14th gen**), <br> Twin Lake (Intel® **N-series**)|DG1|Adds AV1 8/10-bit Decode. No AV1 Encode.|iHD|i915 (Experimental Xe probe possible)|Yes, modern oneVPL stack.|Kernel parameters: <br> `i915.enable_guc=3` <br> `i915.enable_fbc=1`|`intel-compute-runtime`|`intel-media-driver`, `vpl-gpu-rt`|
|
||||||
|
|Xe-HPG / Xe-LPG|Meteor Lake (Core Ultra **Series 1**), <br> Arrow Lake (Core Ultra **Series 2**)|Alchemist (Arc A-Series)|Adds full AV1 8/10-bit Encode alongside Decode.|iHD|i915 or Xe (Native dual support; kernels default to Xe for dGPUs)|Yes, modern oneVPL stack.|Already enabled by default.|`intel-compute-runtime`|`intel-media-driver`, `vpl-gpu-rt`|
|
||||||
|
|Xe2|Lunar Lake (Core Ultra **Series 2**)|Battlemage (Arc B-Series)|HEVC, VP9, AV1 (Decode/Encode). Adds early VVC (H.266) Decode support.|iHD|Xe|Yes, modern oneVPL stack.|Already enabled by default.|`intel-compute-runtime`|`intel-media-driver`, `vpl-gpu-rt`|
|
||||||
|
|Xe3|Panther Lake (Core Ultra **Series 3**)|None announced|Same as Xe2 with updated structural performance blocks.|iHD|Xe|Yes, modern oneVPL stack.|Already enabled by default.|`intel-compute-runtime`|`intel-media-driver`, `vpl-gpu-rt`|
|
||||||
|
|
||||||
|
### Challenges
|
||||||
|
|
||||||
|
#### Deprecation of Intel's media SDK
|
||||||
|
|
||||||
|
Intel **10th gen** processors (Ice Lake, Jasper Lake, Elkhart Lake) **and older** generations lost support for QSV (Quick Sync Video) on Linux, since the Media SDK has been deprecated by Intel. You therefore have to switch to VA-API. Please use newer hardware if you are shopping for hardware.
|
||||||
|
|
||||||
|
Know that while installing the Media SDK package might get QSV to work, the package **is considered insecure** with multiple CVEs concerning privilege escalation. Installing it is **HIGHLY DISCOURAGED**.
|
||||||
|
|
||||||
|
Please read the [deprecation notice](https://github.com/Intel-Media-SDK/MediaSDK) for more info.
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# NVIDIA APIs for hardware-acceleration
|
||||||
|
|
||||||
|
### APIs Overview
|
||||||
|
|
||||||
|
#### NVDEC
|
||||||
|
NVIDIA Video Decoder (formerly NVCUVID) is a proprietary API that enables hardware-accelerated video decoding by offloading compute-intensive video parsing and bitstream decoding from the CPU to a dedicated, fixed-function SIP core on the GPU die. It supports copying decoded frames directly into NVIDIA graphics or CUDA memory surfaces, minimizing latency for real-time video processing pipelines, AI inference data preparation, and transcoding workflows.
|
||||||
|
|
||||||
|
#### NVENC
|
||||||
|
NVIDIA Video Encoder is a proprietary, dedicated hardware block introduced with the Kepler architecture that handles video stream encoding entirely independent of the primary graphics and CUDA compute cores. By managing bitstream compression natively (supporting H.264, HEVC, and AV1 depending on generation), it guarantees minimal performance degradation during demanding rendering tasks like real-time gaming or streaming. It features configurable rate control, sub-frame latency options, and multi-stream scaling boundaries.
|
||||||
|
|
||||||
|
#### VA-API
|
||||||
|
Video Acceleration API is an open-source library and standardized API designed for Linux and Unix-like operating systems. Because NVIDIA does not natively implement VA-API in their proprietary display drivers, hardware acceleration inside standard applications that rely on it (such as Firefox or Chromium-based browsers) requires a translation layer. In the NixOS ecosystem, this is achieved via the `nvidia-vaapi-driver` wrapper, which transparently maps VA-API runtime calls down to NVIDIA's underlying proprietary NVDEC backend.
|
||||||
|
|
||||||
|
#### VDPAU
|
||||||
|
Video Decode and Presentation API for Unix is an open-source API originally developed by NVIDIA in 2008 to bring full hardware-accelerated video decoding and post-processing (deinterlacing, scaling, color correction) to Linux. While VDPAU served as the historical standard for video players like MPlayer and VLC on older architectures (Tesla through Maxwell), it lacks modern codec capabilities like HEVC or AV1. It is currently categorized as a legacy framework but remains crucial for maintaining backwards compatibility with older Linux applications.
|
||||||
|
|
||||||
|
### API Compatibility
|
||||||
|
|
||||||
|
### API Compatibility
|
||||||
|
|
||||||
|
| GPU Generation | Codec Capabilities | Supported APIs | NixOS Config Packages |
|
||||||
|
| :--- | :--- | :--- | :--- |
|
||||||
|
| **Tesla**<br>*(GeForce 8/9/200/300, NVS 300)* | **Decode:** MPEG-1, MPEG-2, VC-1/WMV9, H.264 (AVC)<br>**Encode:** None | VDPAU | **Driver:** `legacy_340` <br> **Backend:** `pkgs.libvdpau` |
|
||||||
|
| **Fermi**<br>*(GeForce 400/500)* | **Decode:** MPEG-1/2, VC-1, H.264, VP8 (selective VP5 models)<br>**Encode:** None | VDPAU, NVDEC (Early NVCUVID) | **Driver:** `legacy_390` <br>**Backend:** `pkgs.libvdpau` |
|
||||||
|
| **Kepler**<br>*(GeForce 600/700)* | **Decode:** MPEG-1/2, VC-1, H.264, VP8<br>**Encode:** H.264 (1st Gen NVENC) | VDPAU, NVDEC, NVENC | **Driver:** `legacy_470` *(600 series)* or `legacy_580` *(700 series)* <br> **Backend:** `pkgs.libvdpau` |
|
||||||
|
| **Maxwell (1st Gen)** <br> *(GeForce GTX 750/750 Ti)* | **Decode:** MPEG-1/2, VC-1, H.264, VP8 <br> **Encode:** H.264 (2nd Gen NVENC) | VDPAU, NVDEC, NVENC | **Driver:** `legacy_580` <br> **Backend:** `pkgs.libvdpau` |
|
||||||
|
| **Maxwell (2nd Gen)** <br> *(GeForce 900 series)* | **Decode:** MPEG-1/2, VC-1, H.264, HEVC/H.265 (Partial/Hybrid; Full 8/10-bit on GM206), VP9 (Hybrid) <br> **Encode:** H.264, HEVC (8-bit, 3rd Gen NVENC) | VDPAU, NVDEC, NVENC, VA-API (via wrapper) | **Driver:** `legacy_580`<br>**Backend:** `pkgs.nvidia-vaapi-driver` or legacy VDPAU `pkgs.libvdpau` |
|
||||||
|
| **Pascal** <br> *(GeForce 10 series)* | **Decode:** MPEG-2, VC-1, H.264, HEVC (8/10/12-bit), VP8, VP9 (8/10-bit) <br> **Encode:** H.264, HEVC (8/10-bit, 4th Gen NVENC) | VDPAU, NVDEC, NVENC, VA-API (via wrapper) | **Driver:** `legacy_580` <br> **Backend:** `pkgs.nvidia-vaapi-driver` or legacy VDPAU `pkgs.libvdpau` |
|
||||||
|
| **Turing / Volta**<br>*(GeForce 16/20 series, Titan V)* | **Decode:** H.264, HEVC (up to 12-bit 4:4:4), VP9 (10/12-bit) <br> **Encode:** H.264, HEVC (Adds B-Frames, 5th/6th Gen NVENC) | VDPAU, NVDEC, NVENC, VA-API (via wrapper) | **Driver:** `legacy_580` *(16 series)* or `stable` *(20 series)* <br> **Backend:** `pkgs.nvidia-vaapi-driver` or legacy VDPAU `pkgs.libvdpau` |
|
||||||
|
| **Ampere** <br> *(GeForce 30 series)* | **Decode:** Adds AV1 (up to 10-bit), H.264, HEVC, VP9 <br> **Encode:** H.264, HEVC (7th Gen NVENC) | VDPAU, NVDEC, NVENC, VA-API (via wrapper) | **Driver:** `stable` <br> **Backend:** `pkgs.nvidia-vaapi-driver` or legacy VDPAU `pkgs.libvdpau` |
|
||||||
|
| **Ada Lovelace**<br>*(GeForce 40 series)* | **Decode:** AV1, H.264, HEVC, VP9 <br> **Encode:** Adds AV1 (8th Gen NVENC, dual encoders on select models) | VDPAU, NVDEC, NVENC, VA-API (via wrapper) | **Driver:** `stable` <br> **Backend:** `pkgs.nvidia-vaapi-driver` or legacy VDPAU `pkgs.libvdpau` |
|
||||||
|
| **Blackwell** <br> *(GeForce 50 series)* | **Decode:** Adds 4:2:2 (H.264/HEVC), 2x H.264 throughput, AV1, HEVC, VP9 (6th Gen NVDEC) <br> **Encode:** Adds 4:2:2 (H.264/HEVC), AV1 UHQ Mode (9th Gen NVENC) | VDPAU, NVDEC, NVENC, VA-API (via wrapper) | **Driver:** `stable` <br> **Backend:** `pkgs.nvidia-vaapi-driver` or legacy VDPAU `pkgs.libvdpau` |
|
||||||
Reference in New Issue
Block a user