发布时间: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 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
- 设备请求会消耗适配器
- 使用纹理(在纹理视图中使用)的简写
- 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 更新