WebGPU対応レポート

いま開いている端末のGPUが、WebGPUのどの機能を持ち、どこまで大きな値を扱えるかを表示します。項目名だけでは分かりにくい features・limits・WGSL言語機能を、1項目ずつ日本語の解説つきで並べています。

環境を確認中…

GPU情報を取得中…

アダプターの選び方(GPUが2つある端末では結果が変わります)

アダプター情報

navigator.gpu.requestAdapter() が返したGPUの素性です。指紋(フィンガープリント)対策として、ブラウザが値を伏せることがあります。

  • ベンダー

    vendor

    非公開

    GPUの製造元です(nvidia / amd / intel / apple / qualcomm など)。プライバシー保護のため空欄になる環境もあります。

  • アーキテクチャ

    architecture

    非公開

    GPUの世代・系統です。同じ系統なら性能特性や不具合の傾向も近く、実装の分岐条件に使われます。

  • デバイス

    device

    非公開

    GPUの型番を示す識別子です。多くの環境では空欄です。

  • 説明

    description

    非公開

    ドライバーが返すGPUの説明文です。ブラウザによって内容と粒度が異なります。

  • サブグループ最小サイズ

    subgroupMinSize

    非公開

    同時に走るスレッド集団(サブグループ)の最小要素数です。サブグループ演算の実装を調整するときに使います。

  • サブグループ最大サイズ

    subgroupMaxSize

    非公開

    サブグループの最大要素数です。

  • ソフトウェア描画かどうか

    isFallbackAdapter

    いいえ(GPUで動作)

    true の場合は実GPUではなくソフトウェア実装で動いています。描画は通りますが、実機の性能評価には使えません。

  • 推奨キャンバスフォーマット

    getPreferredCanvasFormat()

    取得できません

    キャンバスに描くときに、変換コストなしで表示できるフォーマットです。context.configure() にはこの値をそのまま渡すのが基本です。

  • WebXRとの接続(WebGPU binding)

    XRGPUBinding

    利用できません

    WebGPUで描いた映像をそのままWebXRのセッションに出すための橋渡しです。未対応の環境では、XR側の描画はWebGLで行うことになります。

機能(features)

