GPUDevice: lost 属性
注意:此功能在 Web Workers 中可用。
GPUDevice 接口中只读的 lost 属性包含一个 Promise,该 Promise 在设备生命周期内一直处于 pending 状态,并在设备丢失时使用 GPUDeviceLostInfo 对象进行 resolve。
GPUAdapter.requestDevice() 永远不会返回 null,并且仅在请求无效时(即超过 GPUAdapter 的能力范围)才会 reject。但是,如果由于某种原因无法满足有效的设备请求,它可能会解析为一个已丢失的设备。此外,设备在创建后随时可能由于各种原因(例如浏览器资源管理或驱动程序更新)而丢失,因此最好始终优雅地处理丢失的设备。
许多设备丢失的原因是暂时的,因此一旦之前的设备丢失,您应该尝试获取一个新设备,除非丢失是由应用程序有意销毁设备引起的(即使用 GPUDevice.destroy())。请注意,使用先前设备创建的任何 WebGPU 资源(缓冲区、纹理等)都需要使用新设备重新创建。
注意: 还要记住,GPUAdapter 可能会变得不可用,例如,如果物理 GPU 从系统中拔出或为节省电量而禁用。从那时起,适配器将无法再返回有效的设备,并且将始终返回已丢失的设备。
值
当设备丢失时,一个解析为 GPUDeviceLostInfo 对象的 Promise。
示例
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 |
浏览器兼容性
加载中…