GPU:requestAdapter() 方法

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

实验性: 这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格

GPU 接口的 requestAdapter() 方法返回一个 Promise,该 promise 会使用 GPUAdapter 对象实例兑现。这时,你可以请求 GPUDevice、适配器信息、特性以及配置。

注意,用户代理会选择是否返回一个适配器。如果可以,它会根据提供的 options 进行选择。如果没有提供 options,设备将提供对默认适配器的访问,这通常足够满足大多数的目的。

语法

js
requestAdapter()
requestAdapter(options)

参数

options 可选

一个包含以下属性的对象:

powerPreference 可选

一个枚举值,可用于为用户代理提供提示,指示应从系统可用的适配器中选择哪类适配器。可用值为:

  • undefined(或者未指定),不提供提示。
  • "low-power",为优先考虑节能而不是性能提供一个提示。如果你的应用程序在此设置下运行正常,建议使用它,因为它可以显著提高便携式设备的电池寿命。如果没有提供 options,这通常是默认值。
  • "high-performance",为优先考虑性能而不是功耗提供了一个提示。我们支持你在十分必要时才使用这个值,因为该值会显著地缩短便携式设备的寿命。它也可能导致 GPUDevice 损失增加——系统有时会切换到一个低功耗适配去去保存电力。

该提示的主要目的是为了影响在多 GPU 系统中影响哪个 GPU。例如,一些笔记本有低功耗集成 GPU 和高性能独立 GPU。不同的因素可能会影响返回的适配器,包括电池状态、连接的显示器或可更换的 GPU。

备用适配器

用户代理提供的适配器可能是备用适配器,如果它确定这是可用的最合适选项。备用适配器通常在性能上有着显著的限制,为了换取更广泛的兼容性、更可预测的行为或者更好的隐私保护。例如,一些浏览器可能通过备用的适配器提供一个基于软件的 API 实现。并非每个系统上的备用适配器都可用。

如果你希望阻止你的应用程序运行在备用的适配器,你应该在请求 GPUDevice 之前检查 GPUAdapter.isFallbackAdapter 属性。

备注: 该规范包含 requestAdapter()forceFallbackAdapter 选项。这是一个布尔值,如果设置为 true,则强制用户代理返回备用适配器(如果可用)。然而,任何浏览器仍没有支持这一点。

返回值

一个 Promise,如果请求成功,会兑现一个 GPUAdapter 对象实例。

如果未能获取合适的适配器,requestAdapter() 将决议为 null

异常

无。

示例

js
async function init() {
  if (!navigator.gpu) {
    throw Error("WebGPU not supported.");
  }

  const adapter = await navigator.gpu.requestAdapter();
  if (!adapter) {
    throw Error("Couldn't request WebGPU adapter.");
  }

  const device = await adapter.requestDevice();

  //...
}

规范

Specification
WebGPU
# dom-gpu-requestadapter

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
requestAdapter
Experimental
On AC power, discrete GPU returned if no powerPreference set.
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
In development. Supported in a pre-release version.
In development. Supported in a pre-release version.
No support
No support
Experimental. Expect behavior to change in the future.
See implementation notes.
User must explicitly enable this feature.
Has more compatibility info.

参见