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 的背景下,子群组的实际福利尚未得到证实。

当 "chromium-experimental-subgroups" 功能在 GPUAdapter 中可用时,请请求使用此功能的 GPUDevice,以在 WGSL 中获得实验性子群组支持,并检查其 minSubgroupSize 和 maxSubgroupSize 限制。

您还需要使用 enable chromium_experimental_subgroups 在 WGSL 代码中明确启用此扩展程序。启用后,您将可以访问以下附加功能:

  • subgroup_invocation_id:子群组中线程的索引的内置值。
  • subgroup_size:用于访问子组大小的内置值。
  • subgroupBallot(value): 返回一组位字段,其中与 subgroup_invocation_id 对应的位在 value 对于相应活跃调用为 true 时为 1,否则为 0。
  • subgroupBroadcast(value, id):将调用中具有与 id 相匹配的 subgroup_invocation_id 的 value 广播到子组中的所有调用。注意: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 纹理卷中,从而创建基于体素的场景和效果。请参阅问题 dawn:1020。

Dawn 更新

查看完整的提交列表。

WebGPU 最新动态

WebGPU 新动态系列中涵盖的所有内容。

Chrome 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

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