使いたい機能は requestDevice({ requiredFeatures: [...] }) で要求します。ここで「未対応」の機能を必須指定すると、デバイス作成そのものが失敗します。

  • 未対応

    コア機能と標準上限core-features-and-limitsコア

    WebGPUのコア機能一式と、仕様が定める標準の上限値をすべて満たしているアダプターであることを示します。

    なぜ必要?

    これが無い環境は互換モード(compatibility mode)相当で、テクスチャサイズやストレージバッファ数の上限が標準より低く設定されます。同じコードでも初期化に失敗することがあります。

  • 未対応

    深度クリップの無効化depth-clip-control描画

    視錐台の手前・奥の面で図形が切り落とされる処理を止め、深度値を範囲内に丸めて描画できます。

    なぜ必要?

    影のボリューム描画やスカイボックスのように、カメラの近接面・遠方面をまたぐ図形を扱うときに欠けが出ます。

  • 未対応

    32bit深度 + 8bitステンシルdepth32float-stencil8描画

    depth32float-stencil8 フォーマットのテクスチャを深度・ステンシルバッファとして使えます。

    なぜ必要?

    広い空間を扱うシーンで、遠景のZファイティング(面のちらつき)を抑えながらステンシルも併用したいときに必要です。

  • 未対応

    BC圧縮テクスチャtexture-compression-bcテクスチャ

    BC1〜BC7(S3TC / DXT / BPTC)形式の圧縮テクスチャをGPUに直接読み込めます。

    なぜ必要?

    非対応だと展開済みの生テクスチャを送ることになり、VRAM使用量と読み込み時間が数倍に増えます。デスクトップGPUで一般的な形式です。

  • 未対応

    BC圧縮の3Dテクスチャ対応texture-compression-bc-sliced-3dテクスチャ

    BC圧縮を3Dテクスチャのスライス単位で扱えます(ボリュームデータの圧縮保持)。

  • 未対応

    ETC2圧縮テクスチャtexture-compression-etc2テクスチャ

    ETC2 / EAC 形式の圧縮テクスチャを読み込めます。Androidやスタンドアロン型ヘッドセットのGPUで広く使われる形式です。

  • 未対応

    ASTC圧縮テクスチャtexture-compression-astcテクスチャ

    ASTC形式の圧縮テクスチャを読み込めます。圧縮率と画質のバランスが良く、モバイル系GPUの標準的な選択肢です。

    なぜ必要?

    WebXRのようにテクスチャ枚数が多く、フレーム時間の余裕が少ない用途では、配布サイズとVRAM削減の効き方が大きい項目です。

  • 未対応

    ASTC圧縮の3Dテクスチャ対応texture-compression-astc-sliced-3dテクスチャ

    ASTC圧縮を3Dテクスチャのスライス単位で扱えます。

  • 未対応

    GPUタイムスタンプ計測timestamp-query計測

    レンダーパス・コンピュートパスの開始と終了のGPU時刻を取得し、処理時間を計測できます。

    なぜ必要?

    非対応だとCPU側の時間しか測れず、描画が重い原因がGPUのどのパスにあるかを切り分けられません。

  • 未対応

    間接描画のインスタンス開始位置指定indirect-first-instance描画

    GPU側のバッファから描画命令を読む間接描画で、firstInstance に0以外を指定できます。

  • 未対応

    16bit浮動小数点シェーダーshader-f16シェーダー

    WGSLで16bit浮動小数点(f16)型を使えます。演算量とメモリ帯域を減らせます。

    なぜ必要?

    モバイルGPUや推論処理で効果が大きく、非対応だとすべてf32で計算するためフレーム時間が伸びます。

  • 未対応

    rg11b10ufloat への描画rg11b10ufloat-renderable描画

    rg11b10ufloat フォーマットをレンダーターゲットとして使えます。HDRの中間バッファを軽量に持てます。

  • 未対応

    bgra8unorm ストレージテクスチャbgra8unorm-storageテクスチャ

    bgra8unorm フォーマットのテクスチャにシェーダーから直接書き込めます。

  • 未対応

    32bit floatテクスチャのフィルタfloat32-filterableテクスチャ

    32bit float テクスチャをバイリニア補間でサンプリングできます。

    なぜ必要?

    高さマップや距離場のような精度が要るデータを、シェーダー側で手動補間せずに滑らかに読めます。

  • 未対応

    32bit floatターゲットのブレンドfloat32-blendable描画

    32bit float のレンダーターゲットでアルファブレンドなどの合成を使えます。

  • 未対応

    任意平面でのクリップclip-distancesシェーダー

    WGSLから clip_distances を出力し、任意の平面で図形を切り取れます。

    なぜ必要?

    水面の反射描画や断面表示のように、シーンの一部だけを平面で切りたい場面で使います。

  • 未対応

    デュアルソースブレンドdual-source-blending描画

    1つのフラグメントから2つの色を出力し、それらを使って合成できます。

    なぜ必要?

    サブピクセル単位のテキストアンチエイリアスなど、色ごとに異なるブレンド係数が要る表現で必要になります。

  • 未対応

    サブグループ演算subgroupsシェーダー

    同時に走るスレッドの集まり(サブグループ)の間で、共有メモリを介さず値を交換・集計できます。

    なぜ必要?

    リダクションやソート、ポストプロセスの高速化に効きます。非対応ならワークグループ共有メモリ経由の実装にフォールバックします。

  • 未対応

    サブグループサイズの指定subgroup-size-controlシェーダー

    パイプライン作成時にサブグループのサイズを指定し、GPU間での挙動差を抑えられます。

  • 未対応

    追加テクスチャフォーマット Tier1texture-formats-tier1テクスチャ

    標準セットに加えて、Tier1として定義された追加フォーマットの読み書きができます。

  • 未対応

    追加テクスチャフォーマット Tier2texture-formats-tier2テクスチャ

    Tier1をさらに広げた追加フォーマット群(ストレージテクスチャ用途を含む)を使えます。

  • 未対応

    プリミティブインデックス参照primitive-indexシェーダー

    フラグメントシェーダーから、いま描いている三角形の番号を参照できます。

    なぜ必要?

    ID書き出しによるピッキングや、頂点データを持たない可視化で使われます。

  • 未対応

    テクスチャ成分の並び替えtexture-component-swizzleテクスチャ

    テクスチャビューを作るときにRGBAの成分の並びを入れ替えられます。

    なぜ必要?

    素材ごとにチャンネル配置が違うテクスチャを、シェーダーを分けずに1本の実装で読めます。

上限値(limits)

