VulkanアプリケーションがNvidia独自のGPUを使用しないように強制する方法は?

VulkanアプリケーションがNvidia独自のGPUを使用しないように強制する方法は?

2つのGPUを搭載したノートパソコンがあります。 1つはAMD統合GPU、もう1つはヘッドレスNvidiaチップです。 ~によるとNVIDIA文書、環境変数を設定すると、__NV_PRIME_RENDER_OFFLOAD=1Nvidia GPUが最初にアプリケーションに表示され、__VK_LAYER_NV_optimus=NVIDIA_only他のGPUが非表示になり、アプリケーションがNvidia GPUを使用するように強制され、__VK_LAYER_NV_optimus=non_NVIDIA_onlyNvidia GPUが非表示になります。電子オプションはうまく機能しますが、後者のオプションは何も隠さずに順序だけを調整します。

$ __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=non_NVIDIA_only vulkaninfo --summary | grep deviceName
        deviceName         = AMD Radeon Graphics (RADV RENOIR)
        deviceName         = NVIDIA GeForce RTX 3050 Ti Laptop GPU
        deviceName         = llvmpipe (LLVM 15.0.6, 256 bits)
$ __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only vulkaninfo --summary | grep deviceName
        deviceName         = NVIDIA GeForce RTX 3050 Ti Laptop GPU
        deviceName         = AMD Radeon Graphics (RADV RENOIR)
        deviceName         = llvmpipe (LLVM 15.0.6, 256 bits)

実際に後者のオプションを設定すると、多くのアプリケーションはまだデフォルトで(高性能)Nvidia GPUを使用します。

$ __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=non_NVIDIA_only vkcube
Selected GPU 1: NVIDIA GeForce RTX 3050 Ti Laptop GPU, type: DiscreteGpu

これは現在Debianテストに含まれているNvidiaドライババージョン515.86.01です。

統合GPUのみを表示できるアプリケーションを作成する方法

答え1

私はそれについて考えた。 VK_ICD_FILENAMES 環境変数を使用すると、特定の Vulkan ドライバーを指定できます。前任者。

$ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.x86_64.json vulkaninfo --summary | grep deviceName
        deviceName         = AMD Radeon Graphics (RADV RENOIR)

関連情報