GPUDevice: lost 属性

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

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

GPUDevice 接口的 lost 只读属性包含一个 Promise,该属性在设备的生命周期内一直处于挂起状态,并在设备丢失时使用 GPUDeviceLostInfo 对象解析。

GPUAdapter.requestDevice() 永远不会返回 null,并且只有在请求无效时才会拒绝,即它超过了 GPUAdapter 的功能。但是,如果出于某种原因无法满足有效的设备请求,它可能会解析为一个已经丢失的设备。此外,设备可以在创建后随时因各种原因(例如浏览器资源管理或驱动程序更新)而丢失,因此最好始终优雅地处理丢失的设备。

导致设备丢失的许多原因都是暂时的,因此您应该尝试获取一个新设备,除非丢失是由应用程序有意销毁设备(例如,使用 GPUDevice.destroy())引起的。请注意,使用先前设备创建的任何 WebGPU 资源(缓冲区、纹理等)都需要使用新的设备重新创建。

注意:还要记住,GPUAdapter 可能会变得不可用,例如,如果物理 GPU 从系统中拔出或禁用以节省电量。从那时起,适配器将无法再返回有效的设备,并且始终会返回已经丢失的设备。

价值

设备丢失时使用 GPUDeviceLostInfo 对象解析的承诺。

示例

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.");
  }

  // Create a GPUDevice
  let device = await adapter.requestDevice(descriptor);

  // Use lost to handle lost devices
  device.lost.then((info) => {
    console.error(`WebGPU device was lost: ${info.message}`);
    device = null;

    if (info.reason !== "destroyed") {
      init();
    }
  });

  // ...
}

规范

规范
WebGPU
# dom-gpudevice-lost

浏览器兼容性

BCD 表只在浏览器中加载

另请参阅