Vulkan

提供: ArchWiki
2025年3月18日 (火) 11:11時点におけるKgx (トーク | 投稿記録)による版 (→‎インストール: 同期)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

Wikipedia:ja:Vulkan より:

Vulkanは、低オーバーヘッドのクロスプラットフォーム3DグラフィックスおよびコンピュートAPIです。2016年に初めてリリースされ、OpenGL の後継として登場しました。

詳しくは Khronos のウェブサイトを参照してください。

インストール

ノート: ハイブリッドグラフィック (NVIDIA Optimus/AMD Dynamic Switchable Graphics) の場合:
  • Vulkan は Bumblebee で公式ではサポートされていません。[1] を見てください。しかし、primus_vk あるいは primus-vk-gitAUR により動作します。
  • Radeon の Vulkan ドライバーは PRIME をサポートしています。[2] を参照。

Vulkan アプリを実行するには vulkan-icd-loader と (32ビットのアプリケーションを実行したい場合は lib32-vulkan-icd-loader も)、使用しているグラフィックカードの Vulkan ドライバーをインストールする必要があります:

以下はソフトウェアラスタライザーで、Vulkanサポートを提供しないデバイスで使用することができます。

Vulkan アプリケーション開発には、vulkan-headersインストールし、オプションで vulkan-validation-layersvulkan-man-pagesAUR、および vulkan-tools をインストールできます(vulkaninfo や vkcube ツールが含まれています)

検証

システムに現在インストールされている Vulkan 実装を確認するには、次のコマンドを使用します。

$ ls /usr/share/vulkan/icd.d/

Vulkan がハードウェアで動作していることを確認するには、vulkan-toolsインストールし、vulkaninfo を使って関連情報をシステムから抜き出します。グラフックスカードの情報を手に入れれば、Vulkan が動作していることを知ることができます。

$ vulkaninfo

さらなる情報は https://linuxconfig.org/install-and-test-vulkan-on-linux で見ることができます。

切り替え

デバイス間の切り替え

複数の GPU を搭載したシステムでは、特定の GPU の使用を強制する必要がある場合があります。これを動作させるには、vulkan-mesa-layers が必要です。MESA_VK_DEVICE_SELECTvendorID:deviceID に設定することで、希望する GPU を選択できます。

候補を一覧表示するには、以下のコマンドを使用します:

$ MESA_VK_DEVICE_SELECT=list vulkaninfo

指定した値の末尾に ! を付けることで、この動作を強制することができます。詳細については、Vulkan mesa device select layer environment variables を参照してください。

AMD ドライバを切り替える

AMD のシステム上では、一度に複数の Vulkan ドライバをインストールすることができます。なので、それらを切り替えたい場合があります。

環境変数で選択する

ノート: この方法は AMDVLK クローズドドライバの選択をサポートしません。

amdvlk 2021.Q3.4 以降、新しい切り替えロジックが実装されました。これにより、AMDVLK がデフォルトとなり、以下のいずれかを行う必要があります:

  • AMD_VULKAN_ICD=RADV を設定し、AMDVLK のデフォルトから他のものに切り替える。
  • あるいは、グローバルに DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1 を設定し、以下の ICD ローダの方法を再有効化する。

DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1 が設定されると、VK_ICD_FILENAMES 環境変数を設定することによりドライバを選択することができます。例えば、Steam を RADV ドライバで実行するようにするには:

$ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json steam

32 ビットのゲームのクラッシュを回避するために、32 ビット版と 64 ビットを環境変数に割り当てることができます。

AMD Vulkan Prefixes で選択する

AMD Vulkan Prefixes は3つの Vulkan 実装を切り替えるためのスクリプトです。amd-vulkan-prefixesAURインストールし、アプリケーションの前にお望みの接頭辞を付けてください。提供される実行ファイルは vk_radvvk_amdvlk、そして vk_pro です。例えば、AMDVLK クローズドドライバを使用するには:

$ vk_pro command

ソフトウェアレンダリング

ソフトウェア Vulkan ラスタライザーとして知られる lavapipe をインストールすることができます。例えば、ハードウェアの問題をデバッグするために使用します: vulkan-swrast (または32ビット版の lib32-vulkan-swrast)

以下の例は、必要な環境変数を設定して、Vulkan と OpenGL の完全なソフトウェアレンダリングを強制するために vulkaninfo を実行する方法を示しています (__GLX_VENDOR_LIBRARY_NAME=mesa により、コマンドが PRIME ユーザーにも動作するようになります):

$ LIBGL_ALWAYS_SOFTWARE=1 __GLX_VENDOR_LIBRARY_NAME=mesa VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.i686.json:/usr/share/vulkan/icd.d/lvp_icd.x86_64.json vulkaninfo

Vulkan ハードウェアデータベース

Vulkan Hardware Database には、ユーザーが報告した GPU/ドライバーの組み合わせが提供されています。独自の情報を指定するには、vulkan-caps-viewer-waylandAUR または vulkan-caps-viewer-x11AUR を使用します。

トラブルシューティング

NVIDIA - vulkanが動作しない、または初期化できない

環境変数

無効または矛盾する環境変数の値が原因で、Vulkan が失敗することがあります。不適切な値は、複数の GPU が搭載されたマシンで意図した GPU ではなく別の GPU を使用する原因となることもあります。環境変数を適切に設定することで、必要ないときにセカンダリ GPU を電源オフにするのにも役立ちます。

GPU の切り替え

