diff --git a/files/ja/web/api/gpuadapter/features/index.md b/files/ja/web/api/gpuadapter/features/index.md new file mode 100644 index 00000000000000..bf456a0433b4fd --- /dev/null +++ b/files/ja/web/api/gpuadapter/features/index.md @@ -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) diff --git a/files/ja/web/api/gpuadapter/index.md b/files/ja/web/api/gpuadapter/index.md new file mode 100644 index 00000000000000..a3e3649031d5d4 --- /dev/null +++ b/files/ja/web/api/gpuadapter/index.md @@ -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) diff --git a/files/ja/web/api/gpuadapter/isfallbackadapter/index.md b/files/ja/web/api/gpuadapter/isfallbackadapter/index.md new file mode 100644 index 00000000000000..8e7be8c7805d06 --- /dev/null +++ b/files/ja/web/api/gpuadapter/isfallbackadapter/index.md @@ -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) diff --git a/files/ja/web/api/gpuadapter/limits/index.md b/files/ja/web/api/gpuadapter/limits/index.md new file mode 100644 index 00000000000000..bac79ea8dffa8a --- /dev/null +++ b/files/ja/web/api/gpuadapter/limits/index.md @@ -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) diff --git a/files/ja/web/api/gpuadapter/requestadapterinfo/index.md b/files/ja/web/api/gpuadapter/requestadapterinfo/index.md new file mode 100644 index 00000000000000..ee6764ef7b9f60 --- /dev/null +++ b/files/ja/web/api/gpuadapter/requestadapterinfo/index.md @@ -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) diff --git a/files/ja/web/api/gpuadapter/requestdevice/index.md b/files/ja/web/api/gpuadapter/requestdevice/index.md new file mode 100644 index 00000000000000..9cfc7b6b9a0003 --- /dev/null +++ b/files/ja/web/api/gpuadapter/requestdevice/index.md @@ -0,0 +1,123 @@ +--- +title: "GPUAdapter: requestDevice() メソッド" +slug: Web/API/GPUAdapter/requestDevice +l10n: + sourceCommit: bc35e70e543bc32e4e1eb0436b18f11e17fb470c +--- + +{{APIRef("WebGPU API")}}{{SeeCompatTable}} + +{{domxref("GPUAdapter")}} インターフェイスの **`requestDevice()`** メソッドは、GPU とのやりとり用の第一インターフェイスである {{domxref("GPUDevice")}} オブジェクトで解決する {{jsxref("Promise")}} を返します。 + +## 構文 + +```js-nolint +requestDevice() +requestDevice(descriptor) +``` + +### 引数 + +- `descriptor` {{optional_inline}} + - : 以下のプロパティを持つオブジェクトです。 + - `defaultQueue` {{optional_inline}} + - : デバイスのデフォルトの ({{domxref("GPUDevice.queue")}} が返す) {{domxref("GPUQueue")}} の情報を提供するオブジェクトです。このオブジェクトは 1 個のプロパティ `label` を持ち、{{domxref("GPUQueue.label", "label")}} の値を指定したデフォルトキューを提供します。値が指定されない場合のデフォルト値は空のオブジェクトであり、デフォルトキューのラベルは空文字列になります。 + - `label` {{optional_inline}} + - : {{domxref("GPUDevice")}} の特定に用いることができるラベルを表す文字列です。たとえば、コンソールでの警告や {{domxref("GPUError")}} のメッセージで使用できます。 + - `requiredFeatures` {{optional_inline}} + - : 返される {{domxref("GPUDevice")}} が対応することを要求する追加機能を表す文字列の配列です。`GPUAdapter` がこれらの機能を提供できない場合は、`requestDevice()` の呼び出しは失敗します。とりうる機能の完全なリストは、{{domxref("GPUSupportedFeatures")}} を参照してください。値が指定されない場合のデフォルトは空の配列です。 + - `requiredLimits` {{optional_inline}} + - : 返される {{domxref("GPUDevice")}} が対応することを要求する制限を表すプロパティが格納されたオブジェクトです。`GPUAdapter` がこれらの制限を提供できない場合は、`requestDevice()` の呼び出しは失敗します。それぞれのキーは {{domxref("GPUSupportedLimits")}} のメンバーである名前でなければなりません。値が指定されない場合のデフォルトは空のオブジェクトです。 + +> **メモ:** 下層のハードウェアが対応している場合でも、すべての機能と制限が対応しているすべてのブラウザーの WebGPU で利用可能なわけではありません。詳しくは、{{domxref("GPUAdapter.features", "features")}} および {{domxref("GPUAdapter.limits", "limits")}} のページを参照してください。 + +### 返値 + +{{domxref("GPUDevice")}} オブジェクトのインスタンスで解決する {{jsxref("Promise")}} です。 + +重複して呼び出した場合、すなわち `requestDevice()` が既に呼び出されている {{domxref("GPUAdapter")}} で `requestDevice()` を呼び出した場合、プロミスは即ロストするデバイスで解決します。そして、デバイスがどうしてロストしたのかの情報を {{domxref("GPUDevice.lost")}} から取得できます。 + +### 例外 + +- `OperationError` {{domxref("DOMException")}} + - : `requiredLimits` プロパティに含まれる制限が有効な制限でないか、値がアダプターの制限値より高いために {{domxref("GPUAdapter")}} が対応していない場合、プロミスは `OperationError` で拒否されます。 +- `TypeError` {{domxref("DOMException")}} + - : `requiredFeatures` プロパティに含まれる機能に {{domxref("GPUAdapter")}} が対応していない場合、プロミスは `TypeError` で拒否されます。 + +## 例 + +### 基本的な例 + +```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(); + + // ... +} +``` + +### 特定の機能と制限を要求する + +以下のコードでは、 + +1. {{domxref("GPUAdapter")}} で `texture-compression-astc` 機能が利用可能かをチェックします。利用可能であれば、それを配列 `requiredFeatures` にプッシュします。 +2. `GPUAdapter.limits` の `maxBindGroups` の値を問い合わせ、6 以上であるかをチェックします。理論上のサンプルアプリケーションは理想的には 6 個のバインドグループを必要とするので、返された値が 6 以上の場合は `requiredLimits` オブジェクトに最大値 6 を追加適用します。 +3. これらの機能および制限の要件に `defaultQueue` ラベルを追加し、デバイスを要求します。 + +```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 requiredLimits = {}; + + // アプリケーションは理想的には 6 個のバインドグループを必要とするので、 + // アプリケーションが必要とする分の要求を試みる + if (adapter.limits.maxBindGroups >= 6) { + requiredLimits.maxBindGroups = 6; + } + + const device = await adapter.requestDevice({ + defaultQueue: { + label: "myqueue", + }, + requiredFeatures, + requiredLimits, + }); + + // ... +} +``` + +## 仕様書 + +{{Specifications}} + +## ブラウザーの互換性 + +{{Compat}} + +## 関連情報 + +- [WebGPU API](/ja/docs/Web/API/WebGPU_API)