WebGPU エコシステムのキャプチャ

François Beaufort
François Beaufort

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 では、これを Dawn として実体化しました。Dawn は、WebGPU の呼び出しを GPU ドライバのコマンドに変換する C/C++ ライブラリです。Dawn により、C および C++ アプリケーションは WebGPU をネイティブに使用できるようになります。これにより、ブラウザ ベンダーの専門知識に基づいて、ポータブルで人間工学に基づいた GPU 抽象化が実現します。

ブログ投稿「WebGPU: 未来のクロス プラットフォーム グラフィック API」で説明されているように、プラットフォーム固有の 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++ の間に並列エコシステムが確立されます。

2023 年の WebGPU エコシステムの図。
2023 年の WebGPU エコシステム。

新しい視野

WebGPU のエコシステムは、JavaScript、C++、Rust の領域を超えて拡張されています。

WebGPU の実装に取り組んでいるエンジニアは WebGPU の共通 C ヘッダーも開発しているため、お使いのプログラミング言語に WebGPU のバインディングがすでに存在している可能性があります。これを使用して Dawn、wgpu などをターゲットに設定し、C FFI を使用する言語のバインディングを簡単に作成できます。

また、Chrome チームでは、メニュー、ツールバー、デベロッパー ツール、ウェブ コンテンツなど、すべてのブラウザ UI 要素のデフォルトのレンダリング バックエンドとして Dawn を使用することも検討しています。これにより、ネイティブ API ごとに個別のレンダリング実装を行う必要がなくなり、開発プロセスが簡素化されます。この機能は、macOS と Windows の chrome://flags/#skia-graphite フラグの試験運用版です。