Vulkan といえば 1.0 のバージョンのまま、マイナーバージョンアップを黙々と続けているものでしたが、今回 1.1 の発表となりました。実情としては 1.0.70 ≒ 1.1.70 みたいな感じで、 1.1.0 からの再スタートというナンバリングではないようです。
この記事を書いている時点においては、少々出遅れしたためか、既に Windows の Vulkan SDK では 1.1.70.1 なるバージョンが出ていたりします。
変わった点
Vulkan 1.0 が公開されてから、各ベンダーから色々な拡張機能が出てきました。これらを整えて、標準的に使えるコア機能として取り込んだバージョンのように見えます。
このあたりは OpenGL のバージョンの付け方に似ているなと思いました。
1.1 で何がコアに取り込まれたのかという点については以下のようなものとのことです。
- 複数タスクのデータ共有・操作 「サブグループ・オペレーション」
- マルチメディアコンテンツ表示用の安全な保護された表示機能
- VR で使用するクロスプロセス API の相互運用機能
- HLSL との互換性強化
他にも 16bit 形式の拡充、 YCbCrフォーマットテクスチャといったものがあるようです。
HLSL との互換性という点については、 HLSL シェーダープログラムを Vulkan で使用できるようになるということを指しているようです。 OpenGL/Vulkan vs DirectX ではメモリレイアウトに違いがありましたが、このあたりが変わったようです。
Vulkan 1.1 では D3D のメモリレイアウトがネイティブに処理されるようになったみたいです。そもそもハードウェアは両方のAPIをサポートしているので動作自体に問題ななさそうです。この機能拡張のためか、 SPIR-V のバージョンも上がって 1.3 となるようです。
各ベンダーの状況
さすがの NVIDIA は既に対応済みのベータドライバを公開していました(Windows 389.10, Linux 387.42.05)。
AMD もまた対応済みのドライバを公開しているようです。
2大の巨大グラフィックスベンダーはさすがでした。 Khronos の資料によると既に Intel にもドライバはありそうなのですが、見つけることが出来ませんでした。
参考
Khronos Group Releases Vulkan 1.1
感想
今までの拡張機能がコアに取り込まれて扱いやすくなったと思っています。 Vulkan 1.1 ならこの機能はサポート済みのはず!と使えるようになるのは素晴らしいです。
そして相互運用については割とどの資料でも語られているので、力を入れているポイントなのだろうと思います。これによりプロセスの壁を越えたり、API の境界を越えて自由に GPU でのデータやりとりが出来るようになるかと思うとワクワクします。
DirectX12 (D3D12) で異種間 GPU のやりとりが強化されているのに対して、 Vulkan のほうは遅れていたとも見えるのでその点を取り返しにかかっているようにも見えます。
DirectX12 は Windows10 のみでしか動きませんが、 Vulkan は Windows7 でも動作可能ですし、また今回のバージョンから Mac,iOS での対応が入ったのでマルチ対応を考えるならば Vulkan を選ぶべきでしょう。