Skip to content

Commit

Permalink
Translate WebGPU API interfaces
Browse files Browse the repository at this point in the history
  • Loading branch information
mikecat authored and mfuji09 committed Oct 7, 2023
1 parent 44cd3e3 commit 482914c
Show file tree
Hide file tree
Showing 3 changed files with 281 additions and 0 deletions.
107 changes: 107 additions & 0 deletions files/ja/web/api/gpusupportedfeatures/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
---
title: GPUSupportedFeatures
slug: Web/API/GPUSupportedFeatures
l10n:
sourceCommit: e18aa8e600733ebc25443075c563fd56361dfe98
---

{{APIRef("WebGPU API")}}{{SeeCompatTable}}

{{domxref("WebGPU API", "WebGPU API", "", "nocode")}} の **`GPUSupportedFeatures`** インターフェイスは、{{domxref("GPUAdapter")}} が対応している追加機能を表現する [`Set` 風オブジェクト](/ja/docs/Web/JavaScript/Reference/Global_Objects/Set#set_風のブラウザー_api)です。

現在のアダプター用の `GPUSupportedFeatures` オブジェクトは、{{domxref("GPUAdapter.features")}} 経由で参照できます。

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

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

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

{{InheritanceDiagram}}

## 利用可能な機能

実装や物理デバイスによって異なる可能性があり、時間の経過によっても変わる可能性があるので、ここでは WebGPU で使用可能な追加機能の完全な集合を列挙していませんリストは、仕様書内の [Feature Index](https://gpuweb.github.io/gpuweb/#feature-index) を参照してください。

## インスタンスプロパティ

以下のプロパティは、すべての読み取り専用の [`Set` 風オブジェクト](/ja/docs/Web/JavaScript/Reference/Global_Objects/Set#set_風のブラウザー_api)で使用可能です。(以下のリンクはグローバルオブジェクト {{jsxref("Set")}} のリファレンスページです)

- {{jsxref("Set.prototype.size", "size")}} {{Experimental_Inline}}
- : 集合に含まれる値の数を返します。

## インスタンスメソッド

以下のメソッドは、すべての読み取り専用の [`Set` 風オブジェクト](/ja/docs/Web/JavaScript/Reference/Global_Objects/Set#set_風のブラウザー_api)で使用可能です。(以下のリンクはグローバルオブジェクト {{jsxref("Set")}} のリファレンスページです)

- {{jsxref("Set.prototype.has()", "has()")}} {{Experimental_Inline}}
- : 指定の値の要素が集合に含まれるか否かを表す論理値を返します。
- {{jsxref("Set.prototype.values()", "values()")}} {{Experimental_Inline}}
- : 集合内の各要素の **** を挿入した順に出力する新しいイテレーターオブジェクトを返します。
- {{jsxref("Set.prototype.keys()", "keys()")}} {{Experimental_Inline}}
- : {{jsxref("Set.prototype.values()", "values()")}} の別名です。
- {{jsxref("Set.prototype.entries()", "entries()")}} {{Experimental_Inline}}
- : 集合内の各要素に対応する **配列 `[value, value]`** が挿入した順に含まれる新しいイテレーターオブジェクトを返します。
- {{jsxref("Set.prototype.forEach()", "forEach()")}} {{Experimental_Inline}}
- : 集合内の各要素について挿入した順に指定のコールバック関数を 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);
});

//...
}
```

## 仕様書

{{Specifications}}

## ブラウザーの互換性

{{Compat}}

## 関連情報

- [WebGPU API](/ja/docs/Web/API/WebGPU_API)
99 changes: 99 additions & 0 deletions files/ja/web/api/gpusupportedlimits/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
---
title: GPUSupportedLimits
slug: Web/API/GPUSupportedLimits
l10n:
sourceCommit: 840132f789c57681781d874734edd33da9d5ab90
---

{{APIRef("WebGPU API")}}{{SeeCompatTable}}

{{domxref("WebGPU API", "WebGPU API", "", "nocode")}} の **`GPUSupportedLimits`** インターフェイスは、{{domxref("GPUAdapter")}} が対応している制限を表現します。

現在のアダプター用の `GPUSupportedLimits` オブジェクトは、{{domxref("GPUAdapter.limits")}} プロパティ経由で参照できます。

ブラウザーは、ドライブバイフィンガープリンティングで利用可能な一意な情報を減らすため、それぞれの GPU の正確な制限を報告せず、それぞれの制限によって異なる段階的な値を報告する可能性が高いです。たとえば、ある制限用の段階は 2048、8192、32768 である可能性があります。GPU の実際の制限が 16384 である場合は、ブラウザーは 8192 を報告します。

異なるブラウザーは異なる扱いをする可能性があり、段階の値は時間の経過で変わる可能性があるため、制限の正確な値を予測するのは難しいです。徹底的にテストを行うことを推奨します。

{{InheritanceDiagram}}

## インスタンスプロパティ

`GPUSupportedLimits` オブジェクトのプロパティでは以下の制限が表現されます。これらの制限が何と関係するかの詳細な説明は、仕様書の [Limits](https://gpuweb.github.io/gpuweb/#limits) 節を参照してください。

| 制限名 | デフォルト値 |
| ------------------------------------------- | ------------------------ |
| `maxTextureDimension1D` | 8192 |
| `maxTextureDimension2D` | 8192 |
| `maxTextureDimension3D` | 2048 |
| `maxTextureArrayLayers` | 256 |
| `maxBindGroups` | 4 |
| `maxBindingsPerBindGroup` | 640 |
| `maxDynamicUniformBuffersPerPipelineLayout` | 8 |
| `maxDynamicStorageBuffersPerPipelineLayout` | 4 |
| `maxSampledTexturesPerShaderStage` | 16 |
| `maxSamplersPerShaderStage` | 16 |
| `maxStorageBuffersPerShaderStage` | 8 |
| `maxStorageTexturesPerShaderStage` | 4 |
| `maxUniformBuffersPerShaderStage` | 12 |
| `maxUniformBufferBindingSize` | 65536 bytes |
| `maxStorageBufferBindingSize` | 134217728 bytes (128 MB) |
| `minUniformBufferOffsetAlignment` | 256 bytes |
| `minStorageBufferOffsetAlignment` | 256 bytes |
| `maxVertexBuffers` | 8 |
| `maxBufferSize` | 268435456 bytes (256 MB) |
| `maxVertexAttributes` | 16 |
| `maxVertexBufferArrayStride` | 2048 bytes |
| `maxInterStageShaderComponents` | 60 |
| `maxInterStageShaderVariables` | 16 |
| `maxColorAttachments` | 8 |
| `maxColorAttachmentBytesPerSample` | 32 |
| `maxComputeWorkgroupStorageSize` | 16384 bytes |
| `maxComputeInvocationsPerWorkgroup` | 256 |
| `maxComputeWorkgroupSizeX` | 256 |
| `maxComputeWorkgroupSizeY` | 256 |
| `maxComputeWorkgroupSizeZ` | 64 |
| `maxComputeWorkgroupsPerDimension` | 65535 |

##

以下のコードでは、`GPUAdapter.limits``maxBindGroups` の値を問い合わせ、6 以上かどうかをチェックします。理論上のサンプルアプリケーションは理想的には 6 個のバインドグループを必要とするので、返された値が 6 以上の場合は、`requiredLimits` オブジェクトに上限値 6 を追加適用します。そして、{{domxref("GPUAdapter.requestDevice()")}} を用いてこの制限の要件を満たすデバイスを要求します。

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

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

const requiredLimits = {};

// アプリケーションは理想的には 6 個のバインドグループが必要なので、
// アプリケーションで必要な分の要求を試みる
if (adapter.limits.maxBindGroups >= 6) {
requiredLimits.maxBindGroups = 6;
}

const device = await adapter.requestDevice({
requiredLimits,
});

// ...
}
```

