Visual LabINTERACTIVE LEARNING
阶段 5 · 进阶进阶22 分钟

验证、错误作用域与设备丢失

pushErrorScope、CompilationInfo 与恢复策略

故意创建不合法资源并捕获 GPUValidationError,同时读取 WGSL 编译诊断和模拟设备销毁。

LEARNING GOALS

先明确本课目标

1

使用 error scope 捕获验证错误

2

读取 shader compilation info

3

理解设备丢失后的重建边界

MENTAL MODEL · 再建立心智模型

WebGPU 错误既可能同步抛出,也可能异步通过错误作用域、uncapturederror 或 device.lost 报告。

MINIMAL EXAMPLE

为什么 try/catch 经常抓不到 WebGPU 验证错误?

许多 WebGPU 操作先返回对象,验证在异步 GPU/实现流程中报告。pushErrorScope/popErrorScope 用作用域捕获 validation、out-of-memory 或 internal 错误。

最小例子javascript
device.pushErrorScope('validation');

device.createBuffer({
  size: 16,
  usage: GPUBufferUsage.MAP_READ |
         GPUBufferUsage.VERTEX, // 非法组合
});

const error = await device.popErrorScope();
console.log(error?.message);
  1. 先 push 只捕获作用域内、指定过滤类型的设备错误。
  2. 后 pop popErrorScope() 返回 Promise,因为错误报告可能是异步的。
  3. 作用域是栈 可以嵌套,但必须按后进先出顺序弹出。

错误变成可处理的数据,而不是只出现在 uncapturederror 或浏览器控制台。

本课概念
OPTIONAL · 按需查阅完整术语表与概念边界

遇到陌生术语时再展开,不打断主线实验。

展开⌄
LIVE EXPERIMENT · 先获得反馈

边改边运行

浏览器加载后会激活代码编辑器、独立运行环境与实时输出。

本课挑战

实现 ResourceRegistry,在新 Device 上批量重建资源。

DEEP DIVE · 实验之后

回到原理,解释刚才发生了什么

先用结果建立反馈,再按运行流程、核心原理和知识关系逐层深入。

CORE IDEA

核心讲解

01

错误作用域像 try/catch

pushErrorScope 标记捕获范围,popErrorScope 异步返回其中首个匹配错误,适合给资源创建或管线编译加上下文。

02

设备丢失要重建所有 GPU 资源

Device 关联的 Buffer、Texture、Pipeline 都不能迁移到新 Device。应用应保留可重新创建资源的 CPU 描述。

OPTIONAL · 迁移时查阅WebGPU 与 WebGL2 对照

主线实验完成后,再用完整映射处理跨平台或跨 API 迁移。

展开⌄
API COMPARISON

WebGL 依赖错误标志和 Context Lost 事件,WebGPU 提供异步验证作用域与 Device Lost。

WebGL

getError、shader/program 日志和 webglcontextlost/restored 事件覆盖不同失败层次。

WebGPU

ErrorScope、uncapturederror、CompilationInfo 与 device.lost 构成显式诊断链。

WebGPU Device 不会原地 restored;恢复路径必须从 CPU 描述重新创建全部 GPU 资源。