Chrome 149-150 中 WebGPU 的新特性:Immediates 与更严格的 transient attachments 校验
What's New in WebGPU (Chrome 149-150)
Chrome 149-150 为 WebGPU 引入 Immediates(也称 push constants),可通过 setImmediates() 把频繁变化的小数据直接注入 pass encoder。
WebGPU 新变化(Chrome 149-150)
François Beaufort
发布时间:2026 年 6 月 17 日
Immediates(即时数据),也称为 push constants 或 root constants,可让您将少量频繁变化的数据直接传递给着色器。这一过程绕过了创建 GPU 缓冲区和管理绑定组的开销。
为每次绘制调用都会变化的数据(例如数百个对象各自唯一的对象 ID 或 3D 变换矩阵)更新 uniform 缓冲区绑定会产生 CPU 开销。直接将原始值注入 pass 编码器,可以避免向内存写入数据和管理 GPU 查找。
Immediates 为极小且高度动态的变量提供了一条快速通道。对于大型数据数组、复杂的光照结构或庞大的矩阵,请使用 uniform 缓冲区或存储缓冲区。
在 WGSL 着色器中,<immediate> 地址空间让您可以定义能直接传递给 pass 编码器的即时数据。在绘制调用之前,在 JavaScript 中调用 setImmediates() 即可提供这些数据,而无需绑定组。要检查是否支持,请通过 navigator.gpu.wgslLanguageFeatures 对 immediate_address_space WGSL 语言扩展进行特性检测。请参阅下面的示例和 发布意向。
if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
throw new Error(`WGSL immediate address space is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const module = device.createShaderModule({ code: `
requires immediate_address_space;
var<immediate> color: vec4f;
@vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
return vec4f(pos[i], 0, 1);
}
@fragment fn fragmentMain() -> @location(0) vec4f {
return color;
}`,
});
// Create render pass encoder (omitted)...
// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
layout: 'auto',
vertex: { module },
fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);
// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();
要深入了解此功能,请查看 WebGPUFundamentals Immediates。
感谢 Microsoft 团队的贡献!
对瞬态附件的更严格验证
WebGPU 最近 引入了 TRANSIENT_ATTACHMENT GPUTextureUsage 标志,让开发者可以创建临时渲染附件,例如深度模板缓冲区或多重采样目标。这些附件保留在快速的片上 tile 内存中,而无需分配主显存。
最近的更新(#6248 和 #6267)完善了验证规则,以防止这些节省内存的纹理附件被滥用:
- 由于平台限制,创建瞬态纹理时
viewFormats必须为空数组。由于瞬态纹理仅用于渲染,因此不需要替代的视图格式。 - 创建纹理视图不会收窄 usage 标志。在瞬态纹理上调用
createView()时,视图不能更改其 usage。 - 瞬态附件不能在渲染通道中用作
resolveTarget。
Dawn 更新
这里仅列出了部分重点内容。请查看完整的 提交列表。
WebGPU 新变化 系列此前所有内容的汇总列表。
Chrome 155-156
- WGSL fragment_depth 扩展
- 纹理压缩非对齐
- srgb-linear 和 display-p3-linear 色彩空间
- 新增 snorm10-10-10-2 顶点格式
- 在 NVIDIA 上通过 Vulkan 支持 f16
- Dawn 更新
Chrome 153-154
Chrome 151-152
Chrome 149-150
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
- Device 请求会消耗 adapter
- 在使用纹理视图之处直接使用纹理的简写
- WGSL textureSampleLevel 支持 1D 纹理
- 弃用 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 和单分量顶点格式
- 允许使用 undefined 值请求未知限制
- WGSL 对齐规则变更
- 使用 discard 带来的 WGSL 性能提升
- 对外部纹理使用 VideoFrame 的 displaySize
- 使用 copyExternalImageToTexture 处理非默认方向的图像
- 改善开发者体验
- 通过 featureLevel 启用兼容模式
- 实验性子群组特性清理
- 弃用 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 132
- 纹理视图用法
- 32 位浮点纹理混合
- GPUDevice 的 adapterInfo 属性
- 使用无效格式配置 canvas 上下文时抛出 JavaScript 错误
- 纹理上可过滤采样器的限制
- 扩展的子组实验
- 改善开发者体验
- 16 位归一化纹理格式的实验性支持
- Dawn 更新
Chrome 131
- WGSL 中的裁剪距离
- GPUCanvasContext 的 getConfiguration()
- 点和线图元不得使用深度偏移
- 子组的包含式扫描内建函数
- 多绘制间接的实验性支持
- 着色器模块编译选项 strict math
- 移除 GPUAdapter 的 requestAdapterInfo()
- Dawn 更新
Chrome 130
Chrome 129
Chrome 128
- 子组实验
- 弃用为线和点设置深度偏移
- 在 preventDefault 时隐藏未捕获错误的 DevTools 警告
- WGSL 的 interpolate 采样 first 和 either
- Dawn 更新
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
除非另有说明,本页面的内容采用 知识共享署名 4.0 许可协议 授权,代码示例采用 Apache 2.0 许可协议 授权。详情请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间:2026-06-17 UTC。
正文基于 Google 在 Chrome Developers 发布并共享的内容;代码示例适用 Apache 2.0 许可。 原文 · CC BY 4.0。中文正文由 AI 翻译,请结合原文核对。 配图与视频请前往原文查看。
来源: Chrome Developers · AI 与浏览器 · developer.chrome.com