このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

GPUSupportedFeatures

利用可能性は限定的

この機能はベースラインではありません。最も広く使用されているブラウザーの一部で動作しません。

Want more browser support for this feature? Tell us why.

安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

メモ: この機能はウェブワーカー内で利用可能です。

WebGPU APIGPUSupportedFeatures インターフェイスは、GPUAdapter が対応している追加機能を表現する Set 風オブジェクトです。

現在のアダプター用の GPUSupportedFeatures オブジェクトは、GPUAdapter.features 経由で参照できます。このツールを使用して、現在の環境がどの機能を対応しているかを確認してください。特定の機能を有効にした GPUDevice を作成するには、GPUAdapter.requestDevice() 記述子の requiredFeatures 配列でその機能を指定する必要があります。

下層のハードウェアで対応していても、対応するすべてのブラウザーの WebGPU ですべての機能が利用できるわけではないことに注意するべきです。これは、たとえば以下の場合など、下層のシステム、ブラウザー、アダプターの制限によるものである可能性があります。

  • 下層のシステムが、あるブラウザーと互換性がある方式で機能を利用可能にする保証ができないかもしれません。
  • ブラウザーのベンダーがある機能への対応を実装するセキュアな方法をまだ見つけていないか、単にまだ実装に手が回っていないかもしれません。

WebGPU アプリケーションにおいて特定の追加機能の恩恵を受けたい場合は、徹底的にテストを行うことを推奨します。

利用可能な機能

WebGPU では、以下の追加機能が定義されています。利用できる機能の具体的な内容は、実装や物理端末によって異なり、時間経過に伴う変化があることに留意してください。

機能名 説明
bgra8unorm-storage 有効にすると、bgra8unorm-formatSTORAGE_BINDING usage を持つ GPUTexture を使用することができます。
clip-distances 有効にすると、WGSL で clip_distances を使用することができます。
core-features-and-limits 有効にすると、GPUAdapter / GPUDevice が WebGPU のすべての「コア」機能と制限を使用できることを示し、これによりアプリケーションは現行のプラットフォームグラフィック API を使用して端末に対応できるようになります。デフォルトで、すべてのアダプターで core-features-and-limits 機能が有効になっており、したがってコア WebGPU に対応しています。「互換モード」のアダプターを作成するには、GPU.requestAdapter() の呼び出しで featureLevel の値を compatibility に指定してください。互換モードでは、パフォーマンスや機能セットを犠牲にする代わりに、古いグラフィック API(Direct3D 11 や OpenGL ES 3.1など)のサポートが提供されます。

