WebGPU 的新变化 (Chrome 117)

François Beaufort
François Beaufort

未设置顶点缓冲区

通过 GPURenderPassEncoderGPURenderBundleEncodernull(而非 GPUBuffer)传递给 setVertexBuffer(),您可以取消设置给定槽中之前设置的顶点缓冲区。请参阅问题 dawn:1675

// Set vertex buffer in slot 0.
myRenderPassEncoder.setVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.setVertexBuffer(0, null);

取消设置 bind 组

通过在 GPURenderPassEncoderGPURenderBundleEncoder 上将 null(而非 GPUBindGroup)传递给 setBindGroup(),您可以取消设置给定槽中之前设置的绑定组。请参阅问题 dawn:1675

// Set bing group in slot 0.
myRenderPassEncoder.setBindGroup(0, myBindGroup);

// Then later, unset bind group in slot 0.
myRenderPassEncoder.setBindGroup(0, null);

在设备丢失时,忽略异步流水线创建错误

GPUDevicecreateComputePipelineAsync()createRenderPipelineAsync() 方法会返回一个 promise,该 promise 会在流水线创建完成时解析。从现在起,当 GPUDevicelost 时,系统会忽略异步流水线创建过程中出现的错误,以尽可能让丢失的设备看起来正常运行。请参阅 dawn issue:1874

SPIR-V 着色器模块创建更新

现在,使用 createShaderModule() 创建 SPIR-V 着色器模块会引发 TypeError,除非您使用“不安全的 WebGPU 支持”标志运行 Chrome,因为 SPIR-V 不属于 WebGPU 规范的一部分。在此更改之前,使用 SPIR-V 会导致系统生成 GPUInternalError。请参阅更改 chromium:4711911

改进开发者体验

改进了顶点着色器中绑定组布局绑定的验证错误消息,以支持读写存储缓冲区和只写存储纹理绑定。请参阅 issue dawn:1883

使用自动生成的布局缓存流水线

使用 createRenderPipeline({ layout: "auto" }) 创建的流水线现在可以利用 Chrome 中的缓存机制。这意味着,这些流水线将更高效地创建,并会使用更少的内存。请参阅问题 dawn:1933

Dawn 更新

wgpu::RequestAdapterOptionsBackendType 现在是 wgpu::RequestAdapterOptions 的一部分,可让应用在获取适配器时更轻松地请求特定后端。请参阅以下示例和问题 dawn:1875

wgpu::RequestAdapterOptions options = {
    .backendType = wgpu::BackendType::D3D12};

// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);

我们还为 Node.js 实现了一些其他方法。请参阅更改 dawn:142465

webgpu.h C API 已将布尔值的类型从 stdbool 更改为 WGPUBool,即 uint32_t。之所以进行此更改,是为了确保该 API 在 C 和 C++ 中具有等效的 ABI

本文仅介绍了一些主要亮点。查看详尽的提交内容列表

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