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 团队不断改进 WebGPU 着色器语言编译器 Tint,为支持 WebGPU 且采用 D3D12 后端的设备添加了中间表示法 (IR)。此 IR 位于 Tint 的抽象语法树 (AST) 和 HLSL 后端写入器之间,可提高编译器的效率和可维护性,最终让开发者和用户受益。初步测试表明,在将 Unity 的 WGSL 着色器转换为 HLSL 时,新版 Tint 的速度最高可提高 10 倍。

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

这些改进目前已在 Android、ChromeOS 和 macOS 上推出,我们正在逐步将其扩展到支持 WebGPU 和 D3D12 后端的 Windows 设备。请参阅问题 42251045

保存和复制画布照片

Chrome 用户现在可以右键点击 WebGPU 画布,然后访问上下文菜单选项 Save Image As…Copy Image。请参阅问题 40902474

多家云服务提供商为了创建一套用于收集依赖项的标准机制而展开合作,并推出了
用户选择了“另存为”上下文菜单。

解除提升效果兼容模式限制

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

使用 featureLevel: "compatibility" 选项请求 GPUAdapter 会提示浏览器选择实验性 WebGPU 兼容模式。如果成功,生成的适配器将采用“兼容性默认值”。否则,它将采用“核心默认值”,这与使用 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 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