WebGPU(Chrome 136)中的新变化

François Beaufort
François Beaufort

发布时间:2025 年 4 月 23 日

GPUAdapterInfo isFallbackAdapter 属性

GPUAdapterInfo isFallbackAdapter 布尔值属性用于指示 GPUAdapter 是否具有显著的性能限制,以换取更广泛的兼容性、更可预测的行为或更高的隐私保护。之所以需要添加此功能,是因为采用用户提供的 GPUDevice 对象的库无法通过 GPUDevice 上的 adapterInfo 属性访问此信息。请参阅以下示例和问题 403172841

const adapter = await navigator.gpu.requestAdapter();

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

由于 Chrome 尚未发布对后备适配器的支持,因此 isFallbackAdapter 目前在用户设备上始终为 false。我们正在调查是否可以弃用并移除 GPUAdapter isFallbackAdapter 属性。请参阅发布意向

改进了 D3D12 上的着色器编译时间

Chrome 团队不断改进 Tint(WebGPU 着色器语言编译器),为支持 D3D12 后端的 WebGPU 设备添加了中间表示 (IR)。此 IR 位于 Tint 的抽象语法树 (AST) 和 HLSL 后端写入器之间,将使编译器更高效、更易于维护,最终让开发者和用户都受益。初始测试表明,在将 Unity 的 WGSL 着色器转换为 HLSL 时,新版 Tint 的速度最高可提升 10 倍。

流程图:显示了将 WGSL 着色器代码转换为低级 GPU 指令的过程。
在 Windows 中创建渲染流水线。

这些改进已在 Android、ChromeOS 和 macOS 上提供,现在正逐步扩展到支持 WebGPU(采用 D3D12 后端)的 Windows 设备。请参阅问题 42251045

保存和复制画布图片

Chrome 用户现在可以右键点击 WebGPU 画布,然后访问上下文菜单选项图片另存为…复制图片。请参阅问题 40902474

体验
用户选择了“将图片另存为…”上下文菜单。

解除兼容模式限制

如果 GPUDevice 上提供实验性 "core-features-and-limits" 功能,则在启用 chrome://flags/#enable-unsafe-webgpu 标志后,会解除所有兼容性模式限制(功能和限制)。请参阅问题 395855517

使用 featureLevel: "compatibility" 选项请求 GPUAdapter 会提示浏览器选择实验性 WebGPU 兼容性模式。如果成功,生成的适配器将为“compatibility-defaulting”。否则,它就是“核心默认”,与使用 featureLevel: "core" 选项相同。此外,在不使用 requiredFeaturesrequiredLimits 的情况下调用 requestDevice() 会请求具有 GPUAdapter 默认功能的 GPUDevice。

核心默认适配器始终支持 "core-features-and-limits" 功能,并且该功能会在基于这些适配器创建的 GPUDevice 上自动启用。对于兼容性默认适配器,可能支持 "core-features-and-limits" 功能,并且可以针对从中创建的 GPUDevice 请求该功能。这两种类型的适配器可能还支持 "float32-blendable" 等功能,这些功能在核心模式和兼容模式下都是可选的。

以下示例适用于需要 "float32-blendable" 的应用,该应用在核心功能可用时支持使用核心功能,但在核心功能不可用时仅使用兼容性功能。

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

已移除实验性 GPUAdapter featureLevelisCompatibilityMode 属性,转而使用 "core-features-and-limits" 功能。请参阅问题 395855516

Dawn 更新

回调状态枚举 InstanceDropped 已重命名为 CallbackCancelled,以明确表示回调已取消,但与事件关联的后台处理(例如流水线编译)可能仍在运行。新名称更具普遍适用性,以防日后添加其他取消机制。请参阅问题 520

指示无法弹出错误范围堆栈的 wgpu::PopErrorScopeStatus::EmptyStack 枚举已重命名为 wgpu::PopErrorScopeStatus::Error(也更具普遍适用性)。该回调现在还包含相应的错误说明消息,以帮助进行调试。请参阅问题 369

这仅涵盖了部分重要亮点。查看详尽的提交列表

WebGPU 的新变化

WebGPU 新变化系列中涵盖的所有内容的列表。

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113