AMD Open Source Driver for Vulkan® 是適用於 Linux® 上 Radeon™ 圖形適配器的開源 Vulkan 驅動程式。它建構在 AMD 的平台抽象化庫 (PAL) 之上,這是一個共享元件,旨在封裝許多 AMD 3D 和運算驅動程式的某些硬體和作業系統特定的程式設計細節。利用 PAL 有助於提供跨平台的一致體驗,包括對最近發布的 GPU 的支援以及與 AMD 開發人員工具的兼容性。
組成特定VkPipeline
物件的著色器使用基於 LLVM 的管道編譯器 (LLPC) 程式庫編譯為單一實體。 LLPC 建構在 LLVM 現有的 AMD GPU 著色器編譯基礎設施之上,以產生與 PAL 管道 ABI 相容的程式碼物件。值得注意的是,AMD的閉源Vulkan驅動目前使用不同的管道編譯器,這是AMD開源和閉源Vulkan驅動器之間的主要區別。
適用於 Vulkan 的 AMD 開源驅動程式旨在支援以下 AMD GPU:
注意對於 GFX10 之前的 GPU,請使用 v-2023.Q3.3 或更早版本。
適用於 Vulkan 的 AMD 開源驅動程式旨在支援 AMDGPU 上游驅動程式堆疊和 AMDGPU Pro 驅動程式堆疊上的以下發行版和版本:
該驅動程式尚未在其他發行版和版本上經過良好的測試。您可以在您選擇的其他發行版和版本上嘗試。
注意要在 SI 和 CI 代 GPU 上運行具有 AMDGPU 上游驅動程式堆疊的 Vulkan 驅動程序,需要在核心中啟用 amdgpu.si_support 和 amdgpu.cik_support
適用於 Vulkan 的 AMD 開源驅動程式旨在支援以下功能:
未來版本計畫實現以下功能和改進(各版本更新請參閱版本說明):
uname -r
uname -r
或sudo mkinitcpio --generate /boot /initrd .img- uname -r
uname -r
)歡迎您向 AMD Vulkan 開源驅動程式提交程式碼貢獻。
該驅動程式是根據五個儲存庫中的原始程式碼建構的:LLVM、XGL、LLPC、GPURT 和 PAL。
對於 LLVM 的更改,您應該向 LLVM 主幹提交貢獻。那裡的提交將被定期評估並合併到 amd-gfx-gpuopen-master 分支中。
對於 XGL、LLPC、GPURT 和 PAL 的更改,請針對dev 分支建立拉取請求。您的變更經過審核並被接受後,將在後續定期升級中評估是否合併到主分支。
重要提示:透過建立拉取請求,您同意專案擁有者根據 MIT 授權條款對您的貢獻進行許可。
當貢獻 XGL、LLPC、GPURT 和 PAL 時,您的程式碼應該:
請使每項貢獻都相當小。如果您想做出重大貢獻,例如新功能或擴展,請先提出問題,以便規劃評估和審查您的工作。
注意由於 PAL 是一個共享組件,必須支援其他 API、其他作業系統和預生產硬件,因此可能會要求您修改 PAL 更改,而從純 Linux Vulkan 驅動程式的角度來看,這些原因可能並不明顯。
建議在建置系統中安裝至少 16GB RAM。
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
需要安裝 DirectXShaderCompiler 和 glslang 等著色器編譯工具來建立光線追蹤支援。
建議從 VulkanSDK 1.3.290 或更高版本安裝它們。
Ubuntu 22.04(傑米)
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
取得 DirectXShaderCompiler 和 glslang 原始碼並在本機建置工具。
#!/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 ../../
在 amdvlk 驅動程式建置之前設定 env PATH 和 LD_LIBRARY_PATH。
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
注意dev 分支中的原始程式碼可以透過在「repo init」指令中使用「-b dev」來取得。
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
筆記
- 對於調試構建,請使用
-DCMAKE_BUILD_TYPE=Debug -DLLVM_PARALLEL_LINK_JOBS=2
(連結 llvm 的調試構建非常佔用內存,因此我們僅使用兩個並行作業)。- 如果您想與驅動程式一起建立工具(例如 amdllpc),請在 repo init 中新增
-m build_with_tools.xml
並新增建置選項-DXGL_BUILD_TOOLS=ON
。
您可以在這裡下載並安裝SDK套件。
sudo apt install libssl3
sudo yum install openssl-libs
sudo cmake --install builds/Release64 --component icd
sudo cmake --install builds/Release32 --component icd
如果要將驅動程式安裝到自訂目錄,可以在cmake build指令中新增「-DCMAKE_INSTALL_PREFIX={安裝目錄}」。 JSON 檔案將安裝到 /etc/vulkan/icd.d,而其他檔案將安裝到您指定的安裝目錄。
如果系統中也安裝了RADV,則安裝後將預設啟用AMDVLK驅動程式。您可以透過環境變數 AMD_VULKAN_ICD = AMDVLK 或 RADV 在 AMDVLK 和 RADV 之間切換驅動程式。
注意:僅在執行 AMDGPU 上游驅動程式堆疊時才需要執行其餘步驟。
在 /usr/share/X11/xorg.conf.d/10-amdgpu.conf 中加入以下行:
Section "Device"
Identifier "AMDgpu"
Option "DRI" "3"
EndSection
並確保以下行不包含在該部分中:
Driver "modesetting"
在 libdrm 版本低於 2.4.92 的 AMDGPU 上游驅動程式堆疊上,每次提交的最大 IB 數量必須限制為 4(Vulkan 的 AMD 開源驅動程式中的預設值為 16)。這可以透過運行時設定機制透過將以下行新增至 amdPalSettings.cfg 來完成:
MaxNumCmdStreamsPerSubmit,4
CommandBufferCombineDePreambles,1
您可以在建立驅動程式時使用以下命令產生安裝包:
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
您也可以從 https://github.com/GPUOpen-Drivers/AMDVLK/releases 下載預先建置的軟體包,用於 master 分支中的每個程式碼升級。
下面是安裝說明:
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
對於 Ubuntu,您也可以從 https://repo.radeon.com 安裝最新的驅動程式版本:
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
該驅動程式公開了許多可以自訂驅動程式行為並促進偵錯的設定。您可以在以下路徑之一下的 amdVulkanSettings.cfg 或 amdPalSettings.cfg 檔案中新增/編輯設置,格式為每行一個name,value
對:
下面列出了一些範例設定:
設定名稱 | 有效值 | 評論 |
---|---|---|
AllowVkPipelineCachingToDisk | 0:不允許 1:預設 | 1 是預設值,它啟用 Pal 的基於存檔檔案的快取。 存檔檔案儲存在 ~/.cache/AMD/VkCache 下。 |
ShaderCacheMode | 0:禁用緩存 1:運行時緩存 2:快取到磁碟 | 運行時緩存是預設模式。對於“快取到磁碟”,快取檔案在 $AMD_SHADER_DISK_CACHE_PATH/AMD/LlpcCache 或 $XDG_CACHE_HOME/AMD/LlpcCache 或 $HOME/.cache/AMD/LlpcCache 下產生 |
IFH | 0:預設 1:刪除所有提交 | 無限快速的硬體。提交調用在發送到硬體之前被丟棄。對於測量 CPU 限制的效能很有用。 |
EnableVmAlwaysValid | 0:停用 1:預設 2:強制使能 | 1 是預設設置,可為核心 4.16 及更高版本啟用 VM-always-valid 功能。此功能可以減少與虛擬記憶體管理相關的命令緩衝區提交開銷。 |
IdleAfterSubmitGpuMask | GPU 的位元遮罩(即位元 0 是 GPU0 等) | 強制 CPU 立即等待指定 GPU 群組上的每個 GPU 提交完成。 |
所有可用的設定都可以透過檢查下面定義它們的來源檔案來確定。
運行時設定僅在設備初始化時讀取,並且在不重新啟動應用程式的情況下無法更改。如果在具有多個 GPU 的系統上執行,則相同的設定將套用於所有 GPU。設定檔中以;
開頭的行將被視為評論。
正在開發的擴充功能在驅動程式中預設不啟用。您可以透過環境變數啟用它們:
export AMDVLK_ENABLE_DEVELOPING_EXT=" [...]"
或者
export AMDVLK_ENABLE_DEVELOPING_EXT="all"
擴展名不區分大小寫。
GpuProfiler 是一個可選層,旨在攔截 PAL 介面以提供基本的 GPU 分析支援。目前,該層僅透過運行時設定進行控制,並將其結果輸出到檔案。
您可以使用以下運行時設定產生 .csv 文件,其中包含在應用程式的指定幀期間執行的工作的 GPU 計時(每一幀一個文件):
設定名稱 | 價值 | 評論 |
---|---|---|
GpuProfilerMode | 0:停用 1:啟用並關閉 sqtt 2:使用 sqtt 啟用線程追蹤 3:使用 sqtt 啟用 RGP | 啟用並設定 GPU 效能分析器圖層的 SQTT 模式。效能資料的實際擷取必須透過 GpuProfilerConfig_StartFrame 的幀號或按 Shift-F11 來指定。 |
GpuProfilerConfig.LogDirectory | <目錄路徑> | 目錄路徑相對於 $AMD_DEBUG_DIR 或 $TMPDIR 或 /var/tmp/,預設值為“amdpal/”。您的應用程式必須對該目錄具有寫入權限。分析日誌輸出到以 |
GpuProfilerConfig.Granularity | 0:每次抽獎 1:每個cmdbuf | 定義測量/分析的內容。 Per-draw計算指令緩衝區內的各個指令(例如繪圖、調度等),而per-cmdbuf僅彙總整個指令緩衝區。 |
GpuProfilerConfig.StartFrame | 正整數 | 捕獲數據的第一幀。如果未設定 StartFrame 和 FrameCount,則將分析所有幀。 |
GpuProfilerConfig.FrameCount | 正整數 | 要捕獲資料的幀數。 |
GpuProfilerConfig.RecordPipelineStats | 0, 1 | 如果啟用,則收集每個條目的管道統計查詢資料。 |
您可以使用腳本timingReport.py來分析分析日誌:
python timingReport.py
timeReport.py 的輸出包括頂級管道的信息,如下所示:
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 %
您可以在 amdPalSettings.cfg 中加入以下設定來轉儲每個管道的資訊:
EnablePipelineDump,1
PipelineDumpDir,
PipelineDumpDir 是相對於 $AMD_DEBUG_DIR 或 $TMPDIR 或 /var/tmp/ 的子路徑,預設值為「spvPipeline/」。管道轉儲檔案的命名格式類似 Pipeline
可以啟用 PAL 的調試覆蓋層以在正在運行的應用程式之上顯示即時統計資料和資訊。這包括滾動 FPS 平均值、CPU 和 GPU 幀時間,以及追蹤從每個可用堆分配了多少視訊記憶體的分類帳。目前不支援基準測試(即“基準測試 (F11)”)。
設定名稱 | 價值 | 評論 |
---|---|---|
DebugOverlayEnabled | 0, 1 | 啟用調試覆蓋。 |
DebugOverlayConfig.DebugOverlayLocation | 0:左上角 1:右上角 2:左下角 3:右下角 | 確定應顯示覆蓋文字的位置。可用於避免與應用程式的重要渲染發生衝突。 |
DebugOverlayConfig.PrintFrameNumber | 0, 1 | 報告當前影格編號。在確定使用 GpuProfiler 層進行分析的良好幀範圍時非常有用。 |
DebugOverlayConfig.TimeGraphEnable | 0, 1 | 啟用最近 CPU 和 GPU 幀時間圖表的渲染。 |
適用於 Vulkan 的 AMD 開源驅動程式包含第三方編寫的程式碼。
本文所包含的資訊僅供參考,如有更改,恕不另行通知。本文檔可能包含技術錯誤、遺漏和印刷錯誤,AMD 沒有義務更新或更正此資訊。 Advanced Micro Devices, Inc. 不對本文檔內容的準確性或完整性做出任何聲明或保證,並且不承擔任何形式的責任,包括關於不侵權、適銷性或特定用途適用性的暗示保證。軟體或本文所述的其他產品的操作或使用。本文檔未授予任何知識產權許可(包括默示許可或禁止反言許可)。適用於購買或使用 AMD 產品的條款和限制在雙方簽署的協議或 AMD 的標準銷售條款和條件中規定。
AMD、AMD 箭頭標誌、Radeon、FirePro 及其組合是 Advanced Micro Devices, Inc. 的商標。
Vega 是 AMD 架構的代號,而不是產品名稱。
Linux 是 Linus Torvalds 在美國和其他國家的註冊商標。
Vulkan 和 Vulkan 標誌是 Khronos Group, Inc. 的註冊商標。