这次 WebGPU 功能的数量可能有点少,但一些重大进展即将到来!未来的版本将包含着色器编译速度改进等功能,以及对使用 WGPUFuture 实现的异步模型的更改。
子群组(功能正在开发中)
子群组功能支持 SIMD 级并行处理,让同一组中的线程能够进行通信并执行集体数学运算(例如计算 16 个数字的总和)。这提供了一种高效的跨线程数据共享方式。
现代 GPU API 支持子群操作,但命名和实现细节各不相同。Chrome 团队已找出这些共同点,目前正在努力对此功能进行标准化。如果您有任何疑问,请查看提案和评论。
chrome://flags/#enable-experimental-web-platform-features
中提供了“实验性 Web 平台功能”标志,可用于实现最少的非标准子组,以便开发者试用并分享反馈,因为 WebGPU 在实际应用中带来的好处尚未得到证实。
当 GPUAdapter
中提供 "chromium-experimental-subgroups"
功能时,请请求具有此功能的 GPUDevice
,以便在 WGSL 中获得实验性子组支持,并检查其 minSubgroupSize
和 maxSubgroupSize
限制。
您还需要在 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_id
与id
匹配。注意: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
- 在 WGSL 中剪裁距离
- GPUCanvasContext getConfiguration()
- 点和线基元不得有深度偏差
- 针对子群组的包含性扫描内置函数
- 对多绘制间接的实验性支持
- 着色器模块编译选项“严格数学”
- 移除了 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 更新