何年にもわたる開発の後、Chrome チームは WebGPU をリリースします
数日前、Googleは5月2日にリリース予定のChrome 113で、 WebGPUグラフィックスAPIとWebGPUシェーディング言語(WGSL)をデフォルトでサポートすることを発表しました。
WebGPUについてよく知らない方のために説明すると、WebGPUはVulkan、Metal、Direct3D 12に似たAPIを提供し、処理や計算などのGPU側の操作を実行できます。また、シェーディング言語を使用してGPU側のプログラムを作成することもできます。
WebGPUについて
概念的には、WebGPUはVulkanグラフィックスAPIがOpenGLと異なるのと同様にWebGLとは異なりますが、WebGPUは特定のグラフィックスAPIに基づいているわけではありません。むしろ、Vulkan、Metal、Direct3Dで使用されているものと同じ低レベルプリミティブを使用する汎用レイヤーです。WebGPUは、JavaScriptアプリケーションに対し、GPUへのコマンドの構成、処理、送信、および関連するリソース、メモリ、バッファ、テクスチャオブジェクト、コンパイル済みグラフィックスシェーダーの管理を低レベルで制御する機能を提供します。このアプローチにより、オーバーヘッドを削減しGPU効率を高めることで、グラフィックスアプリケーションのパフォーマンスを向上させることができます。
WebGPUを使用すると、Vulkan、Metal、またはDirect3Dを使用したスタンドアロンプログラムと同等の機能を持ちながら、特定のプラットフォームに依存しない、Web向けの複雑な3Dプロジェクトを作成できます。WebGPUは、ネイティブグラフィックスプログラムをWebAssemblyでコンパイルすることで、Web対応形式に移植するための追加オプションも提供します。3Dグラフィックス以外にも、WebGPUは、計算処理をGPUにオフロードしたり、シェーダーを実行したりすることに関連する可能性も網羅しています。
WebGPU の主な機能のうち、次の点を強調できます。
- リソースの分離管理、準備作業、コマンドの送信 GPU に (WebGL では、XNUMX つのオブジェクトが一度にすべてを担当していました)。 XNUMX つの個別のコンテキストが提供されます。テクスチャやバッファなどのリソースを作成するための GPUDevice。 処理および計算段階を含む個々のコマンドをエンコードする GPUCommandEncoder。 GPU 実行キューに渡す GPUCommandBuffer。
結果は、XNUMX つ以上のキャンバス アイテムに関連付けられた領域にレンダリングすることも、出力なしでレンダリングすることもできます (たとえば、計算タスクの実行時)。 ステージングにより、リソースの作成操作とプロビジョニング操作を、異なるスレッドで実行できる異なるコントローラーに簡単に分離できます。 - 状態処理への別のアプローチ。 WebGPU は GPURenderPipeline と GPUComputePipeline の XNUMX つのオブジェクトを提供します。これらのオブジェクトを使用すると、開発者によって事前定義されたさまざまな状態を組み合わせることができ、ブラウザーがシェーダーの再コンパイルなどの追加作業でリソースを浪費しないようにすることができます。 サポートされている状態には、シェーダー、頂点バッファーと属性レイアウト、固定グループ レイアウト、ブレンディング、深度とパターン、レンダリング後の出力形式が含まれます。
- Vulkan のリソース プール ツールによく似たバインディング モデル. リソースをグループにグループ化するために、WebGPU は、コマンドの記録中にシェーダーで使用するために他の同様のオブジェクトにバインドできる GPUBindGroup オブジェクトを提供します。
このようなグループを作成すると、コントローラは必要な準備アクションを事前に実行でき、ブラウザは描画呼び出し間でリソース バインディングをより高速に切り替えることができます。 リソース バインディングのレイアウトは、GPUBindGroupLayout オブジェクトを使用して事前定義できます。
Chromeに加え、実験的なWebGPUサポートは、2020年4月からFirefoxで、2021年11月からSafariでテストされています。FirefoxでWebGPUを有効にするには、`about:config`で`dom.webgpu.enabled`と`gfx.webgpu.force-enabled`フラグを設定する必要があります。
現在、FirefoxとSafariでWebGPUをデフォルトで有効にする予定はありません。FirefoxとChrome向けに開発されたWebGPU実装は、それぞれDawn(C++)とwgpu(Rust)という個別のライブラリとして提供されており、これらを使用してWebGPUサポートをアプリケーションに統合できます。
また、WebGL をネイティブに使用して一般的な JavaScript ライブラリに WebGPU サポートを追加する作業が進行中であることも注目に値します。 たとえば、完全な WebGPU サポートは Babylon.js で既に宣言されており、Three.js 、 PlayCanvas 、および TensorFlow.js では部分的に宣言されています。
WebGPUの実装は、当初はChromeOS、macOS、Windows向けのビルドでのみ有効になり、 LinuxとAndroid向けのWebGPUサポートは後日有効になる予定です。
最後に、さらに詳しく知りたい場合は、以下のリンクから詳細をご確認いただけます。