Mozilla Hacksの2020年4月23日付記事「A Taste of WebGPU in Firefox」を紹介します。
この記事は、Firefox Nightlyで実験的にWebGPUを動かし始めた時期の解説です。2020年の記事なので現在の実装状況とは距離がありますが、WebGPUが何を目指したAPIなのか、WebGLからどこを変えようとしていたのかを理解するには今でも読みどころがあります。
WebGPUは何を変えるのか
記事では、WebGPUを「WebからGPUのグラフィックス・計算能力へアクセスするためのAPI」として紹介しています。WebGLがOpenGL ESに近いモデルで3D描画をWebへ持ち込んだのに対し、WebGPUはVulkan、Direct3D 12、Metalのような現代的なGPU APIを前提に設計されています。
参照先のW3C GPU for the Web Community Groupでも、Webプラットフォームと現代的な3Dグラフィックス・計算機能の間にインターフェースを提供することが目的として説明されています。WebGPUは単なる描画APIというより、GPU計算も含めた新しい低レベル基盤として設計されているわけです。
WebGLとの違い
記事がわかりやすく整理しているのは、WebGLとの構造上の違いです。WebGLではコンテキストに多くの状態が集まりがちですが、WebGPUではリソース作成、コマンド記録、コマンド送信が分かれます。`GPUDevice`、`GPUCommandEncoder`、`GPUCommandBuffer`、`GPUQueue` のように役割を分けることで、より複雑な処理やワーカー活用にも向いたモデルになります。
現在のMDNのWebGPU API解説でも、WebGPUはWebGLの後継として、より現代的なGPUとの互換性、汎用GPU計算、より安価なCPU側処理、より高度な描画機能を提供するものとして説明されています。一方で、MDN上ではまだBaselineではなく、HTTPSなどのセキュアコンテキストが必要なAPIとして扱われています。
Firefox実装の技術スタック
Firefox側の話として面白いのは、実装の中核にRust系のプロジェクトが出てくることです。記事では、FirefoxのWebGPU実装がwgpu系のプロジェクトを使い、Vulkan風のGPUワークロードをD3D12、D3D11、Metal、OpenGLへ橋渡しする構成だったと説明されています。
また、シェーダーまわりではNagaのようなRust製のシェーダー変換・検証基盤が関係します。WebGPUはGPUに近い低レベルAPIなので、性能だけでなく、入力の検証、シェーダー言語、ブラウザ安全性の設計が重要になります。
標準化と現在地
記事内リンクのgpuweb GitHubリポジトリは、GPU for the Webの議論や仕様作業が行われている場所です。2020年の記事では仕様がまだ大きく変化している段階として紹介されていますが、現在のMDNドキュメントを見ると、WebGPUは実装とドキュメントがかなり具体化しています。
同時に、WebGPU実装状況ページのような参照先を見ると、実装状況や対応範囲はブラウザ・環境ごとに確認が必要です。WebGPUは強力なAPIであるぶん、開発者側も互換性や実行環境を前提に設計する必要があります。
気づき
今回の記事で特に印象的なのは、WebGPUが「WebGLを少し速くするAPI」ではなく、GPUプログラミングのモデル自体をWeb向けに作り直す試みだったことです。リソース、パイプライン、バインディング、コマンド記録を明示的に扱う設計は、Web開発者にとっては難しさも増えますが、そのぶんネイティブ寄りの高度なグラフィックスや計算をWebへ持ち込む土台になります。
WebAssemblyとも相性がよく、ゲーム、可視化、機械学習、CADのような領域で「Webで動くから簡易版」という前提を崩していく可能性があります。この記事は、その方向性がまだ実験段階だったころの記録としても面白いです。
