WebGPU 中的新变化 (Chrome 139)

François Beaufort
François Beaufort

发布时间:2025 年 7 月 30 日

支持 BC 和 ASTC 压缩格式的 3D 纹理

"texture-compression-bc-sliced-3d""texture-compression-astc-sliced-3d" WebGPU 功能添加了对使用块压缩 (BC) 和自适应可伸缩纹理压缩 (ASTC) 格式的 3D 纹理的支持。这样,您就可以利用 BC 和 ASTC 格式对体纹理数据进行高效压缩,从而大幅减少内存占用空间和带宽要求,同时不会大幅降低视觉质量。这在科学可视化、医学影像和高级渲染技术等领域尤其有价值。

以下代码段用于检查适配器是否支持采用 BC 和 ASTC 压缩格式的 3D 纹理,如果支持,则请求具有这些功能的设备。

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

const requiredFeatures = [];
if (adapter?.features.has("texture-compression-bc-sliced-3d")) {
  requiredFeatures.push(
    "texture-compression-bc",
    "texture-compression-bc-sliced-3d",
  );
}
if (adapter?.features.has("texture-compression-astc-sliced-3d")) {
  requiredFeatures.push(
    "texture-compression-astc",
    "texture-compression-astc-sliced-3d",
  );
}
const device = await adapter?.requestDevice({ requiredFeatures });

// Later on...
if (device.features.has("texture-compression-astc-sliced-3d")) {
  // Create a 3D texture using ASTC compression
} else if (device.features.has("texture-compression-bc-sliced-3d")) {
  // Create a 3D texture using BC compression
} else {
  // Fallback: Create an uncompressed 3D texture
}

如需探索 3D 脑部扫描,请查看体积渲染 - 纹理 3D WebGPU 示例,并参阅 chromestatus 条目

使用 WebGPU 渲染的 3D 脑部扫描图像。
采用 ASTC 压缩格式的 3D 纹理的脑部扫描图像。

新增了“核心功能和限制”功能

即将推出的 WebGPU 兼容模式将引入新的 "core-features-and-limits" 功能。此功能表示适配器或设备支持 WebGPU 规范的核心功能和限制。“核心”WebGPU 是目前唯一可用的版本,因此所有 WebGPU 实现都必须在其支持的功能中包含 "core-features-and-limits"

未来,当 WebGPU 兼容性模式发布时,适配器或设备可能不具备此功能,以表明它是兼容性模式适配器或设备,而不是核心适配器或设备。在设备上启用此功能后,系统会解除所有兼容模式限制(功能和限制)。

如需详细了解 WebGPU 兼容模式下的说明和用法,请参阅说明和下文。请参阅问题 418025721

WebGPU 兼容性模式的源试用

WebGPU 是一款强大的 API,专为现代图形设计,与 Vulkan、Metal 和 Direct3D 12 等技术保持一致。不过,仍有大量设备不支持这些较新的 API。例如,在 Windows 上,31% 的 Chrome 用户没有 Direct3D 11.1 或更高版本。在 Android 上,15% 的 Android 用户没有 Vulkan 1.1,其中 10% 的用户根本没有 Vulkan。

这给希望最大限度扩大应用覆盖面的开发者带来了挑战。他们往往被迫开发多个实现(例如 WebGPU 和 WebGL),接受核心 WebGPU 的受众群体更有限,或者坚持使用 WebGL,从而错失 WebGPU 的高级功能(例如 GPU 计算)。

WebGPU 兼容性模式的直观表示。
扩大了 WebGPU 兼容模式的覆盖范围。

WebGPU 兼容性模式提供了一种解决方案,即提供一个选择启用的、略有限制的 WebGPU API 版本。此模式旨在运行 OpenGL ES 3.1 和 Direct3D11 等旧版图形 API,从而显著扩大应用在不支持核心 WebGPU 所需的现代显式图形 API 的设备上的覆盖范围。

由于兼容性模式是 WebGPU 的子集,因此使用该模式构建的应用也是有效的 WebGPU“核心”应用。这意味着,即使在不支持兼容模式的浏览器上,它们也能顺畅运行。

对于许多基本应用,启用兼容性模式非常简单,只需在调用 requestAdapter() 时传递 featureLevel: "compatibility" 即可。更复杂的应用可能需要进行细微调整,才能符合该模式的限制。生成 Mipmap WebGPU 示例就是一个很好的例子。

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({
  featureLevel: "compatibility",
});

const hasCore = adapter?.features.has("core-features-and-limits");
const device = await adapter?.requestDevice({
  requiredFeatures: (hasCore ? ["core-features-and-limits"] : []),
});

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

启用该功能

默认情况下,Chrome 中未启用 WebGPU 兼容模式,但您可以在 Chrome 139 中通过明确启用该功能来试用此模式。您可以在本地启用“实验性 Web 平台功能”标志 (chrome://flags/#enable-experimental-web-platform-features) 来激活该功能。

为了让应用的所有访问者都能使用该功能,我们正在进行源试用,该试用计划将于 Chrome 145(2026 年 4 月 21 日)结束。如需参与试用,请参阅开始使用源试用一文。

Dawn 更新

WGPUQueueWorkDoneCallback 函数添加了 message 实参,以便与其他也接受状态的回调函数保持一致。请参阅 webgpu-headers PR

当 emdawnwebgpu 与 -sSHARED_MEMORY 关联时,其 webgpu.cpp 文件也会使用此标志进行编译。请参阅 Dawn CL 244075

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

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