发布时间:2026 年 1 月 7 日
WGSL subgroup_id 扩展
借助 WGSL 语言扩展程序 subgroup_id,您可以在启用 subgroups 扩展程序后,在工作组中使用以下新的内置值:
subgroup_id:提供当前工作组中调用子组的 ID。num_subgroups:报告工作组中存在的子组数量。
以前,若要使用子群组调用 ID 为内存编制索引,您必须重建子群组 ID(通常通过 原子操作),以避免内存访问重叠。现在,您可以使用 subgroup_id 来填充等式的另一半。由于 D3D 后端尚不支持此功能,因此会在该后端上进行模拟。将 local_invocation_index 等效为 subgroup_invocation_id + subgroup_size * subgroup_id 应该是安全的。请注意,在某些情况下,子群组可能未满员。
可以使用 navigator.gpu.wgslLanguageFeatures 检测此语言扩展功能。建议在 WGSL 着色器代码的顶部使用 requires 指令来表明 requires subgroup_id; 可能会导致不兼容。请参阅以下示例和发布意向。
if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_id")) {
throw new Error(`WGSL subgroup_id and num_subgroups built-in values are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
requires subgroup_id;
@compute @workgroup_size(64, 1, 1)
fn main(@builtin(subgroup_id) subgroup_id : u32,
@builtin(num_subgroups) num_subgroups : u32) {
// TODO: Use subgroup_id and num_subgroups values.
}`,
});
WGSL uniform_buffer_standard_layout 扩展
WGSL 语言扩展程序 uniform_buffer_standard_layout 使统一缓冲区能够使用与存储缓冲区相同的内存布局限制,从而更轻松地在两种缓冲区中共享数据结构。这意味着,统一缓冲区不再需要对数组元素进行 16 字节对齐,也不再需要将嵌套结构偏移量填充为 16 字节的倍数。
可以使用 navigator.gpu.wgslLanguageFeatures 检测此语言扩展功能。建议在 WGSL 着色器代码的顶部使用 requires 指令来表明 requires uniform_buffer_standard_layout; 可能会导致不兼容。请参阅以下示例和发布意向。
if (!navigator.gpu.wgslLanguageFeatures.has("uniform_buffer_standard_layout")) {
throw new Error(`WGSL uniform buffer standard layout is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires uniform_buffer_standard_layout;
struct S {
x: f32
}
struct Uniforms {
a: S,
b: f32
// b is at offset 4. Without standard layout, alignment rules would
// force b to be at offset 16 (or a multiple of 16), and you would have
// to add extra fields or use an @align attribute.
}
@group(0) @binding(0) var<uniform> u: Uniforms;
@fragment fn fs_main() -> @location(0) vec4<f32> {
return vec4<f32>(u.a.x);
}`,
});
Linux 上的 WebGPU
Chrome 团队正在谨慎地为 Linux 推出 WebGPU,首先支持 Intel Gen12+ GPU,但计划将其扩展到更多设备(AMD、NVIDIA)。此实现采用了一种架构,其中 WebGPU 使用 Vulkan,而 Chromium 的其余部分仍使用 OpenGL,从而利用现有的已知良好代码路径。请参阅问题 442791440。
更快的 writeBuffer 和 writeTexture
writeBuffer() 和 writeTexture() 已在 Chrome 中得到优化,因此性能提升高达 2 倍(具体取决于传输的数据大小),优于之前的版本。此变更也会影响 Dawn Wire 实现的所有用户。请参阅问题 441900745。
Dawn 更新
Android GPU 团队已发布 Kotlin 绑定(适用于 Android 上的 WebGPU)的首个 Alpha 版,该版本可通过 Jetpack 使用。androidx.webgpu 软件包让 Android 开发者能够使用 Kotlin 访问现代 GPU API,从而绕过 OpenGL 的旧版问题或 Vulkan 的复杂性,这对于生态系统来说是一项令人兴奋的开发!
以下仅介绍了一些关键亮点。查看详尽的提交列表。
WebGPU 最新动态
WebGPU 新变化系列中涵盖的所有内容。
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
- 设备请求消耗适配器
- 使用纹理视图时使用纹理的简写形式
- 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 来源