这次的 WebGPU 功能数量可能有点稀疏,但一些重大进展已经近在眼前!未来版本将包括改进着色器编译速度等功能,以及更改使用 WGPUFuture 实现的异步模型。
子群组(功能正在开发中)
子组功能可实现 SIMD 级并行处理,允许组中的线程进行通信并执行集合数学运算(例如,计算 16 个数字的总和)。这是一种非常高效的跨线程数据共享形式。
新型 GPU API 支持子组操作,但命名和实现细节有所不同。Chrome 团队已找出两者的共同之处,目前正在努力将此功能标准化。如有任何疑问,请查看提案和评论。
在 chrome://flags/#enable-experimental-web-platform-features
上的“实验性 Web 平台功能”标志后面,有一个最低的、非标准化的子群组实现,以便开发者可以试一试并分享反馈,因为实际优势在 WebGPU 的背景下尚未得到证明。
当 GPUAdapter
中提供 "chromium-experimental-subgroups"
功能时,请求具有此功能的 GPUDevice
以获取 WGSL 中的实验性子群组支持,并检查其 minSubgroupSize
和 maxSubgroupSize
限制。
您还需要使用 enable chromium_experimental_subgroups
在 WGSL 代码中明确启用此扩展程序。启用后,您可以使用以下新增内容:
subgroup_invocation_id
:子组内线程索引的内置值。subgroup_size
:用于子组大小访问权限的内置值。subgroupBallot(value):
返回一组位字段,如果对相应有效调用的value
为 true,则与subgroup_invocation_id
对应的位为 1,否则为 0。subgroupBroadcast(value, id)
:将subgroup_invocation_id
与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。
黎明动态
查看详尽的提交内容列表。
WebGPU 的新变化
WebGPU 的新变化系列中涵盖的所有内容的列表。
Chrome 125
Chrome 124
Chrome 123
Chrome 122
Chrome 121
- 在 Android 上支持 WebGPU
- 在 Windows 上使用 DXC(而非 FXC)进行着色器编译
- 计算和渲染通道中的时间戳查询
- 着色器模块的默认入口点
- 支持将 display-p3 作为 GPUExternalTexture 颜色空间
- 内存堆信息
- 黎明动态
Chrome 120
Chrome 119
Chrome 118
Chrome 117
Chrome 116
- WebCodecs 集成
- GPUAdapter 返回的设备
requestDevice()
- 在调用
importExternalTexture()
时确保视频播放流畅 - 规范一致性
- 改善开发者体验
- 黎明动态