なお、互換モードのアダプターは、コア WebGPU に対応していない端末上でのみ作成される点に注意してください。コア WebGPU を対応している端末では、アダプターはコア WebGPU を対応し(core-features-and-limits が有効になります)、最新の機能を使用することができます(例については、必要な場合にのみ互換モードを使用するを参照してください)。
depth-clip-control 有効にすると、深度クリッピングを無効にすることができます。 depth-clip-control が有効になっている場合、GPURenderPipeline を作成する際に、createRenderPipeline() または createRenderPipelineAsync() 記述子の一部として含まれる primitive オブジェクトに対して、unclippedDepth プロパティが利用可能になります。primitive は、パイプラインが頂点入力からプリミティブをどのように構築し、ラスタライズするかを記述します。深度クリッピングを無効にするには、unclipped-depthtrue に設定してください。
depth32float-stencil8 有効にすると、depth32float-stencil8 書式のテクスチャを作成することができるようになります。depth32float-stencil8 が有効になっている場合、depth32float-stencil8 の値を使用することができます createTexture() 記述子の format プロパティとして使用できます。
dual-source-blending 有効にすると、WGSL での dual_source_blending の使用が可能になります。これは、ピクセルシェーダーの出力(@blend_src(0) および @blend_src(1))の両方を、@location(0) にある単一のカラーアタッチメントとの混合演算への入力として使用します。WebGPU では、dual-source-blending を有効にすると、以下の混合係数操作をすることができる(これらは、createRenderPipeline() および createRenderPipelineAsync()dstFactor および srcFactor プロパティの記述子 src1, one-minus-src1, src1-alpha, one-minus-src1-alpha で指定します)。
float32-blendable 有効にすると、r32float-, rg32float-, rgba32float-formatGPUTexture混合を許可します。
float32-filterable 有効にすると、r32float-, rg32float-, rgba32float-formatGPUTextureフィルタリングを許可します。
indirect-first-instance 有効にすると、GPURenderPassEncoder および GPURenderBundleEncoder インスタンスで利用できる drawIndirect() および drawIndexedIndirect() メソッドの indirectBuffer プロパティにおいて、0 以外の firstInstance 値を使用することができます。
primitive-index 有効にすると、WGSL で primitive_index 組み込み変数を使用することができるようになります。この組み込み入力値は、対応しているハードウェア上で、既存の vertex_index および instance_index 組み込み変数と同様に、プリミティブごとのインデックスをフラグメントシェーダーに提供します。primitive_index 組み込み変数は、仮想化形状などの高度なグラフィック技術に有益です。
rg11b10ufloat-renderable 有効にすると、RENDER_ATTACHMENTをすることができる rg11b10ufloat-formatGPUTextureRENDER_ATTACHMENT usage およびそれらの混合とマルチサンプリングを有効にします。
shader-f16 有効にすると、WGSL で半精度浮動小数点型 f16 を使用することができます。
subgroups 有効にすると、WGSL で サブグループ を使用することができるようになります。サブグループにより SIMD レベルの並列処理が可能となり、ワークグループ内のスレッド間で通信を行い、数値の合計計算などの集合的な数学演算を実行できるようになります。また、スレッド間のデータ共有を効率的に行う方法も提供されます。なお、subgroupMinSize および subgroupMaxSize プロパティは、例えば特定のサイズのサブグループが要求されるハードコーディングされたアルゴリズムがある場合などに、その要件を満たしているかを調べるのに使用できます。shader-f16 および subgroups の両方の機能を備えた GPUDevice をリクエストする場合、サブグループで f16 値を使用することができます。subgroups が有効になっている場合、WGSL 言語機能である subgroup_id も使用できます。
texture-component-swizzle 有効にすると、GPUTexture.createView() を呼び出す際に swizzle プロパティを設定できるようになります。この機能により、シェーダーからアクセスされる際に、テクスチャビュー内のテクスチャの赤、緑、青、およびアルファチャンネルの値を再配置したり置き換えたりすることが可能になります。
texture-compression-bc 有効にすると、2 次元 BC 圧縮テクスチャを作成することができます。texture-compression-bc が有効になっている場合、GPUTexture を作成する際、createTexture() 記述子の format プロパティには、bc1-rgba-unorm, bc1-rgba-unorm-srgb, bc2-rgba-unorm, bc2-rgba-unorm-srgb, bc3-rgba-unorm, bc3-rgba-unorm-srgb, bc4-r-unorm, bc4-r-snorm, bc5-rg-unorm, bc5-rg-snorm, bc6h-rgb-ufloat, bc6h-rgb-float, bc7-rgba-unorm, bc7-rgba-unorm-srgb の値を使用することができます。
texture-compression-bc-sliced-3d 有効にすると、三次元 BC 圧縮テクスチャの作成をすることができます。texture-compression-bc-sliced-3d を有効にする場合、最初の二次元で BC テクスチャ形式を使用できるようにするため(以上、texture-compression-bc を参照)、texture-compression-bc も同時に有効にする必要があります。texture-compression-bc-sliced-3d を有効にすると、三次元目でも同じテクスチャを使用できるようになります。
texture-compression-astc 有効にすると、二次元 ASTC 圧縮テクスチャが作成できます。texture-compression-astc が有効になっている場合、GPUTextureを作成する際、createTexture() 記述子の format プロパティには、astc-4x4-unormastc-4x4-unorm-srgbastc-5x4-unormastc-5x4-unorm-srgbastc-5x5-unormastc-5x5-unorm-srgbastc-6x5-unormastc-6x5-unorm-srgbastc-6x6-unormastc-6x6-unorm-srgbastc-8x5-unormastc-8x5-unorm-srgbastc-8x6-unormastc-8x6-unorm-srgbastc-8x8-unormastc-8x8-unorm-srgbastc-10x5-unormastc-10x5-unorm-srgbastc-10x6-unormastc-10x6-unorm-srgbastc-10x8-unormastc-10x8-unorm-srgbastc-10x10-unormastc-10x10-unorm-srgbastc-12x10-unormastc-12x10-unorm-srgbastc-12x12-unorm``astc-12x12-unorm-srgb の値を使用できます。
texture-compression-astc-sliced-3d 有効にすると、三次元 ASTC 圧縮テクスチャを作成することができます。texture-compression-astc-sliced-3d を有効にする場合は、最初の二次元で ASTC テクスチャ形式を使用できるようにするため(以上の texture-compression-astc を参照)、texture-compression-astc も同時に有効にする必要があります。texture-compression-astc-sliced-3d を有効にすると、同じテクスチャを三次元でも使用できるようになります。
texture-compression-etc2 有効にすると、二次元の ETC2 圧縮テクスチャを作成することができます。texture-compression-etc2 が有効になっている場合、GPUTextureを作成する際、createTexture() 記述子の format プロパティには、etc2-rgb8unormetc2-rgb8unorm-srgbetc2-rgb8a1unormetc2-rgb8a1unorm-srgbetc2-rgba8unormetc2-rgba8unorm-srgbeac-r11unormeac-r11snormeac-rg11unormeac-rg11snorm の値を使用できます。
texture-formats-tier1 有効にすると、rg11b10ufloat-renderable 機能を自動的に有効にすることができる。書式化された GPUTexture を作成することができる(GPUDevice.createTexture() を使って)。第 1 階層で指定された形式で GPUTexture を作成できるようになります。第 1 階層のテクスチャ形式セットは、開発者が既存のコンテンツを WebGPU の低機能版に合わせて書き直すことなく、ウェブへ移植することができるように設計されています。
texture-formats-tier2 有効にすると、rg11b10ufloat-renderable および texture-formats-tier1 機能が自動的に有効になり、GPUTexture を作成することができる(GPUDevice.createTexture() を使って)。Tier 2 で指定された形式を持つ GPUTexture の作成が可能になります。Tier 2 のテクスチャ形式セットは、「コア」WebGPU では対応していないストレージテクスチャ形式に対応しており、高度な用途で要求されます。
timestamp-query 有効にすると、計算パスおよびレンダリングパスの実行時間を測定するタイムスタンプクエリーを実行することができる。timestamp-query が有効になっている場合、タイムスタンプの値を設定することができる。GPUQuerySet を作成する際、createQuerySet() 記述子の type プロパティに timestamp 値を設定できます。さらに、GPUQuerySet を作成する際は、timestamp プロパティを GPUQuerySet デскриプタに設定できます。また、GPUComputePassEncoder および GPURenderPassEncoder をそれぞれ作成する際は、timestampWrites プロパティを beginComputePass() および beginRenderPass() 記述子に対して設定できます。GPUQuerySet オブジェクトは、timestampWrites プロパティに含まれるオブジェクト内で参照され、タイムスタンプの書き込み先を指定するために使用されます。

