GPU: requestAdapter() 方法

实验性: 这是一个 实验性技术
在生产环境中使用此功能之前,请仔细检查 浏览器兼容性表

安全上下文:此功能仅在 安全上下文 (HTTPS) 中可用,在某些或所有 支持的浏览器 中可用。

requestAdapter() 方法是 GPU 接口的方法,它返回一个 Promise,该方法会使用 GPUAdapter 对象实例来实现。

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

语法

js
requestAdapter()
requestAdapter(options)

参数

options 可选

包含以下属性的对象

powerPreference 可选

一个枚举值,可以用来向用户代理提供一个提示,表明应该从系统可用的适配器中选择哪一类适配器。可用的值是

  • undefined(或未指定),不提供任何提示。
  • "low-power",它提供了一个提示,优先考虑省电而不是性能。如果您的应用程序使用此设置可以正常运行,建议使用它,因为它可以显着提高便携式设备的电池寿命。如果未提供选项,这通常是默认值。
  • "high-performance",它提供了一个提示,优先考虑性能而不是功耗。鼓励您仅在绝对必要时指定此值,因为它可能会显着减少便携式设备的电池寿命。它也可能导致 GPUDevice 丢失率增加 - 系统有时会选择切换到低功耗适配器以节省电量。

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

注意:在运行在双 GPU macOS 设备上的 Chrome 中,如果在没有 powerPreference 选项的情况下调用 requestAdapter(),则当用户设备处于交流电源状态时,将返回高性能独立 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();

  //...
}

规范

规范
WebGPU
# dom-gpu-requestadapter

浏览器兼容性

BCD 表只在启用 JavaScript 的浏览器中加载。

另请参阅