WebGPU 中的新变化(Chrome 144)

François Beaufort
François Beaufort

Published: January 7, 2026

WGSL subgroup_id 扩展程序

启用 subgroups 扩展程序后,WGSL 语言扩展程序 subgroup_id 可让您在工作组中使用以下新的内置值:

  • subgroup_id:提供当前工作组中调用子组的 ID。
  • num_subgroups:报告工作组中存在的子组数量。

以前,如需使用子组调用 ID 为内存编入索引,您必须重建子组 ID(通常通过 原子操作),以避免内存访问重叠。现在,您可以使用 subgroup_id 填充该等式的另一半。由于 D3D 后端尚不提供此功能,因此会在那里进行模拟。将 local_invocation_index 等效项创建为 subgroup_invocation_id + subgroup_size * subgroup_id 应该是安全的。请注意,在某些情况下,子组可能不完整。

可以使用 navigator.gpu.wgslLanguageFeatures 检测此语言扩展程序的功能。建议使用 requires- 指令来发出潜在不可移植性的信号,方法是在 WGSL 着色器代码的顶部使用 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 检测此语言扩展程序的功能。建议使用 requires- 指令来发出潜在不可移植性的信号,方法是在 WGSL 着色器代码的顶部使用 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 团队已发布适用于 Android 的 WebGPU 的 Kotlin 绑定的 第一个 Alpha 版本,该版本可使用 Jetpack。androidx.webgpu 软件包让 Android 开发者可以使用 Kotlin 访问现代 GPU API,从而绕过 OpenGL 的旧问题或 Vulkan 的复杂性,这对于生态系统来说是一项令人兴奋的开发!

这仅涵盖了一些关键亮点。请查看提交的完整列表

WebGPU 的新变化

WebGPU 的新变化系列中涵盖的所有内容的列表。

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