发布时间:2026 年 6 月 17 日
立即数
立即数(也称为推送常量或根常量)可让您将少量频繁变化的数据直接传递给着色器。此过程可避免创建 GPU 缓冲区和管理绑定组的开销。
更新每次绘制调用都会更改的数据(例如数百个对象的唯一对象 ID 或 3D 转换矩阵)的统一缓冲区绑定会产生 CPU 开销。将原始值直接注入到 pass 编码器中,以避免将数据写入内存和管理 GPU 查找。
立即数可为微小的高度动态变量提供快速路径。对于大型数据数组、复杂的光照结构或大型矩阵,请使用统一缓冲区或存储缓冲区。
在 WGSL 着色器中,<immediate> 地址空间可用于定义可直接传递给通道编码器的即时数据。在 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 内存中,而不会分配主 VRAM。
最近的更新(#6248 和 #6267)完善了验证规则,以防止滥用以下节省内存的纹理附件:
- 由于平台限制,创建临时纹理时,
viewFormats必须为空数组。由于临时纹理仅用于渲染,因此不需要其他视图格式。 - 创建纹理视图不会缩小使用标志的范围。在临时纹理上调用
createView()时,视图无法更改其用途。 - 临时附件不能用作渲染通道内的
resolveTarget。
Dawn 更新
以下仅介绍了一些重点内容。查看详尽的提交列表。
WebGPU 最新动态
WebGPU 新变化系列中涵盖的所有内容。
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
- 设备请求会消耗适配器
- 使用纹理视图时使用纹理的简写形式
- 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()
- 点和线图元不得具有深度偏移
- 子群组的包含性扫描内置函数
- 对多重绘制间接的实验性支持
- 着色器模块编译选项 strict math
- 移除 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 来源