WebGPU は、多くの場合、Direct3D 12、Metal、Vulkan に似た、最先端のハードウェア機能を公開し、GPU でのレンダリングと計算処理を可能にすることで、GPU への統一された迅速なアクセスを可能にするウェブ グラフィック API として認識されています。
しかし、WebGPU は単なる JavaScript API の枠を超え、WebAssembly に似た基本的な構成要素であり、エコシステムの急増によりウェブにとどまらない範囲にまで及びます。Chrome チームは、WebGPU が単なるウェブ テクノロジーではなく、コア テクノロジーを中心とした活発なエコシステムであることを認識しています。
現在のエコシステムの探索
この取り組みは、Apple、Google、Intel、Mozilla、Microsoft など、多数の組織が関わる共同の取り組みである JavaScript 仕様から始まります。現在、主要なウェブブラウザはすべて WebGPU が実装されているか、その実装を進めています。
同時に、Mozilla と Google は WebGPU の持つ可能性を認識し、プラットフォーム固有のアプリケーションで WebGPU の実装を分離して、スタンドアロンで使用できるようにしました。
Chrome では、WebGPU の呼び出しを GPU ドライバ コマンドに変換する C/C++ ライブラリである Dawn として具体化されています。Dawn は、WebGPU をネイティブに利用できる C および C++ アプリケーションを支援し、ブラウザ ベンダーの専門知識を活用して移植可能で人間工学に基づく GPU 抽象化を実現します。
ブログ投稿「WebGPU: 次世代のクロスプラットフォーム グラフィック API、WebGPU」で説明されているように、プラットフォーム固有の WebGPU アプリケーションをウェブに移植するのは簡単です。C++ WebAssembly ツールチェーンである Emscripten はすでに WebGPU をサポートしているため、最小限の変更のみでウェブに移植できます。
Node.js JavaScript ランタイムには Dawn ベースの WebGPU モジュールが含まれているため、ブラウザの外部から JavaScript WebGPU コードを実行することもできます。これにより、サーバー側やその他のプラットフォーム固有のコンテキストで、変更なしでコードを実行できます。
Rust にも、Firefox の WebGPU の実装である wgpu を使った同様のエコシステムが存在します。Wgpu は Rust アプリケーションに直接統合でき、その後 web-sys を使用してウェブに移植できます。また、Deno JavaScript ランタイムは wgpu を通じて WebGPU をサポートしています。wgpu と Deno の提携に関するブログ投稿をご覧ください。
これにより、次の図に示すように、Rust と C++ の間に並列エコシステムが確立されます。
今後の展望
WebGPU のエコシステムは、JavaScript、C++、Rust の領域を超えて拡張されています。
WebGPU の実装に取り組むエンジニアが WebGPU 用の共通 C ヘッダーを開発しているため、お好みのプログラミング言語にすでに WebGPU のバインディングが含まれている可能性があります。これを使用して Dawn や wgpu などをターゲットにすることができ、C FFI を使用する言語のバインディングを作成しやすくなります。
また、Chrome チームは、メニュー、ツールバー、デベロッパー ツール、ウェブ コンテンツなど、すべてのブラウザ UI 要素のデフォルトのレンダリング バックエンドとして Dawn を使用することも検討しています。これにより、ネイティブ API ごとにレンダリングを別々に実装する必要がなくなり、開発プロセスが簡素化されます。この機能は現在、macOS と Windows では試験運用版で、chrome://flags/#skia-graphite
フラグが使用されます。
謝辞
ヒーロー画像(作成者: Daniel Öberg、Unsplash)