GPUDevice: lost 属性
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 表只在浏览器中加载