WebGPU
https://www.w3.org/TR/webgpu/
WebGL (MozillaとKhronos)の後継? GPUの演算系などを使えるようにしたもの?
https://developer.mozilla.org/ja/docs/Web/API/WebGPU_API
WebGL比
WebGLとは関連なし
Vulkanベース
HDRなどに対応している
table:比
WebGL WebGPU
対象? OpenGL ES DirectX, Vulkan, GPUドライバ
言語 GLSL WGSL
WebGPU Shadeing Language (WGSL)
https://gpuweb.github.io/gpuweb/wgsl/
https://www.w3.org/TR/WGSL/
OpenGLが終了し、Vulkanに移行していたり、Apple MetalやMS Direct3D 12だったりするものにあわせたもの
https://webgpufundamentals.org/webgpu/lessons/ja/ WebGPUの基礎
Chromeが対応、Safariが対応表明?
Firefox 141で対応(Windows HDR未対応)
w3c
この文書のステータス
このセクションでは、この文書の公開時点におけるステータスについて説明します。最新のW3C出版物のリストとこの技術レポートの最新版は、W3C標準およびドラフト索引でご覧いただけます。
この仕様に関するフィードバックとコメントを歓迎します。この仕様に関する議論にはGitHub Issuesを推奨します。または、GPU for the Webワーキンググループのメーリングリスト(public-gpu@w3.org、アーカイブ)にコメントを送信することもできます。このドラフトでは、ワーキンググループでまだ議論されていない保留中の課題をいくつか取り上げています。これらの課題の妥当性を含め、結論はまだ出ていません。
この文書は、GPU for the Webワーキンググループによって勧告トラックを用いた勧告候補ドラフトとして公開されました。この文書は、少なくとも2025年2月28日までは勧告候補のままです。
ワーキンググループは、最新のGPUシステムAPIを用いて、少なくとも2つのブラウザで各機能の実装を実証する予定です。テストスイートは、実装レポートの作成に使用されます。
候補勧告としての公開は、W3Cおよびそのメンバーによる承認を意味するものではありません。候補勧告草案は、ワーキンググループが後続の候補勧告スナップショットに含める予定の、前回の候補勧告からの変更点を統合したものです。
この文書は随時維持および更新されます。この文書の一部は作業中です。
この文書は、W3C特許ポリシーに基づいて活動するグループによって作成されました。W3Cは、グループの成果物に関連して行われたすべての特許開示の公開リストを維持管理しており、このページには特許開示に関する指示も記載されています。必須クレーム(Essential Claim(s))を含むと考える特許について実際に知っている個人は、W3C特許ポリシーのセクション6に従って情報を開示しなければなりません。
この文書は、2025年8月18日付のW3Cプロセスドキュメントに準拠します。
1. はじめに
このセクションは非規範的です。
グラフィックス・プロセッシング・ユニット(GPU)は、パーソナルコンピューティングにおけるリッチなレンダリングや計算アプリケーションの実現に不可欠な存在です。WebGPUは、GPUハードウェアの機能をWeb向けに公開するAPIです。このAPIは、2014年以降のネイティブGPU APIに効率的にマッピングできるように、根本から設計されています。WebGPUはWebGLとは関連がなく、OpenGL ESを明示的にターゲットとしていません。
WebGPUは、物理GPUハードウェアをGPUAdapterとして扱います。リソースを管理するGPUDeviceと、コマンドを実行するデバイスのGPUQueueを介して、アダプタへの接続を提供します。GPUDeviceは、プロセッシング・ユニットへの高速アクセスを可能にする独自のメモリを持つ場合があります。GPUBufferとGPUTextureは、GPUメモリを基盤とする物理リソースです。GPUCommandBufferとGPURenderBundleは、ユーザーが記録したコマンドを格納するコンテナです。GPUShaderModuleにはシェーダーコードが含まれています。GPUSamplerやGPUBindGroupなどのその他のリソースは、GPUによる物理リソースの使用方法を設定します。
GPUは、GPUCommandBuffersにエンコードされたコマンドを、固定機能ステージとプログラム可能なステージを組み合わせたパイプラインにデータを流すことで実行します。プログラム可能なステージは、GPUハードウェア上で実行するように設計された特別なプログラムであるシェーダーを実行します。パイプラインの状態の大部分は、GPURenderPipelineまたはGPUComputePipelineオブジェクトによって定義されます。これらのパイプラインオブジェクトに含まれない状態は、beginRenderPass()やsetBlendConstant()などのコマンドによってエンコード中に設定されます。
2. 悪意のある使用に関する考慮事項
このセクションは非規範的なものです。このAPIをWeb上で公開することに伴うリスクについて説明します。
2.1. セキュリティに関する考慮事項
WebGPUのセキュリティ要件は、Webの場合と変わらず、同様に譲歩の余地がありません。一般的なアプローチとしては、すべてのコマンドがGPUに到達する前に厳密に検証し、ページが自身のデータのみで動作することを保証します。
2.1.1. CPUベースの未定義動作
WebGPU実装は、ユーザーが発行したワークロードをターゲットプラットフォーム固有のAPIコマンドに変換します。ネイティブAPIは、コマンドの有効な使用方法を指定します(例:vkCreateDescriptorSetLayout)。有効な使用規則に従わない場合は、通常、結果が保証されません。これは「未定義動作」と呼ばれ、攻撃者がこれを悪用することで、所有していないメモリにアクセスしたり、ドライバーに任意のコードを実行させたりする可能性があります。
安全でない使用を禁止するため、WebGPU が許容する動作の範囲は、あらゆる入力に対して定義されています。実装は、ユーザーからのすべての入力を検証し、有効なワークロードを持つ入力のみをドライバーに渡す必要があります。このドキュメントでは、すべてのエラー条件と処理セマンティクスを規定します。例えば、copyBufferToBuffer() の「source」と「destination」の両方に、範囲が重複する同じバッファを指定すると、GPUCommandEncoder はエラーを生成し、他の操作は実行されません。
エラー処理の詳細については、§22 エラーとデバッグを参照してください。
2.1.2. GPU ベースの未定義動作
WebGPU シェーダーは、GPU ハードウェア内の演算ユニットによって実行されます。ネイティブ API では、一部のシェーダー命令が GPU 上で未定義の動作を引き起こす可能性があります。これに対処するため、シェーダー命令セットとその定義済み動作は WebGPU によって厳密に定義されています。createShaderModule() にシェーダーが渡されると、WebGPU 実装は、(プラットフォーム固有のシェーダーへの)変換や変換パスを実行する前に、シェーダーを検証する必要があります。
2.1.3. 初期化されていないデータ
一般的に、新しいメモリを割り当てると、システム上で実行されている他のアプリケーションの残存データが公開される可能性があります。この問題に対処するため、WebGPUは概念的にはすべてのリソースをゼロに初期化しますが、実際には、開発者が手動でコンテンツを初期化する場合、実装ではこのステップを省略することがあります。これには、変数やシェーダー内の共有ワークグループメモリが含まれます。
ワークグループメモリをクリアする正確なメカニズムはプラットフォームによって異なります。ネイティブAPIがクリア機能を提供していない場合、WebGPU実装はコンピュートシェーダーを変換し、まずすべての呼び出しをクリアし、それらを同期させてから、開発者のコ​​ードの実行を継続します。
注:
キュー操作で使用されるリソースの初期化状態は、操作がキューに登録された時点でのみ判明します(コマンドバッファにエンコードされた時点などではありません)。そのため、一部の実装では、キュー登録時に最適化されていない遅延クリアが必要になります(例:GPULoadOpの「load」を「clear」に変更するのではなく、テクスチャをクリアする)。
その結果、その実装にペナルティがない場合でも、すべての実装では、この潜在的なパフォーマンス ペナルティについて開発者コンソールに警告を出す必要があります。