GPUDevice: lost 屬性

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:此功能在 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

瀏覽器相容性

另見