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
- WGSL subgroup_id 扩展
- WGSL uniform_buffer_standard_layout 扩展
- Linux 上的 WebGPU
- 更快的 writeBuffer 和 writeTexture
- Dawn 更新
Chrome 143
Chrome 142
Chrome 141
Chrome 140
- 设备请求使用适配器
- 在纹理视图中使用纹理的简写
- WGSL textureSampleLevel 支持一维纹理
- 弃用 bgra8unorm 只读存储纹理使用情况
- 移除 GPUAdapter isFallbackAdapter 属性
- Dawn 更新
Chrome 139
Chrome 138
Chrome 137
- 将纹理视图用于 externalTexture 绑定
- 复制缓冲区,无需指定偏移量和大小
- WGSL workgroupUniformLoad 使用指向原子的指针
- GPUAdapterInfo powerPreference 属性
- 移除 GPURequestAdapterOptions compatibilityMode 属性
- Dawn 更新
Chrome 136
Chrome 135
- 允许使用 null 绑定组布局创建流水线布局
- 允许视口超出渲染目标边界
- 更轻松地访问 Android 上的实验性兼容模式
- 移除 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 134
Chrome 133
- 额外的 unorm8x4-bgra 和 1 组件顶点格式
- 允许使用未定义的值请求未知限制
- WGSL 对齐规则变更
- 使用舍弃的 WGSL 性能提升
- 将 VideoFrame displaySize 用于外部纹理
- 使用 copyExternalImageToTexture 处理具有非默认方向的图片
- 提升开发者体验
- 使用 featureLevel 启用兼容模式
- 实验性子群组功能清理
- 弃用 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 132
- 纹理视图使用情况
- 32 位浮点纹理混合
- GPUDevice adapterInfo 属性
- 使用无效格式配置画布上下文会抛出 JavaScript 错误
- 对纹理的过滤采样器限制
- 扩展子群组实验
- 提升开发者体验
- 实验性支持 16 位标准化纹理格式
- Dawn 更新
Chrome 131
- WGSL 中的剪辑距离
- GPUCanvasContext getConfiguration()
- 点和线基元不得具有深度偏差
- 子群组的包含扫描内置函数
- 实验性支持多重间接绘制
- 着色器模块编译选项严格数学
- 移除 GPUAdapter requestAdapterInfo()
- Dawn 更新
Chrome 130
Chrome 129
Chrome 128
Chrome 127
Chrome 126
Chrome 125
Chrome 124
Chrome 123
Chrome 122
Chrome 121
- 支持 Android 上的 WebGPU
- 在 Windows 上使用 DXC 而不是 FXC 进行着色器编译
- 计算和渲染通道中的时间戳查询
- 着色器模块的默认入口点
- 支持 display-p3 作为 GPUExternalTexture 色彩空间
- 内存堆信息
- Dawn 更新
Chrome 120
Chrome 119
Chrome 118
- copyExternalImageToTexture()
copyExternalImageToTexture()中支持 HTMLImageElement 和 ImageData - 实验性支持读写和只读存储纹理
- Dawn 更新
Chrome 117
Chrome 116
- WebCodecs 集成
- GPUAdapter
requestDevice()返回的丢失设备 - 如果调用
importExternalTexture(),则保持视频播放流畅 - 规范一致性
- 提升开发者体验
- Dawn 更新
Chrome 115
Chrome 114
Chrome 113
- 在
importExternalTexture()中使用 WebCodecs VideoFrame 来源