Coelacanth's Dream

Vulkan Mesh Shader のクロスベンダ拡張 VK_EXT_mesh_shader がリリース

Vulkan API における Mesh Shader のクロスベンダ拡張 VK_EXT_mesh_shader がリリースされた。

Mesh Shader にはクロスベンダ拡張よりも前に VK_NV_mesh_shader が定義されていたが、VK_NV_mesh_shader は DirectX 12 版と比較した時に主要な違いがあり、互換性において難を抱えていた。
このことは RADV (Vulkan) ドライバーに VK_NV_mesh_shader の試験的なサポートを追加する際、Timur Kristóf 氏が解説している。1
VK_EXT_mesh_shader は DirectX 12 版との互換性を重視し、同時にいくつかのデバイスプロパティが追加されている。

Khronos Blog では、互換性を重視したことで Vulkan と DirectX 12 間の移植性の改善は達成したが、ベンダ間の性能という点は移植がずっと難しく、注意が必要だとしている。KHR 拡張としてリリースされなかった理由が性能の問題だとも語っている。

RADV, ANV

Mesa3D の AMD GPU 向け Vulkan ドライバー RADV と Intel GPU 向けである ANV (Anvil) では現在開発者たちによって VK_EXT_mesh_shader への対応が進められている。

RADV における実装では、Kernel Mode Driver (KMD) 側の AMDGPU ドライバーに Gang Submit が実装されていないと安全に動作しないため、環境変数を設定しないと VK_EXT_mesh_shader 対応が有効化されないと Timur Kristóf 氏はコメントしている。
Gang Submit は以前に取り上げたが、AMD のソフトウェアエンジニア Christian König 氏によって実装が進められており、複数の IB (Indirect Buffer) を複数の異なるエンジンで同時に実行可能であることを保証する機能となる。2
複数のプロセスが同時に Task Shader を使用した場合、GPU がデッドロックする可能性があるが、Gang Submit があれば効果的に防止することが可能となる。