WebGPU(Chrome 136)中的新变化

François Beaufort
François Beaufort

Published: April 23, 2025

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 属性。请参阅 intent to ship

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

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

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

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

保存和复制画布图片

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

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

取消了兼容模式限制

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

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

Core-defaulting 适配器始终支持 "core-features-and-limits" 功能,并且会在从中创建的 GPUDevice 上自动启用该功能。对于 compatibility-defaulting 适配器,系统可能会支持 "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 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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