マシンに複数の GPU が搭載されていて、Vulkan がそのうちの1つを認識できない場合、その GPU が BIOS/UEFI やカーネルで無効にされていないことを確認してください。GPU 間の切り替え方法の概要については NVIDIA Optimus を参照してください。

現在の状態を確認するための例コマンド(optimus-manager-gitAUR を使用):

$ optimus-manager --status
Optimus Manager (Client) version 1.4

Current GPU mode : nvidia
GPU mode requested for next login : no change
GPU at startup : integrated
Temporary config path: no

GSPファームウェア

GSP ファームウェアは、2024年6月にリリースされた NVIDIA ドライバのバージョン555以降、デフォルトで有効になっており、Vulkan の失敗やシステムクラッシュを含むさまざまな問題の原因として知られています。

これを無効にするには、NVreg_EnableGpuFirmware=0 モジュールパラメータnvidiaカーネルモジュールに設定します。これは独自の NVIDIA ドライバでのみ機能します:オープンソースドライバから切り替える場合はNVIDIA#インストール を参照してください。

必要に応じて initramfs の再生成 を行うことを忘れないでください。この新しいカーネルモジュールオプションを有効にするには、再起動が必要です。

No device for the display GPU found. Are the intel-mesa drivers installed?

環境変数 VK_ICD_FILENAMES に intel_icd と primus_vk_wrapper の両方のセットしてみてください。

export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json:/usr/share/vulkan/icd.d/primus_vk_wrapper.json

AMDGPU - vulkaninfo 後に ERROR_INITIALIZATION_FAILED

GCN1 または GCN2 ファミリの AMD カードで vulkaninfo を実行した後、次のようなエラーメッセージが表示された場合:

ERROR at /build/vulkan-tools/src/Vulkan-Tools-1.2.135/vulkaninfo/vulkaninfo.h:240:vkEnumerateInstanceExtensionProperties failed with ERROR_INITIALIZATION_FAILED

次に、このモデルのグラフィックス カードのサポートが正しく有効になっているかどうかを確認します (AMDGPU#Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化)

GPU ドライバーが正しくロードされているかどうかを確認する方法の 1 つは、lspci -k です。このコマンドを実行した後、GPU のカーネル ドライバーを確認してください。amdgpu である必要があります。

$ lspci -k
...
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Curacao PRO [Radeon R7 370 / R9 270/370 OEM]
	Subsystem: Gigabyte Technology Co., Ltd Device 226c
	Kernel driver in use: amdgpu
	Kernel modules: radeon, amdgpu
...

この問題に関するいくつかのフォーラム スレッド: [3] [4]

AMDGPU - DirectX Vulkan ゲームのプレイ中にがハングする

DirectX Vulkan を使用して一部のゲームをプレイすると、Radeon-Vulkan がドライバーや GPU のハングを引き起こすようです。

kernel: [drm:amdgpu_dm_atomic_commit_tail [amdgpu]] *ERROR* Waiting for fences timed out!
kernel: [drm:amdgpu_job_timedout [amdgpu]] *ERROR* ring gfx_0.0.0 timeout, signaled ..., emitted ...
kernel: [drm:amdgpu_job_timedout [amdgpu]] *ERROR* Process information: process ... pid ... thread dxvk-submit pid
...

AMDVLK に切り替えるか有効にすると、問題が解決されるようです。

AMDGPU - DirectX Vulkan ゲームでクラッシュする

AMDVLK は複数のユーザーによるクラッシュを引き起こすと報告されています (BBS#284118id=283008 BBS#283008BBS#274737): Radeon-Vulkan ドライバーに切り替えるか有効にすると、問題が解決します。

AMDGPU - Vulkan アプリケーションの起動が遅い

cuda をインストールすると、例えば Chromium などの Vulkan アプリケーションの起動が遅いことがあります。これは、nvidia-utils が Vulkan ドライバを提供しており、Vulkan が最初に nvidia ドライバを試み、その後に radeon ドライバを試すためです。これを解決するには、環境変数 VK_DRIVER_FILES/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json に設定します。

AMDGPU - Found no drivers!

Found no drivers! に遭遇した場合:

$ vulkaninfo
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Failed to CreateInstance in ICD 0.  Skipping ICD.
ERROR: [Loader Message] Code 0 : terminator_CreateInstance: Found no drivers!
Cannot create Vulkan instance.
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.
ERROR at /usr/src/debug/vulkan-tools/Vulkan-Tools-1.3.269/vulkaninfo/./vulkaninfo.h:688:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER

AMD は定期的に pre-Polaris および Vega のサポートを終了しています。もしあなたの GPU のサポートがamdvlk から削除された場合は、アンインストール して、vulkan-radeonインストールしてください。

Bcachefs ルートで32ビットアプリケーションがドライバを見つけられない

Bcachefs には32ビットプログラムとの互換性の問題があり、このファイルシステムをルートとして使用している場合、Vulkan ICD ローダーがドライバを見つけることができなくなります(Bcachefs#32-bit programs cannot see directory contents)

この問題は、検索されるパスの1つに別のファイルシステムをマウントし、そのデータをコピーすることで回避できます。

警告: マウントされたファイルシステムはそのディレクトリをオーバーレイし、元の内容を Pacman やあなたが読み書きできないようにします。/usr/share/vulkan 上にマウントしないでください。パッケージの変更や更新はマウントされたファイルシステム内のファイルのみを変更するため、アンマウント時に破損を引き起こす可能性があります。
# mkdir -p /usr/local/share/vulkan
# mount -t tmpfs foo /usr/local/share/vulkan
# cp -r /usr/share/vulkan/* /usr/local/share/vulkan