## 仕様書

{{Specifications}}

## ブラウザーの互換性

{{Compat}}

## 関連情報

- [WebGPU API](/ja/docs/Web/API/WebGPU_API)
75 changes: 75 additions & 0 deletions files/ja/web/api/wgsllanguagefeatures/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
title: WGSLLanguageFeatures
slug: Web/API/WGSLLanguageFeatures
l10n:
sourceCommit: cf57e1e1e1756fec85425d01294ffeabc3b5b451
---

{{APIRef("WebGPU API")}}{{SeeCompatTable}}

{{domxref("WebGPU API", "WebGPU API", "", "nocode")}} の **`WGSLLanguageFeatures`** インターフェイスは、この WebGPU の実装が対応している [WGSL 言語の拡張](https://gpuweb.github.io/gpuweb/wgsl/#language-extension)を報告する [Set 風](/ja/docs/Web/JavaScript/Reference/Global_Objects/Set)オブジェクトです。

`WGSLLanguageFeatures` オブジェクトは {{domxref("GPU.wgslLanguageFeatures")}} プロパティ経由で参照します。

> **メモ:** API をサポートしているすべてのブラウザーの WebGPU ですべての WGSL 言語の拡張が使えるわけではありません。使うことにした拡張をすべて徹底的にテストすることを推奨します。
{{InheritanceDiagram}}

## 利用可能な機能

利用可能な WGSL 言語の拡張は実装や物理デバイスによって異なる可能性があり、時間の経過によっても変わる可能性があります。そのため、ここでは列挙しません。完全なリストは、WGSL の仕様書内の [WGSL 言語の拡張](https://gpuweb.github.io/gpuweb/wgsl/#language-extension)を参照してください。

## インスタンスプロパティ

以下のプロパティは、すべての読み取り専用の [Set 風](/ja/docs/Web/JavaScript/Reference/Global_Objects/Set)オブジェクトで使用可能です。

- {{jsxref("Set.prototype.size", "size")}} {{Experimental_Inline}}
- : 集合に含まれる値の数を返します。

## インスタンスメソッド

以下のメソッドは、すべての読み取り専用の [Set 風](/ja/docs/Web/JavaScript/Reference/Global_Objects/Set)オブジェクトで使用可能です。

- {{jsxref("Set.prototype.has()", "has()")}} {{Experimental_Inline}}
- : 指定の値の要素が集合に含まれるか否かを表す論理値を返します。
- {{jsxref("Set.prototype.values()", "values()")}} {{Experimental_Inline}}
- : 集合内の各要素の **** を挿入した順に出力する新しいイテレーターオブジェクトを返します。
- {{jsxref("Set.prototype.keys()", "keys()")}} {{Experimental_Inline}}
- : {{jsxref("Set.prototype.values()", "values()")}} の別名です。
- {{jsxref("Set.prototype.entries()", "entries()")}} {{Experimental_Inline}}
- : 集合内の各要素に対応する **配列 `[value, value]`** が挿入した順に含まれる新しいイテレーターオブジェクトを返します。
- {{jsxref("Set.prototype.forEach()", "forEach()")}} {{Experimental_Inline}}
- : 集合内の各要素について挿入した順に指定のコールバック関数を 1 度ずつ呼び出します。

##

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

const wgslFeatures = navigator.gpu.wgslLanguageFeatures;

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

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

// ...
```

## 仕様書

{{Specifications}}

## ブラウザーの互換性

{{Compat}}

## 関連情報

- [WebGPU API](/ja/docs/Web/API/WebGPU_API)

0 comments on commit 482914c

Please sign in to comment.