发布时间:2026 年 2 月 25 日
在 OpenGL ES 3.1 上支持 WebGPU 兼容模式
虽然 WebGPU 的设计旨在与 Vulkan、Metal 和 D3D12 等现代图形 API 保持一致,但许多用户使用的硬件较旧,不支持这些标准。为了弥合这一差距并确保广泛的可访问性,Chrome 推出了一项新的选择启用功能,称为兼容模式。
此模式可让您在较旧的图形 API(例如 OpenGL ES 3.1)上运行 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 标志来创建节省内存的附件。这样可让渲染通道操作保留在 tile 内存中,从而避免 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);
}
“黎明”更新
以下新的限额层级可供使用:
maxStorageBuffersPerShaderStage最多支持 16 个。请参阅问题 366151398。maxSampledTexturesPerShaderStage最多支持 48 个。请参阅问题 475255737。
Android 上默认启用 SPIR-V 验证,以提供额外的安全层并防止驱动程序因输入格式错误而变得不稳定。请参阅问题 473526182。
以下仅介绍了一些关键亮点。查看详尽的提交列表。
WebGPU 最新动态
WebGPU 的新变化系列中涵盖的所有内容。
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 bind 组布局的流水线布局
- 允许视口超出渲染目标边界
- 更轻松地访问 Android 上的实验性兼容性模式
- 移除 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 134
Chrome 133
- 新增了 unorm8x4-bgra 和 1 分量顶点格式
- 允许使用未定义的值请求未知限制
- WGSL 对齐规则变更
- 使用 discard 获得的 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
Chrome 117
Chrome 116
- WebCodecs 集成
- 由 GPUAdapter
requestDevice()返回的丢失设备 - 在调用
importExternalTexture()时保持视频播放流畅 - 规范一致性
- 改善开发者体验
- Dawn 更新
Chrome 115
Chrome 114
Chrome 113
- 在
importExternalTexture()中使用 WebCodecs VideoFrame 来源