インスタンスプロパティ

以下のプロパティは、すべての読み取り専用の Set 風オブジェクトで使用可能です。(以下のリンクはグローバルオブジェクト Set のリファレンスページです)

size

集合に含まれる値の数を返します。

インスタンスメソッド

以下のメソッドは、すべての読み取り専用の Set 風オブジェクトで使用可能です。(以下のリンクはグローバルオブジェクト Set のリファレンスページです)

has()

指定の値の要素が集合に含まれるか否かを表す論理値を返します。

values()

集合内の各要素の を挿入した順に出力する新しいイテレーターオブジェクトを返します。

keys()

values() の別名です。

entries()

集合内の各要素に対応する 配列 [value, value] が挿入した順に含まれる新しいイテレーターオブジェクトを返します。

forEach()

集合内の各要素について挿入した順に指定のコールバック関数を 1 度ずつ呼び出します。

js
async function init() {
  if (!navigator.gpu) {
    throw Error("WebGPU に対応していません。");
  }

  const adapter = await navigator.gpu.requestAdapter();
  if (!adapter) {
    throw Error("WebGPU のアダプターを要求できませんでした。");
  }

  const adapterFeatures = adapter.features;

  // 集合のサイズを返す
  console.log(adapterFeatures.size);

  // アダプターがある機能に対応しているかどうかをチェックする
  console.log(adapterFeatures.has("texture-compression-astc"));

  // values() を用いて集合のすべての値を走査する
  const valueIterator = adapterFeatures.values();
  for (const value of valueIterator) {
    console.log(value);
  }

  // keys() を用いて集合のすべての値を走査する
  const keyIterator = adapterFeatures.keys();
  for (const value of keyIterator) {
    console.log(value);
  }

  // entries() を用いて集合のすべての値を走査する
  const entryIterator = adapterFeatures.entries();
  for (const entry of entryIterator) {
    console.log(entry[0]);
  }

  // forEach() を用いて集合のすべての値を走査する
  adapterFeatures.forEach((value) => {
    console.log(value);
  });

  // …
}

仕様書

仕様書
WebGPU
# gpusupportedfeatures

ブラウザーの互換性

関連情報