Skip to content

Commit

Permalink
Translate GPUAdapter
Browse files Browse the repository at this point in the history
  • Loading branch information
mikecat authored and mfuji09 committed Oct 10, 2023
1 parent bc0acc6 commit ffb3aff
Show file tree
Hide file tree
Showing 6 changed files with 414 additions and 0 deletions.
62 changes: 62 additions & 0 deletions files/ja/web/api/gpuadapter/features/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
title: "GPUAdapter: features プロパティ"
slug: Web/API/GPUAdapter/features
l10n:
sourceCommit: b6984118ac9482e683a654edfefa4b426ca3c7ca
---

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

{{domxref("GPUAdapter")}} インターフェイスの読み取り専用プロパティ **`features`** は、アダプターが対応している追加の機能を表現する {{domxref("GPUSupportedFeatures")}} オブジェクトを返します。

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

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

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

##

{{domxref("GPUSupportedFeatures")}} オブジェクトのインスタンスです。これは [Set 風](/ja/docs/Web/JavaScript/Reference/Global_Objects/Set)オブジェクトです。

##

以下のコードでは、{{domxref("GPUAdapter")}} で `texture-compression-astc` 機能が利用可能かをチェックします。利用可能であれば、それを配列 `requiredFeatures` にプッシュし、{{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 requiredFeatures = [];

if (adapter.features.has("texture-compression-astc")) {
requiredFeatures.push("texture-compression-astc");
}

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

// ...
}
```

## 仕様書

{{Specifications}}

## ブラウザーの互換性

{{Compat}}

## 関連情報

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

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

{{domxref("WebGPU API", "WebGPU API", "", "nocode")}} の **`GPUAdapter`** インターフェイスは、GPU アダプターを表します。これを用いて {{domxref("GPUDevice")}}、アダプターの情報、機能、制限を要求できます。

`GPUAdapter` オブジェクトは {{domxref("GPU.requestAdapter()")}} メソッドを用いて要求できます。

{{InheritanceDiagram}}

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

- {{domxref("GPUAdapter.features", "features")}} {{Experimental_Inline}} {{ReadOnlyInline}}
- : アダプターが対応している追加の機能を表現する {{domxref("GPUSupportedFeatures")}} オブジェクトです。
- {{domxref("GPUAdapter.isFallbackAdapter", "isFallbackAdapter")}} {{Experimental_Inline}} {{ReadOnlyInline}}
- : 論理値です。アダプターが[フォールバックアダプター](/ja/docs/Web/API/GPU/requestAdapter#フォールバックアダプター)である場合は `true` を返し、そうでない場合は `false` を返します。
- {{domxref("GPUAdapter.limits", "limits")}} {{Experimental_Inline}} {{ReadOnlyInline}}
- : アダプターが対応している制限を表現する {{domxref("GPUSupportedLimits")}} オブジェクトです。

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

- {{domxref("GPUAdapter.requestAdapterInfo", "requestAdapterInfo()")}} {{Experimental_Inline}}
- : アダプターに関する特定用の情報が格納された {{domxref("GPUAdapterInfo")}} オブジェクトで解決する {{jsxref("Promise")}} を返します。
- {{domxref("GPUAdapter.requestDevice", "requestDevice()")}} {{Experimental_Inline}}
- : GPU とのやりとり用の第一インターフェイスである {{domxref("GPUDevice")}} オブジェクトで解決する {{jsxref("Promise")}} を返します。

##

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

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

const device = await adapter.requestDevice();

//...
}
```

## 仕様書

{{Specifications}}

## ブラウザーの互換性

{{Compat}}

## 関連情報

- [WebGPU API](/ja/docs/Web/API/WebGPU_API)
46 changes: 46 additions & 0 deletions files/ja/web/api/gpuadapter/isfallbackadapter/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
title: "GPUAdapter: isFallbackAdapter プロパティ"
slug: Web/API/GPUAdapter/isFallbackAdapter
l10n:
sourceCommit: b6984118ac9482e683a654edfefa4b426ca3c7ca
---

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

{{domxref("GPUAdapter")}} インターフェイスの読み取り専用プロパティ **`isFallbackAdapter`** は、アダプターが[フォールバックアダプター](/ja/docs/Web/API/GPU/requestAdapter#フォールバックアダプター)である場合は `true` を返し、そうでない場合は `false` を返します。

##

論理値です。

##

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

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

const fallback = adapter.isFallbackAdapter;
console.log(fallback);

// ...

```
## 仕様書
{{Specifications}}
## ブラウザーの互換性
{{Compat}}
## 関連情報
- [WebGPU API](/ja/docs/Web/API/WebGPU_API)
61 changes: 61 additions & 0 deletions files/ja/web/api/gpuadapter/limits/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
title: "GPUAdapter: limits プロパティ"
slug: Web/API/GPUAdapter/limits
l10n:
sourceCommit: b6984118ac9482e683a654edfefa4b426ca3c7ca
---

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

{{domxref("GPUAdapter")}} インターフェイスの読み取り専用プロパティ **`limits`** は、アダプターが対応している制限を表現する {{domxref("GPUSupportedLimits")}} オブジェクトを返します。

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

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

##

{{domxref("GPUSupportedLimits")}} オブジェクトのインスタンスです。

##

以下のコードでは、`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)
61 changes: 61 additions & 0 deletions files/ja/web/api/gpuadapter/requestadapterinfo/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
title: "GPUAdapter: requestAdapterInfo() メソッド"
slug: Web/API/GPUAdapter/requestAdapterInfo
l10n:
sourceCommit: b6984118ac9482e683a654edfefa4b426ca3c7ca
---

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

{{domxref("GPUAdapter")}} インターフェイスの **`requestAdapterInfo()`** メソッドは、アダプターに関する特定用の情報が格納された {{domxref("GPUAdapterInfo")}} オブジェクトで解決する {{jsxref("Promise")}} を返します。

このメソッドの背景の意図は、開発者がユーザーの GPU の特定の詳細を要求し、GPU に固有のバグの回避策を先手を取って適用したり、異なる GPU のアーキテクチャにより合う異なるコードパスを提供したりできるようにすることです。このような情報を提供すると、フィンガープリンティングに利用でき、セキュリティリスクが発生します。そのため、共有される情報は最小限にとどめられ、異なるブラウザーのベンダー間で情報の種類と粒度を共通化するでしょう。

> **メモ:** 仕様書には `requestAdapterInfo()` 用の引数として、上記のセキュリティリスクを低減することを意図した `unmaskHints` が存在します。これに対応すれば、開発者は本当に知る必要がある値を指定することができるようになり、ユーザーはメソッドが呼び出されたとき情報を共有してよいかを尋ねる許可プロンプトを提示されるようになるでしょう。許可プロンプトで守られる場合、メソッドのフィンガープリンティングの対象としての有用度は下がるので、ブラウザーのベンダーはより有用な情報を共有するようになるでしょう。
## 構文

```js-nolint
requestAdapterInfo()
```

### 引数

なし

### 返値

{{domxref("GPUAdapterInfo")}} オブジェクトのインスタンスで解決する {{jsxref("Promise")}} です。

##

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

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

const adapterInfo = await adapter.requestAdapterInfo();
console.log(adapterInfo.vendor);
console.log(adapterInfo.architecture);

// ...
}
```

## 仕様書

{{Specifications}}

## ブラウザーの互換性

{{Compat}}

## 関連情報

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

0 comments on commit ffb3aff

Please sign in to comment.