WebGPU 的新变化 (Chrome 125)

François Beaufort
François Beaufort

这次 WebGPU 功能的数量可能有点少,但一些重大进展即将到来!未来的版本将包含着色器编译速度改进等功能,以及对使用 WGPUFuture 实现的异步模型的更改。

子群组(功能正在开发中)

子群组功能支持 SIMD 级并行处理,让同一组中的线程能够进行通信并执行集体数学运算(例如计算 16 个数字的总和)。这提供了一种高效的跨线程数据共享方式。

现代 GPU API 支持子群操作,但命名和实现细节各不相同。Chrome 团队已找出这些共同点,目前正在努力对此功能进行标准化。如果您有任何疑问,请查看提案评论

chrome://flags/#enable-experimental-web-platform-features 中提供了“实验性 Web 平台功能”标志,可用于实现最少的非标准子组,以便开发者试用并分享反馈,因为 WebGPU 在实际应用中带来的好处尚未得到证实。

GPUAdapter 中提供 "chromium-experimental-subgroups" 功能时,请请求具有此功能的 GPUDevice,以便在 WGSL 中获得实验性子组支持,并检查其 minSubgroupSizemaxSubgroupSize 限制。

您还需要在 WGSL 代码中使用 enable chromium_experimental_subgroups 明确启用此扩展。启用后,您可以使用以下增强功能:

  • subgroup_invocation_id:子组中线程索引的内置值。
  • subgroup_size:用于访问子群组大小的内置值。
  • subgroupBallot(value): 返回一组位字段,其中如果相应于 subgroup_invocation_id 的位为 1,则表示相应有效调用的 value 为 true;否则,该位为 0。
  • subgroupBroadcast(value, id):将调用中的 value 广播到子组中的所有调用,其中 subgroup_invocation_idid 匹配。注意:id 必须是编译时常量。

以下代码段提供了一个基础,供您调整和发掘子群组的潜力。

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

渲染到 3D 纹理的切片

现在,您可以使用 GPURenderPassColorAttachment 中的新 depthSlice 成员,直接在渲染传递中渲染 3D 纹理的切片,从而将其功能扩展到常见的 2D 纹理渲染之外。例如,借助这项增强功能,您可以直接渲染到 3D 纹理体中,从而创建基于体素的场景和效果。请参阅 issue dawn:1020

Dawn 更新

查看详尽的提交内容列表

WebGPU 中的新变化

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

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