AMD Open Source Driver for Vulkan® は、Linux® 上の Radeon™ グラフィックス アダプター用のオープンソース Vulkan ドライバーです。これは、AMD のプラットフォーム抽象化ライブラリ (PAL) 上に構築されています。これは、AMD の 3D およびコンピューティング ドライバーの多くについて、特定のハードウェアおよび OS 固有のプログラミングの詳細をカプセル化するように設計された共有コンポーネントです。 PAL を活用すると、最近リリースされた GPU のサポートや AMD 開発者ツールとの互換性など、プラットフォーム間で一貫したエクスペリエンスを提供できます。
特定のVkPipeline
オブジェクトを構成するシェーダーは、LLVM ベースのパイプライン コンパイラー (LLPC) ライブラリを使用して単一のエンティティとしてコンパイルされます。 LLPC は、AMD GPU 用の LLVM の既存のシェーダー コンパイル インフラストラクチャ上に構築され、PAL のパイプライン ABI と互換性のあるコード オブジェクトを生成します。特に、AMD のクローズドソース Vulkan ドライバーは現在、異なるパイプライン コンパイラーを使用しています。これが、AMD のオープンソース Vulkan ドライバーとクローズドソース 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 Open Source Driver for Vulkan へのコードの貢献を歓迎します。
ドライバーは、LLVM、XGL、LLPC、GPURT、および PAL の 5 つのリポジトリのソース コードから構築されます。
LLVM に変更を加える場合は、LLVM トランクにコントリビューションを送信する必要があります。そこにあるコミットは定期的に評価され、amd-gfx-gpuopen-master ブランチにマージされます。
XGL、LLPC、GPURT、および PAL への変更については、開発ブランチに対してプル リクエストを作成してください。変更がレビューされ、受け入れられた場合は、その後の定期的なプロモーションで master ブランチにマージすることが評価されます。
重要: プル リクエストを作成すると、MIT ライセンスの条項に基づいてプロジェクト所有者から自分の貢献がライセンスされることに同意したことになります。
XGL、LLPC、GPURT、および PAL にコントリビュートする場合、コードは次のことを行う必要があります。
それぞれの寄付は適度な少額にしてください。新しい機能や拡張機能など、大きな貢献をしたい場合は、計画立案者があなたの作業を評価およびレビューできるように、最初に問題を提起してください。
注PAL は、他の API、他のオペレーティング システム、および試作ハードウェアをサポートする必要がある共有コンポーネントであるため、純粋な Linux Vulkan ドライバーの観点からは明らかではない理由で、PAL の変更を修正するよう求められる場合があります。
ビルド システムには少なくとも 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 のデバッグ ビルドのリンクはメモリを非常に消費するため、並列ジョブは 2 つだけ使用します)。- ドライバーと一緒にツール (amdllpc など) をビルドする場合は、リポジトリ 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
master ブランチのコードプロモーションごとに、https://github.com/GPUOpen-Drivers/AMDVLK/releases から事前に構築されたパッケージをダウンロードすることもできます。
以下はインストール手順です。
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 ファイルの設定を追加/編集できます。このファイルは、1 行に 1 つの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 など) | 指定された GPU セット上で各 GPU 送信が完了するまで CPU がただちに待機するように強制します。 |
使用可能なすべての設定は、それらを定義する以下のソース ファイルを調べることで確認できます。
ランタイム設定はデバイスの初期化時にのみ読み取られ、アプリケーションを再起動しないと変更できません。複数の GPU を備えたシステムで実行している場合、同じ設定がすべての GPU に適用されます。設定ファイル内の;
で始まる行コメントとして扱われます。
開発中の拡張機能は、ドライバーでデフォルトでは有効になっていません。環境変数を使用して有効にできます。
export AMDVLK_ENABLE_DEVELOPING_EXT=" [...]"
または
export AMDVLK_ENABLE_DEVELOPING_EXT="all"
拡張機能名では大文字と小文字が区別されません。
GpuProfiler は、PAL インターフェイスをインターセプトして基本的な GPU プロファイリング サポートを提供するように設計されたオプションのレイヤーです。現在、このレイヤーはランタイム設定によって排他的に制御され、その結果はファイルに出力されます。
次のランタイム設定を使用して、アプリケーションの指定されたフレーム中に実行される作業の GPU タイミングを含む .csv ファイルを生成できます (フレームごとに 1 つのファイル)。
設定名 | 価値 | コメント |
---|---|---|
GpuProfilerMode | 0: 無効にする 1: sqtt をオフにして有効にする 2: sqtt でスレッド トレースを有効にする 3: RGP の sqtt で有効にする | GPU パフォーマンス プロファイラー レイヤーの SQTT モードを有効にして設定します。パフォーマンス データの実際のキャプチャは、GpuProfilerConfig_StartFrame を使用してフレーム番号を使用するか、Shift-F11 を押して指定する必要があります。 |
GpuProfilerConfig.LogDirectory | <ディレクトリパス> | ディレクトリ パスは $AMD_DEBUG_DIR、$TMPDIR、または /var/tmp/ に対する相対パスであり、デフォルト値は「amdpal/」です。アプリケーションにはディレクトリへの書き込み権限が必要です。プロファイリング ログは、 |
GpuProfilerConfig.Granularity | 0: 抽選ごと 1: cmdbuf ごと | 測定/プロファイリングの対象を定義します。描画ごとはコマンド バッファー内の個々のコマンド (描画、ディスパッチなど) を計算しますが、 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、AMD Arrow ロゴ、Radeon、FirePro、およびそれらの組み合わせは、Advanced Micro Devices, Inc. の商標です。本書で使用されているその他の製品名は、識別のみを目的としており、それぞれの会社の商標である場合があります。
Vega は AMD アーキテクチャのコードネームであり、製品名ではありません。
Linux は、米国およびその他の国における Linus Torvalds の登録商標です。
Vulkan および Vulkan のロゴは、Khronos Group, Inc. の登録商標です。