MacでVulkanを使う選択肢が増えました
WindowsやLinux向けのVulkan(画像描画や並列計算を担うGPUに指示するAPI)コードを、Macでも使いたい。APIはソフトウェアが機能を呼び出すための窓口です。MacではAppleのGPU向けAPIであるMetalとの違いを埋め、対象機種で必要な機能が使えるかを確認する必要があります。
この移植には、既にMoltenVKという選択肢があります。Metal上にVulkan機能の一部を実装し、macOSやiOSなど幅広いApple環境を対象にします。必要な機能と対象環境を満たして既に動いているなら、その構成を継続できます。MoltenVKの公式説明で対応範囲と機能上の制約を確認できます。
新たな候補は、LunarGが開発するGPU向けソフトウェア基盤Mesaのドライバー「KosmicKrisp」です。ドライバーは、アプリの指示をGPUが実行できる形にするソフトウェアです。LunarGの製品説明では、Metal 4とMesaの共通基盤を使う設計が示されています。Khronosの一覧にはVulkan 1.4適合製品として登録され、登録構成のOS(オペレーティングシステム)はmacOS 27と記載されています。Khronosの適合製品一覧
CTSはVulkan仕様への適合を確かめるテスト群です。Khronosの説明が示すのは仕様適合の確認であり、あらゆるアプリの正しさ、拡張(標準仕様に加える機能)すべてへの対応、最速の性能までを保証するものではありません。
Vulkanの指示をMetal 4へつなぐ仕組み
ドライバーは、アプリから受け取った指示をGPUが実行できる形につなぐ実装です。Vulkanローダーはアプリとドライバーをつなぎ、ICDというドライバー実装を選びます。KosmicKrispが選ばれると、アプリのVulkan指示がそのドライバーへ届きます。[3]
LunarGの製品説明によると、KosmicKrispはVulkanの指示をMetal 4へ対応づけます。シェーダー(GPU上で動く小さなプログラム)は、MesaのNIR(シェーダーの変換途中で使う共通形式)を経て、MSL(Metalのシェーダー言語)へ変換されます。MesaのNIR説明は、NIRを多くのMesaドライバーが共有するコンパイラー基盤として説明しています。
APIやシェーダー言語の違いは、呼び出し名を置き換えるだけでは埋まりません。MesaのKosmicKrisp文書には、VulkanとMetalの機能差、Metalの不具合、MSLコンパイラー(MSLをGPUで実行する形に変換するソフトウェア)の不具合やクラッシュを避ける対策が記載されています。変換と互換性への対応をドライバー側で担う仕組みです。
対象環境から既存方式と比べる
Apple Siliconは、Appleが設計したプロセッサです。KosmicKrispの現行要件はApple Silicon搭載MacとmacOS 26以降で、Metal 4を使います。Intel MacとmacOS 26より前のMacは対象外です。iOSも現在サポートされていません。これらは現行のMesa文書とLunarGの製品説明で確認できます。
| 選択肢 | 向く用途・対象 | 確認点 |
|---|---|---|
| Metal直接実装 | Apple向けにMetalを使って実装する場合 | GPUの機能差を実行時に照会します。[2] |
| MoltenVK | Vulkanコードを使い、Intel MacやiOSなども対象にする場合 | Metal上でVulkan機能の一部を実装します。必要機能と対象OSを確認します。[1] |
| KosmicKrisp | Apple SiliconとmacOS 26以降でVulkanを使う場合 | Metal 4が要件です。必要な機能を対象ドライバーで照会します。 |
MoltenVKにも現在のOS要件と機能上の制約があります。古いOS全般を無条件に支えるわけではありません。また、Vulkanローダー経由で使う際には、Vulkanの移植に伴う機能制約を表すportability subset実装を列挙する設定が必要です。
選定では配布対象と既存コードを先に整理します。Apple向けのMetal実装が必要な機能を満たすなら、その実装も十分な選択肢です。既存Vulkanコードを活用し、対応MacをApple SiliconとmacOS 26以降に絞るなら、Vulkan 1.4適合を得たKosmicKrispを検討できます。
公開ベンチマークは項目ごとに結果が異なる
LunarGの公式XDC解説からリンクされた発表資料の15ページには、M3 Pro・macOS 27での性能比較が掲載されています。次の表は資料の比較値です。単位が明示されていないため、FPS(1秒あたりの描画フレーム数)とは扱いません。割合はMoltenVKを100%とした値です。
| テスト | Metal | MoltenVK | KosmicKrisp | MoltenVK比 |
|---|---|---|---|---|
| GFXBench aztec_high | 14,416 | 10,864 | 11,672 | 107.4% |
| GFXBench aztec_normal | 38,274 | 26,991 | 27,747 | 102.8% |
| 3DMark Wild Life(Android Emulator) | 値なし | 29,893 | 29,595 | 99% |
| 3DMark Wild Life Extreme(Android Emulator) | 値なし | 11,090 | 10,595 | 95.54% |
GFXBenchの2項目ではKosmicKrispがMoltenVKを上回りますが、Metalの値には届きません。Android Emulator(Androidの実行環境を再現するソフトウェア)上の3DMarkではMoltenVKを下回ります。Metalの「値なし」は資料のNONEを表し、測定の有無まで断定するものではありません。
測定回数や詳細設定は、この性能表では示されていません。同資料の16ページでは、評価の中心がGFXBenchと3DMarkで、描画パターンが似ておりVulkan 1.1を使うテストだと説明しています。GodotやBlenderなど、別のアプリでの検証も始めています。
掲載値が示すのは、その構成とテストでの比較です。他のアプリやMac構成でも同じ差が出るとは限らず、KosmicKrispが常に速いとも結論できません。
CIが支える範囲と実アプリでの確認
LunarGの公式解説がいう「production ready」は、仕様適合、性能、CIの3点を根拠に、開発者へ実アプリでの採用を促す位置づけです。CIは、コード変更に伴う品質や回帰(以前動いていた機能が壊れること)を継続的に検査する仕組みです。
発表資料の17ページでは、LunarG内部のCIはMesa CIとは別に運用され、macOS 26のM1・M2・M4機で夜間にVulkan CTS 1.5.2を実行すると説明しています。
GFXReconstructは、実アプリの描画指示を記録・再生するツールです。LunarGはその再生テストと、Android Emulator上のアプリ群のテストも夜間に実行します。
さらに、描画パイプラインの集合を保存・再現するFossilizeで検査します。パイプラインはGPUの描画処理に使う設定やシェーダーをまとめたものです。資料によれば、この集合は過去にドライバーのコンパイラー問題を検出したテスト資産です。
仕様適合とCIは採用判断の根拠になりますが、公開された対象構成とテスト資産には範囲があります。実アプリの描画結果、クラッシュ、同期、性能は、採用するアプリと対象Macで確認する必要があります。[4]
SDKを入れた後にも機能照会が必要
KosmicKrispはVulkan SDK(ソフトウェア開発キット)とMesaリリースから提供されます。現行SDKの公式案内は、ヘッダー(APIの宣言を記したファイル)への追加が、ドライバーの機能対応を保証しないと説明しています。
アプリは実行時にドライバーの対応機能を照会し、必要な機能がない場合の経路を選びます。開発キットの提供と、配布先のMacで実行できる機能は分けて考えます。[5]
Macへの配布では、LunarGの製品説明が、KosmicKrispとVulkanローダーをアプリに同梱する構成を案内しています。対象環境、必要な機能、実アプリの動作を確認してから、その検証済み構成を配布します。



