WebGPU 中的新变化(Chrome 146)

François Beaufort
François Beaufort

Published: February 25, 2026

支持 OpenGL ES 3.1 上的 WebGPU 兼容模式

虽然 WebGPU 的设计与 Vulkan、Metal 和 D3D12 等现代图形 API 保持一致,但许多用户使用的是不支持这些标准的旧硬件。为了弥合这一差距并确保广泛的可访问性,Chrome 推出了一项名为兼容模式的新选择启用功能。

借助此模式,您可以在 OpenGL ES 3.1 等旧图形 API 上运行 WebGPU。通过定位到 WebGPU 规范中略有限制的子集,您可以确保每个人都能访问您的 Web 应用,无论是最新的游戏设备还是旧笔记本电脑和移动设备。虽然团队首先从 Android 开始,但他们正在探索对其他设备的支持,例如搭载 OpenGL ES 3.1 的 ChromeOS 和搭载 Direct3D 11 的 Windows。

对于许多 Web 应用,您可以在调用 requestAdapter() 时传递 featureLevel: "compatibility" 来启用兼容模式。如果您的设备支持 Core WebGPU,Chrome 将返回一个支持 Core 的适配器,但您的 Web 应用将知道保持在兼容性限制范围内,除非它启用 "core-features-and-limits" 功能(或启用所有可用功能)。更复杂的应用可能需要进行细微调整,以适应模式的限制。

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

如需详细了解此模式的特定架构限制,请参阅WebGPU 基础知识指南。此外,所有 WebGPU 示例 现在都支持兼容模式。您还可以阅读发布意向

临时附件

您可以使用新的 TRANSIENT_ATTACHMENT GPUTextureUsage 标志来创建内存高效的附件。这样一来,渲染通道操作就可以保留在图块内存中,从而避免 VRAM 流量,并避免为纹理分配 VRAM。

通过将纹理声明为瞬时纹理(或“无内存”),GPU 知道它只需要纹理的内容暂时使用,具体来说,仅在当前渲染通道内使用。此外,由于纹理的内容在渲染通道后会被舍弃,因此驱动程序可能根本不需要为其分配 VRAM。

以下示例展示了如何创建临时纹理。

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

if ('TRANSIENT_ATTACHMENT' in GPUTextureUsage) {

  const transientTexture = device.createTexture({
    size: [42, 42],
    // The TRANSIENT_ATTACHMENT flag indicates the texture content is temporary,
    // potentially keeping it in fast on-chip memory.
    usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT,
    format: 'rgba8unorm',
  });
}

请参阅 Hello Triangle MSAA - WebGPU 示例发布意向

WGSL texture_and_sampler_let 扩展

借助 WGSL 语言扩展 texture_and_sampler_let,您可以将纹理或采样器变量分配给 WGSL 着色器中的 let。此功能目前提供了一种替代命名机制,并为 无绑定支持 做好准备,以便将返回纹理或采样器的方法直接存储到局部变量中。

请参阅以下示例和发布意向

@group(0) @binding(0) var tex: texture_2d<f32>;
@group(1) @binding(0) var store : texture_storage_2d<r32float, read_write>;

@fragment fn main() {
    let a = tex;
    var res: vec4f = textureLoad(a, vec2i(1i), 0);

    textureStore(store, vec2i(0i), res);
}

Dawn 更新

以下新的限制层级可用:

  • maxStorageBuffersPerShaderStage 最多支持 16 个。请参阅问题 366151398

  • maxSampledTexturesPerShaderStage 最多支持 48 个。请参阅问题 475255737

默认情况下,Android 上会启用 SPIR-V 验证,以提供额外的安全层,并防止驱动程序因输入格式错误而出现不稳定。请参阅问题 473526182

这仅涵盖了一些主要亮点。请查看提交的完整列表

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