跳到正文
Chrome Developers · AI 与浏览器·· 2026-06-17AI 评分40

Chrome 149-150 中 WebGPU 的新特性:Immediates 与更严格的 transient attachments 校验

What's New in WebGPU (Chrome 149-150)

AI 导读

Chrome 149-150 为 WebGPU 引入 Immediates(也称 push constants),可通过 setImmediates() 把频繁变化的小数据直接注入 pass encoder。

正文 · AI 翻译

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

Chrome 153-154

Chrome 151-152

Chrome 149-150

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

除非另有说明,本页面的内容采用 知识共享署名 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