GPUDevice: lost property
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
The lost
read-only property of the
GPUDevice
interface contains a Promise
that remains pending throughout the device's lifetime and resolves with a GPUDeviceLostInfo
object when the device is lost.
GPUAdapter.requestDevice()
will never return null
, and it will reject only if the request is invalid, i.e. it exceeds the capabilities of the GPUAdapter
. If a valid device request can't be fulfilled for some reason however it may resolve to a device that has already been lost. Additionally, devices can be lost at any time after creation for a variety of reasons (such as browser resource management or driver updates), so it's a good idea to always handle lost devices gracefully.
Many causes for lost devices are transient, so you should try getting a new device once a previous one has been lost unless the loss was caused by the application intentionally destroying the device (i.e. with GPUDevice.destroy()
). Note that any WebGPU resources created with a previous device (buffers, textures, etc.) will need to be re-created with the new one.
Note:
Also bear in mind that a GPUAdapter
may become unavailable, e.g. if the physical GPU is unplugged from the system or disabled to save power. From then on, the adapter can no longer return valid devices, and will always return already-lost devices.
Value
A promise that resolves with a GPUDeviceLostInfo
object when the device is lost.
Examples
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();
}
});
// ...
}
Specifications
Specification |
---|
WebGPU # dom-gpudevice-lost |
Browser compatibility
BCD tables only load in the browser
See also
- The WebGPU API