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]
MoltenVKVulkanコードを使い、Intel MacやiOSなども対象にする場合Metal上でVulkan機能の一部を実装します。必要機能と対象OSを確認します。[1]
KosmicKrispApple 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%とした値です。

テストMetalMoltenVKKosmicKrispMoltenVK比
GFXBench aztec_high14,41610,86411,672107.4%
GFXBench aztec_normal38,27426,99127,747102.8%
3DMark Wild Life(Android Emulator)値なし29,89329,59599%
3DMark Wild Life Extreme(Android Emulator)値なし11,09010,59595.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ローダーをアプリに同梱する構成を案内しています。対象環境、必要な機能、実アプリの動作を確認してから、その検証済み構成を配布します。