WebGPU 的新变化 (Chrome 126)

François Beaufort
François Beaufort

提高 maxTextureArrayLayers 限制

默认情况下,二维纹理的深度或层数的允许最大值为 256。现在,如果支持,可以使用 maxTextureArrayLayers 限制请求最多 2048。请参阅以下示例和 问题 42241514

const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxTextureArrayLayers < 30) {
  // When the desired limit isn't supported, take action to either fall back to
  // a code path that does not require the higher limit or notify the user that
  // their device does not meet minimum requirements.
}

// Request highest limit of max texture array layers attributes.
const device = await adapter.requestDevice({
  requiredLimits: { maxTextureArrayLayers: 2048 }
});

针对 Vulkan 后端的缓冲区上传优化

现在,当为 Vulkan 后端调用 GPUQueue 的 writeBuffer() 方法时,可以使用快速路径。现在,数据可以直接写入目标缓冲区,无需额外的复制和同步。此优化减少了将数据上传到 GPU 所需的内存流量。

快速路径优化要求缓冲区的内存对主机可见,并且没有任何待处理的 GPU 操作。请参阅问题 42242084

着色器编译时间改进

Chrome 团队正在提高 Tint(WebGPU 着色器语言的编译器)的效率。Tint 目前会在生成机器代码之前多次修改着色器代码的抽象语法树 (AST),此过程在某些平台上非常耗费资源。为了优化此过程,我们引入了一种新的中间表示法 (IR),以及使用它的重新设计的后端。此更改旨在加快着色器编译速度。

渲染流水线创建过程涉及使用 Tint 编译器将 WGSL 转换为 SPIR-V,然后使用驱动程序编译器将 SPIR-V 转换为 ISA。
ChromeOS 中的渲染流水线创建。

这些改进已在 Android 上提供,并且正在逐步扩展到支持使用 Vulkan 后端的 WebGPU 的 ChromeOS 设备。请参阅问题 42250751

提交的命令缓冲区必须是唯一的

使用 submit() 方法提交到 GPUQueue 的每个 GPUCommandBuffer 都必须是唯一的,否则会生成验证错误。这是一个规范 bug。请参阅问题 42241492

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const commandEncoder = device.createCommandEncoder();
const commandBuffer = commandEncoder.finish();

device.queue.submit([commandBuffer, commandBuffer]);
// ⚠️ Validation fails because command buffers are not unique.

Dawn 更新

C++ 封装容器 webgpu_cpp.h 现在仅包含头文件,简化了其使用,并可更轻松地与其他 C++ 封装容器集成。请参阅问题 40195122

webgpu.h C API 不再公开 Swapchain 对象的概念。此更改旨在与 JavaScript API 紧密保持一致。内部配置现在通过新的 wgpu::Surface 对象的 Configure() 方法完成,该方法可能会在未来进行修改。如需查看示例,请参阅使用 WebGPU 构建应用文档。请参阅问题 42241264

查看提交的完整列表

WebGPU 的新变化

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

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