Der AMD Open Source Driver für Vulkan® ist ein Open-Source-Vulkan-Treiber für Radeon™-Grafikadapter unter Linux®. Es basiert auf der Platform Abstraction Library (PAL) von AMD, einer gemeinsam genutzten Komponente, die bestimmte hardware- und betriebssystemspezifische Programmierdetails für viele 3D- und Computertreiber von AMD kapseln soll. Die Nutzung von PAL kann dazu beitragen, ein konsistentes Erlebnis auf allen Plattformen zu bieten, einschließlich der Unterstützung kürzlich veröffentlichter GPUs und der Kompatibilität mit AMD-Entwicklertools.
Shader, aus denen ein bestimmtes VkPipeline
-Objekt besteht, werden mithilfe der LLVM-Based Pipeline Compiler (LLPC)-Bibliothek als einzelne Einheit kompiliert. LLPC baut auf der vorhandenen Shader-Kompilierungsinfrastruktur von LLVM für AMD-GPUs auf, um Codeobjekte zu generieren, die mit der Pipeline-ABI von PAL kompatibel sind. Bemerkenswert ist, dass AMDs Closed-Source-Vulkan-Treiber derzeit einen anderen Pipeline-Compiler verwendet, was den Hauptunterschied zwischen AMDs Open-Source- und Closed-Source-Vulkan-Treibern darstellt.
Der AMD Open Source-Treiber für Vulkan ist für die Unterstützung der folgenden AMD-GPUs konzipiert:
Hinweis Für GPUs vor GFX10 verwenden Sie bitte v-2023.Q3.3 oder eine ältere Version.
Der AMD Open Source-Treiber für Vulkan ist so konzipiert, dass er die folgenden Distributionen und Versionen sowohl auf dem AMDGPU-Upstream-Treiber-Stack als auch auf dem AMDGPU Pro-Treiber-Stack unterstützt:
Der Treiber wurde in anderen Distributionen und Versionen nicht ausreichend getestet. Sie können es auf anderen Distributionen und Versionen Ihrer Wahl ausprobieren.
Hinweis Um den Vulkan-Treiber mit dem AMDGPU-Upstream-Treiberstapel auf GPUs der SI- und CI-Generation auszuführen, müssen amdgpu.si_support und amdgpu.cik_support im Kernel aktiviert sein
Der AMD Open Source-Treiber für Vulkan soll die folgenden Funktionen unterstützen:
Die folgenden Funktionen und Verbesserungen sind in zukünftigen Versionen geplant (Informationen zur Aktualisierung jeder Version finden Sie in den Versionshinweisen):
uname -r
uname -r
oder sudo mkinitcpio --generate /boot/initrd .img- uname -r
uname -r
)Sie können gerne Codebeiträge zum AMD Open Source Driver für Vulkan einreichen.
Der Treiber wird aus Quellcode in fünf Repositorys erstellt: LLVM, XGL, LLPC, GPURT und PAL.
Für Änderungen an LLVM sollten Sie einen Beitrag zum LLVM-Trunk einreichen. Dort werden Commits ausgewertet, um sie regelmäßig in den amd-gfx-gpuopen-master-Zweig einzufügen.
Für Änderungen an XGL, LLPC, GPURT und PAL erstellen Sie bitte eine Pull-Anfrage für den Entwicklungszweig . Nachdem Ihre Änderung überprüft und akzeptiert wurde, wird sie ausgewertet, um im Rahmen einer anschließenden regulären Promotion in den Master-Zweig aufgenommen zu werden.
WICHTIG : Durch das Erstellen einer Pull-Anfrage erklären Sie sich damit einverstanden, dass Ihr Beitrag von den Projektinhabern gemäß den Bedingungen der MIT-Lizenz lizenziert wird.
Wenn Sie zu XGL, LLPC, GPURT und PAL beitragen, sollte Ihr Code:
Bitte machen Sie jeden Beitrag einigermaßen klein. Wenn Sie einen großen Beitrag leisten möchten, beispielsweise eine neue Funktion oder Erweiterung, äußern Sie bitte zuerst ein Problem, damit die Planung Ihre Arbeit bewerten und überprüfen kann.
Hinweis Da es sich bei PAL um eine gemeinsam genutzte Komponente handelt, die andere APIs, andere Betriebssysteme und Vorproduktionshardware unterstützen muss, werden Sie möglicherweise aus Gründen, die aus der Perspektive eines reinen Linux Vulkan-Treibers nicht offensichtlich sind, aufgefordert, Ihre PAL-Änderung zu überarbeiten.
Es wird empfohlen, mindestens 16 GB RAM in Ihrem Build-System zu installieren.
sudo apt-get install build-essential cmake curl g++-multilib gcc-multilib git ninja-build pkg-config python3 python3-jinja2 python3-ruamel.yaml
sudo apt-get install libssl-dev libx11-dev libxcb1-dev x11proto-dri2-dev libxcb-dri3-dev libxcb-dri2-0-dev libxcb-present-dev libxshmfence-dev libxrandr-dev libwayland-dev
dpkg --add-architecture i386
sudo apt-get install libssl-dev:i386 libx11-dev:i386 libxcb1-dev:i386 libxcb-dri3-dev:i386 libxcb-dri2-0-dev:i386 libxcb-present-dev:i386 libxshmfence-dev:i386 libwayland-dev libwayland-dev:i386 libxrandr-dev:i386
sudo yum -y install openssl-devel gcc-c++ python3 python3-pip curl glibc-devel libstdc++-devel libxcb-devel libX11-devel libxshmfence-devel libXrandr-devel wayland-devel
pip3 install jinja2 ruamel.yaml
sudo yum -y install openssl-devel.i686 gcc-c++ python3 python3-pip curl glibc-devel.i686 libstdc++-devel.i686 libxcb-devel.i686 libX11-devel.i686 libxshmfence-devel.i686 libXrandr-devel.i686 wayland-devel.i686
pip3 install jinja2 ruamel.yaml
Shader-Compiler-Tools wie DirectXShaderCompiler und glslang müssen installiert sein, um Raytracing-Unterstützung aufzubauen.
Es wird empfohlen, sie ab VulkanSDK 1.3.290 oder höher zu installieren.
Ubuntu 22.04 (Jammy)
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list
sudo apt update
sudo apt install vulkan-sdk
Holen Sie sich DirectXShaderCompiler und glslang-Quellcode und erstellen Sie Tools lokal.
#!/bin/bash
if [ ! -d DirectXShaderCompiler ]; then
git clone --depth=1 -b release-1.8.2403 https://github.com/microsoft/DirectXShaderCompiler.git
fi
if [ ! -d glslang ]; then
git clone --depth=1 -b vulkan-sdk-1.3.290.0 https://github.com/KhronosGroup/glslang.git
fi
cd DirectXShaderCompiler
git submodule init
git submodule update
cmake -H. -Bbuilds -GNinja -DCMAKE_BUILD_TYPE=Release -C ./cmake/caches/PredefinedParams.cmake
cmake --build builds
cd ..
cd glslang
cmake -H. -Bbuilds -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX='builds/install'
cd builds
make -j8 install
cd ../../
Legen Sie env PATH und LD_LIBRARY_PATH fest, bevor Sie den amdvlk-Treiber erstellen.
export PATH=/builds/bin:/install/bin:$PATH
export LD_LIBRARY_PATH=/builds/lib:$LD_LIBRARY_PATH
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:"$PATH"
mkdir vulkandriver
cd vulkandriver
repo init -u https://github.com/GPUOpen-Drivers/AMDVLK.git -b master
repo sync
Hinweis Der Quellcode im Entwicklungszweig kann durch die Verwendung von „-b dev“ im Befehl „repo init“ abgerufen werden.
cmake -G Ninja -S xgl -B builds/Release64
cmake --build builds/Release64
cmake -G Ninja -S xgl -B builds/Release32 -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32
cmake --build builds/Release32
Notiz
- Verwenden Sie für den Debug-Build
-DCMAKE_BUILD_TYPE=Debug -DLLVM_PARALLEL_LINK_JOBS=2
(Das Verknüpfen eines Debug-Builds von llvm ist sehr speicherintensiv, daher verwenden wir nur zwei parallele Jobs).- Wenn Sie Tools (z. B. amdllpc) zusammen mit dem Treiber erstellen möchten, fügen Sie
-m build_with_tools.xml
in Repo-Init hinzu und fügen Sie die Build-Option-DXGL_BUILD_TOOLS=ON
hinzu.
Sie können das SDK-Paket hier herunterladen und installieren.
sudo apt install libssl3
sudo yum install openssl-libs
sudo cmake --install builds/Release64 --component icd
sudo cmake --install builds/Release32 --component icd
Wenn Sie den Treiber in einem benutzerdefinierten Verzeichnis installieren möchten, können Sie „-DCMAKE_INSTALL_PREFIX={Installationsverzeichnis}“ im cmake-Build-Befehl hinzufügen. JSON-Dateien werden in /etc/vulkan/icd.d installiert, während andere Dateien in dem von Ihnen angegebenen Installationsverzeichnis installiert werden.
Wenn RADV ebenfalls im System installiert ist, wird der AMDVLK-Treiber nach der Installation standardmäßig aktiviert. Sie können den Treiber zwischen AMDVLK und RADV umschalten, indem Sie die Umgebungsvariable AMD_VULKAN_ICD = AMDVLK oder RADV verwenden.
Hinweis: Die verbleibenden Schritte sind nur erforderlich, wenn der AMDGPU-Upstream-Treiberstapel ausgeführt wird.
Fügen Sie die folgenden Zeilen in /usr/share/X11/xorg.conf.d/10-amdgpu.conf hinzu:
Section "Device"
Identifier "AMDgpu"
Option "DRI" "3"
EndSection
Und stellen Sie sicher, dass die folgende Zeile NICHT im Abschnitt enthalten ist:
Driver "modesetting"
Auf dem AMDGPU-Upstream-Treiberstapel mit einer libdrm-Version vor 2.4.92 MUSS die maximale Anzahl von IB pro Übermittlung auf 4 begrenzt sein (die Standardeinstellung im AMD Open Source-Treiber für Vulkan ist 16). Dies kann über den Laufzeiteinstellungsmechanismus erreicht werden, indem die folgende Zeile zu amdPalSettings.cfg hinzugefügt wird:
MaxNumCmdStreamsPerSubmit,4
CommandBufferCombineDePreambles,1
Sie können das Installationspaket mit dem folgenden Befehl generieren, während Sie den Treiber erstellen:
cmake -G Ninja -S xgl -B builds/Release64 [-DPACKAGE_VERSION=package version]
cmake --build builds/Release64 --target makePackage
cmake -G Ninja -S xgl -B builds/Release64 [-DPACKAGE_VERSION=package version]
cmake --build builds/Release64 --target makePackage
Sie können auch ein vorgefertigtes Paket von https://github.com/GPUOpen-Drivers/AMDVLK/releases für jede Code-Promotion im Master-Zweig herunterladen.
Nachfolgend finden Sie die Installationsanleitung:
sudo dpkg -r amdvlk # If old version is installed on the machine, remove it first
sudo dpkg -i amdvlk_x.x.x_amd64.deb
sudo apt-get -f install
sudo rpm -e amdvlk # If old version is installed on the machine, remove it first
sudo rpm -i amdvlk-x.x.x.x86_64.rpm
Für Ubuntu können Sie auch den neuesten Treiber-Build von https://repo.radeon.com installieren:
sudo wget -qO - http://repo.radeon.com/amdvlk/apt/debian/amdvlk.gpg.key | sudo apt-key add -
sudo sh -c 'echo deb [arch=amd64,i386] http://repo.radeon.com/amdvlk/apt/debian/ bionic main > /etc/apt/sources.list.d/amdvlk.list'
sudo apt-get remove amdvlk # If old version is installed on the machine, remove it first
sudo apt update
sudo apt-get install amdvlk
Der Treiber stellt viele Einstellungen zur Verfügung, die das Verhalten des Treibers anpassen und das Debuggen erleichtern können. Sie können Einstellungen in der Datei amdVulkanSettings.cfg oder amdPalSettings.cfg unter einem der folgenden Pfade hinzufügen/bearbeiten, formatiert mit einem name,value
Paar pro Zeile:
Nachfolgend sind einige Beispieleinstellungen aufgeführt:
Einstellungsname | Gültige Werte | Kommentar |
---|---|---|
AllowVkPipelineCachingToDisk | 0: nicht zulassen 1: Standard | 1 ist der Standardwert, der das auf Archivdateien basierende Caching von Pal ermöglicht. Die Archivdatei wird unter ~/.cache/AMD/VkCache gespeichert. |
ShaderCacheMode | 0: Cache deaktivieren 1: Laufzeitcache 2: Cache auf Festplatte | Der Laufzeitcache ist der Standardmodus. Für „Cache to Disk“ wird die Cache-Datei unter $AMD_SHADER_DISK_CACHE_PATH/AMD/LlpcCache oder $XDG_CACHE_HOME/AMD/LlpcCache oder $HOME/.cache/AMD/LlpcCache generiert |
IFH | 0: Standard 1: Alle Einreichungen löschen | Unendlich schnelle Hardware. Submit-Aufrufe werden verworfen, bevor sie an die Hardware gesendet werden. Nützlich zum Messen der CPU-begrenzten Leistung. |
EnableVmAlwaysValid | 0: deaktivieren 1: Standard 2: Aktivierung erzwingen | 1 ist die Standardeinstellung, die die VM-Always-Valid-Funktion für Kernel 4.16 und höher aktiviert. Die Funktion kann den Overhead für die Übermittlung von Befehlspuffern im Zusammenhang mit der Verwaltung des virtuellen Speichers reduzieren. |
IdleAfterSubmitGpuMask | Bitmaske der GPUs (d. h. Bit 0 ist GPU0 usw.) | Zwingt die CPU, sofort auf den Abschluss jeder GPU-Übermittlung auf dem angegebenen GPU-Satz zu warten. |
Alle verfügbaren Einstellungen können ermittelt werden, indem Sie die folgenden Quelldateien untersuchen, die sie definieren.
Laufzeiteinstellungen werden nur bei der Geräteinitialisierung gelesen und können nicht ohne Neustart der Anwendung geändert werden. Bei der Ausführung auf einem System mit mehreren GPUs gelten für alle dieselben Einstellungen. Zeilen in der Einstellungsdatei, die mit ;
beginnen werden als Kommentare behandelt.
Die in der Entwicklung befindlichen Erweiterungen sind im Treiber standardmäßig nicht aktiviert. Sie können sie über die Umgebungsvariable aktivieren:
export AMDVLK_ENABLE_DEVELOPING_EXT=" [...]"
oder
export AMDVLK_ENABLE_DEVELOPING_EXT="all"
Beim Erweiterungsnamen wird die Groß-/Kleinschreibung nicht beachtet.
Der GpuProfiler ist eine optionale Schicht, die die PAL-Schnittstelle abfangen soll, um grundlegende GPU-Profiling-Unterstützung bereitzustellen. Derzeit wird diese Ebene ausschließlich über Laufzeiteinstellungen gesteuert und gibt ihre Ergebnisse in eine Datei aus.
Sie können die folgenden Laufzeiteinstellungen verwenden, um CSV-Dateien mit GPU-Timings der während der angegebenen Frames einer Anwendung ausgeführten Arbeit zu generieren (eine Datei für jeden Frame):
Einstellungsname | Wert | Kommentar |
---|---|---|
GpuProfilerMode | 0: deaktivieren 1: Aktivieren mit deaktiviertem sqtt 2: Mit sqtt für Thread-Trace aktivieren 3: Mit sqtt für RGP aktivieren | Aktiviert und legt den SQTT-Modus für die GPU-Performance-Profiler-Ebene fest. Die tatsächliche Erfassung der Leistungsdaten muss über die Frame-Nummer mit GpuProfilerConfig_StartFrame oder durch Drücken von Umschalt-F11 angegeben werden. |
GpuProfilerConfig.LogDirectory | | Der Verzeichnispfad ist relativ zu $AMD_DEBUG_DIR oder $TMPDIR oder /var/tmp/, der Standardwert ist „amdpal/“. Ihre Anwendung muss über Schreibberechtigungen für das Verzeichnis verfügen. Die Profilierungsprotokolle werden in ein Unterverzeichnis ausgegeben, das im folgenden Format benannt ist: |
GpuProfilerConfig.Granularity | 0: pro Zug 1: pro cmdbuf | Definiert, was gemessen/profiliert wird. Pro-Zeichnung misst einzelne Befehle (z. B. Zeichnen, Versenden usw.) innerhalb von Befehlspuffern, während pro-cmdbuf nur die gesamten Befehlspuffer insgesamt profiliert werden. |
GpuProfilerConfig.StartFrame | Positive ganze Zahl | Erster Frame, für den Daten erfasst werden sollen. Wenn StartFrame und FrameCount nicht festgelegt sind, werden alle Frames profiliert. |
GpuProfilerConfig.FrameCount | Positive ganze Zahl | Anzahl der Frames, für die Daten erfasst werden sollen. |
GpuProfilerConfig.RecordPipelineStats | 0, 1 | Sammelt Pipeline-Statistikabfragedaten pro Eintrag, sofern aktiviert. |
Sie können das Skript „timingReport.py“ verwenden, um das Profiling-Protokoll zu analysieren:
python timingReport.py
Die Ausgabe von timeReport.py enthält die Informationen der Top-Pipelines wie folgt:
Top Pipelines (>= 1%)
Compiler Hash | Type | Avg. Call Count | Avg. GPU Time [us] | Avg. Frame %
1. 0xd91d15e42d62dcbb | VsPs | 43 | 11,203.15 | 10.20 %
2. 0x724e9af55f2adf1b | Cs | 1 | 9,347.50 | 8.51 %
3. 0x396e5ad6f7a789f7 | VsHsDsPs | 468 | 8,401.35 | 7.65 %
Sie können amdPalSettings.cfg die folgenden Einstellungen hinzufügen, um die Informationen jeder Pipeline auszugeben:
EnablePipelineDump,1
PipelineDumpDir,
PipelineDumpDir ist ein Unterpfad relativ zu $AMD_DEBUG_DIR oder $TMPDIR oder /var/tmp/, der Standardwert ist „spvPipeline/“. Die Pipeline-Dump-Datei hat den Namen „Pipeline
Das Debug-Overlay von PAL kann aktiviert werden, um Echtzeitstatistiken und -informationen über einer laufenden Anwendung anzuzeigen. Dazu gehören ein gleitender FPS-Durchschnitt, CPU- und GPU-Framezeiten sowie ein Hauptbuch, das verfolgt, wie viel Videospeicher von jedem verfügbaren Heap zugewiesen wurde. Benchmarking (d. h. „Benchmark (F11)“) wird derzeit nicht unterstützt.
Einstellungsname | Wert | Kommentar |
---|---|---|
DebugOverlayEnabled | 0, 1 | Aktiviert das Debug-Overlay. |
DebugOverlayConfig.DebugOverlayLocation | 0: oben links 1: oben rechts 2: unten links 3: unten rechts | Legt fest, wo der Overlay-Text angezeigt werden soll. Kann verwendet werden, um Kollisionen mit wichtigen Renderings durch die Anwendung zu vermeiden. |
DebugOverlayConfig.PrintFrameNumber | 0, 1 | Meldet die aktuelle Bildnummer. Nützlich bei der Bestimmung eines guten Frame-Bereichs für die Profilerstellung mit der GpuProfiler-Ebene. |
DebugOverlayConfig.TimeGraphEnable | 0, 1 | Ermöglicht das Rendern eines Diagramms der letzten CPU- und GPU-Framezeiten. |
Der AMD Open Source-Treiber für Vulkan enthält Code, der von Dritten geschrieben wurde.
Die hierin enthaltenen Informationen dienen nur zu Informationszwecken und können ohne vorherige Ankündigung geändert werden. Dieses Dokument kann technische Ungenauigkeiten, Auslassungen und Tippfehler enthalten und AMD ist nicht verpflichtet, diese Informationen zu aktualisieren oder anderweitig zu korrigieren. Advanced Micro Devices, Inc. gibt keine Zusicherungen oder Garantien hinsichtlich der Richtigkeit oder Vollständigkeit des Inhalts dieses Dokuments und übernimmt keinerlei Haftung, einschließlich der stillschweigenden Garantien der Nichtverletzung, der Marktgängigkeit oder der Eignung für bestimmte Zwecke den Betrieb oder die Verwendung von AMD-Hardware, -Software oder anderen hier beschriebenen Produkten. Durch dieses Dokument wird keinerlei Lizenz, auch nicht stillschweigend oder durch Rechtsverwirkung, an geistigen Eigentumsrechten gewährt. Die für den Kauf oder die Nutzung von AMD-Produkten geltenden Bedingungen und Einschränkungen sind in einer unterzeichneten Vereinbarung zwischen den Parteien oder in den Allgemeinen Verkaufsbedingungen von AMD festgelegt.
AMD, das AMD Arrow-Logo, Radeon, FirePro und Kombinationen davon sind Marken von Advanced Micro Devices, Inc. Andere in dieser Veröffentlichung verwendete Produktnamen dienen nur zu Identifikationszwecken und können Marken der jeweiligen Unternehmen sein.
Vega ist ein Codename für die AMD-Architektur und kein Produktname.
Linux ist die eingetragene Marke von Linus Torvalds in den USA und anderen Ländern.
Vulkan und das Vulkan-Logo sind eingetragene Marken der Khronos Group, Inc.