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++ の間に並列エコシステムが確立されます。
新しい視野
WebGPU のエコシステムは、JavaScript、C++、Rust の領域を超えて拡張されています。
WebGPU の実装に取り組んでいるエンジニアは WebGPU の共通 C ヘッダーも開発しているため、お使いのプログラミング言語に WebGPU のバインディングがすでに存在している可能性があります。これを使用して Dawn、wgpu などをターゲットに設定し、C FFI を使用する言語のバインディングを簡単に作成できます。
また、Chrome チームでは、メニュー、ツールバー、デベロッパー ツール、ウェブ コンテンツなど、すべてのブラウザ UI 要素のデフォルトのレンダリング バックエンドとして Dawn を使用することも検討しています。これにより、ネイティブ API ごとに個別のレンダリング実装を行う必要がなくなり、開発プロセスが簡素化されます。この機能は、macOS と Windows の chrome://flags/#skia-graphite
フラグの試験運用版です。