どこまで大きな値を使えるかの上限です。仕様の既定値はすべての対応環境が保証する下限なので、既定値の範囲で書いたコードはどこでも動きます。上限を引き上げたいときは requestDevice({ requiredLimits: [...] }) で明示的に要求します。

  • 1Dテクスチャの最大幅

    maxTextureDimension1Dテクスチャ

    dimension が "1d" のテクスチャに指定できる幅の上限です。

    取得できません

    仕様の既定値 8,192

  • 2Dテクスチャの最大辺

    maxTextureDimension2Dテクスチャ

    通常の2Dテクスチャの幅と高さの上限です。レンダーターゲットの解像度もこの値に収める必要があります。

    取得できません

    仕様の既定値 8,192

  • 3Dテクスチャの最大辺

    maxTextureDimension3Dテクスチャ

    3Dテクスチャの幅・高さ・奥行きの上限です。ボリュームデータやLUTの解像度を左右します。

    取得できません

    仕様の既定値 2,048

  • テクスチャ配列の最大枚数

    maxTextureArrayLayersテクスチャ

    2Dテクスチャ配列に積める枚数の上限です。素材をまとめて1本のバインドで扱うときの上限になります。

    取得できません

    仕様の既定値 256

  • バインドグループの最大数

    maxBindGroupsバインド

    1つのパイプラインで同時に使えるバインドグループの数です。リソースを更新頻度ごとに分ける設計の余地を決めます。

    取得できません

    仕様の既定値 4

  • バインドグループ+頂点バッファの合計

    maxBindGroupsPlusVertexBuffersバインド

    バインドグループ数と頂点バッファ数の合計の上限です。両方を多用する構成で先に頭打ちになります。

    取得できません

    仕様の既定値 24

  • イミディエイトデータの最大バイト数

    maxImmediateSizeバインド

    バッファを経由せずコマンドに直接埋め込めるデータのバイト数です。小さな定数の差し替えを軽くできます。

    取得できません

    仕様の既定値 64 B(64)

  • 1バインドグループ内の最大バインド番号

    maxBindingsPerBindGroupバインド

    1つのバインドグループで使えるバインド番号の上限です。番号を飛ばして割り当てる設計のときに効きます。

    取得できません

    仕様の既定値 1,000

  • 動的オフセット付きユニフォームバッファ数

    maxDynamicUniformBuffersPerPipelineLayoutバインド

    パイプライン全体で使える、動的オフセット指定つきユニフォームバッファの数です。描画ごとに定数を切り替える手法の上限になります。

    取得できません

    仕様の既定値 8

  • 動的オフセット付きストレージバッファ数

    maxDynamicStorageBuffersPerPipelineLayoutバインド

    パイプライン全体で使える、動的オフセット指定つきストレージバッファの数です。

    取得できません

    仕様の既定値 4

  • シェーダーステージあたりのテクスチャ数

    maxSampledTexturesPerShaderStageバインド

    1つのシェーダーステージから同時に読めるテクスチャの数です。マテリアルの複雑さの上限に直結します。

    取得できません

    仕様の既定値 16

  • シェーダーステージあたりのサンプラー数

    maxSamplersPerShaderStageバインド

    1つのシェーダーステージで使えるサンプラーの数です。フィルタ設定の種類数の上限になります。

    取得できません

    仕様の既定値 16

  • シェーダーステージあたりのストレージバッファ数

    maxStorageBuffersPerShaderStageバインド

    1つのシェーダーステージから読み書きできるストレージバッファの数です。GPU計算の入出力の本数を決めます。

    取得できません

    仕様の既定値 8

  • 頂点シェーダーのストレージバッファ数

    maxStorageBuffersInVertexStageバインド

    頂点シェーダーから使えるストレージバッファの数です。互換モードの環境では0になることがあります。

    取得できません

    仕様の既定値 8

  • フラグメントシェーダーのストレージバッファ数

    maxStorageBuffersInFragmentStageバインド

    フラグメントシェーダーから使えるストレージバッファの数です。

    取得できません

    仕様の既定値 8

  • シェーダーステージあたりのストレージテクスチャ数

    maxStorageTexturesPerShaderStageバインド

    シェーダーから直接書き込めるテクスチャの数です。ポストプロセスや画像処理の同時出力数を決めます。

    取得できません

    仕様の既定値 4

  • 頂点シェーダーのストレージテクスチャ数

    maxStorageTexturesInVertexStageバインド

    頂点シェーダーから書き込めるテクスチャの数です。

    取得できません

    仕様の既定値 4

  • フラグメントシェーダーのストレージテクスチャ数

    maxStorageTexturesInFragmentStageバインド

    フラグメントシェーダーから書き込めるテクスチャの数です。

    取得できません

    仕様の既定値 4

  • シェーダーステージあたりのユニフォームバッファ数

    maxUniformBuffersPerShaderStageバインド

    1つのシェーダーステージで使えるユニフォームバッファの数です。

    取得できません

    仕様の既定値 12

  • ユニフォームバッファの最大バインドサイズ

    maxUniformBufferBindingSizeバッファ

    1回のバインドで参照できるユニフォームバッファの最大バイト数です。ボーン行列やライト配列をまとめて渡せる量を決めます。

    取得できません

    仕様の既定値 64 KiB(65,536)

  • ストレージバッファの最大バインドサイズ

    maxStorageBufferBindingSizeバッファ

    1回のバインドで参照できるストレージバッファの最大バイト数です。大きな点群やパーティクル配列を分割せずに扱えるかが決まります。

    取得できません

    仕様の既定値 128 MiB(134,217,728)

  • ユニフォームバッファのオフセット境界

    minUniformBufferOffsetAlignmentバッファ小さいほど良い

    ユニフォームバッファの動的オフセットに要求される境界です。小さいほど詰めて配置でき、無駄なパディングが減ります。

    取得できません

    仕様の既定値 256 B(256)

  • ストレージバッファのオフセット境界

    minStorageBufferOffsetAlignmentバッファ小さいほど良い

    ストレージバッファの動的オフセットに要求される境界です。小さいほど詰めて配置できます。

    取得できません

    仕様の既定値 256 B(256)

  • 頂点バッファの最大数

    maxVertexBuffers頂点

    1回の描画で同時にバインドできる頂点バッファの数です。属性をバッファごとに分ける設計の上限になります。

    取得できません

    仕様の既定値 8

  • バッファ1本の最大サイズ

    maxBufferSizeバッファ

    作成できるGPUバッファ1本のバイト数の上限です。大きなメッシュやボクセルデータを分割せずに置けるかが決まります。

    取得できません

    仕様の既定値 256 MiB(268,435,456)

  • 頂点属性の最大数

    maxVertexAttributes頂点

    1つの頂点に持たせられる属性(位置・法線・UV・スキンウェイトなど)の数です。

    取得できません

    仕様の既定値 16

  • 頂点バッファのストライド上限

    maxVertexBufferArrayStride頂点

    頂点1件あたりのバイト数の上限です。属性を1本のバッファに詰め込む構成で効いてきます。

    取得できません

    仕様の既定値 2 KiB(2,048)

  • シェーダー間で渡せる変数の数

    maxInterStageShaderVariables描画

    頂点シェーダーからフラグメントシェーダーへ受け渡せる変数の数です。補間して渡す情報量の上限になります。

    取得できません

    仕様の既定値 16

  • カラーアタッチメントの最大数

    maxColorAttachments描画

    1回のレンダーパスで同時に書き込めるカラーターゲットの数です。ディファードレンダリングのGバッファ構成を左右します。

    取得できません

    仕様の既定値 8

  • 1サンプルあたりのカラー総バイト数

    maxColorAttachmentBytesPerSample描画

    すべてのカラーアタッチメントを合わせた、1サンプルあたりのバイト数の上限です。枚数だけでなく、フォーマットの重さも合算されます。

    取得できません

    仕様の既定値 32 B(32)

  • ワークグループ共有メモリの上限

    maxComputeWorkgroupStorageSizeコンピュート

    コンピュートシェーダーの1ワークグループが使える共有メモリのバイト数です。タイル単位の処理でどれだけデータを手元に置けるかが決まります。

    取得できません

    仕様の既定値 16 KiB(16,384)

  • 1ワークグループの最大スレッド数

    maxComputeInvocationsPerWorkgroupコンピュート

    1ワークグループ内で走らせられるスレッド数の上限です(X×Y×Zの積)。

    取得できません

    仕様の既定値 256

  • ワークグループサイズX

    maxComputeWorkgroupSizeXコンピュート

    ワークグループサイズのX方向の上限です。

    取得できません

    仕様の既定値 256

  • ワークグループサイズY

    maxComputeWorkgroupSizeYコンピュート

    ワークグループサイズのY方向の上限です。

    取得できません

    仕様の既定値 256

  • ワークグループサイズZ

    maxComputeWorkgroupSizeZコンピュート

    ワークグループサイズのZ方向の上限です。

    取得できません

    仕様の既定値 64

  • ディスパッチの最大ワークグループ数

    maxComputeWorkgroupsPerDimensionコンピュート

    dispatchWorkgroups の各次元に指定できるワークグループ数の上限です。1回のディスパッチで処理できる件数の目安になります。

    取得できません

    仕様の既定値 65,535

WGSL言語機能

シェーダー言語WGSLの側で使える構文・命令です(navigator.gpu.wgslLanguageFeatures)。GPUの機能ではなく、ブラウザのシェーダーコンパイラが持つ機能です。

    表示している値は、この端末・このブラウザ・この時点でのGPUアダプターの申告値です。同じ端末でも、外部GPUの接続状態やブラウザの設定、省電力の状況によって変わることがあります。項目名と既定値はW3C WebGPU仕様(W3C WebGPU)に準拠しています。

    WebXR側の対応状況はWebXRデモ、ブラウザ横断の標準化状況は標準化・対応状況、端末ごとの仕様は対応デバイス一覧で確認できます。