WebGPU 中的新变化(Chrome 140)

François Beaufort
François Beaufort

发布时间:2025 年 8 月 27 日

设备请求会消耗适配器

根据 WebGPU 规范,成功请求设备后,适配器会被标记为“已消耗”。因此,任何后续使用同一适配器的 requestDevice() 调用现在都会导致 promise 被拒绝。之前,这些调用会返回创建时丢失的设备。请参阅问题 415825174

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

await adapter.requestDevice(); // Fails because adapter has been consumed.

使用纹理视图时使用纹理的简写

现在,GPUTexture 可直接用作 GPUBindingResource,以向着色器公开以进行绑定。它还可以用作 GPURenderPassColorAttachment view、GPURenderPassColorAttachment resolveTarget 和 GPURenderPassDepthStencilAttachment view,以提高人体工程学性能。与使用 GPUTextureView 获取默认视图相比,这种方法更简单。请参阅 问题 425906323

const bindGroup = myDevice.createBindGroup({
  layout: myPipeline.getBindGroupLayout(0),
  entries: [
    { binding: 0, resource: mySampler },
    { binding: 1, resource: myTexture }, // Same as myTexture.createView()
    { binding: 2, resource: myExternalTexture },
    { binding: 3, resource: myBuffer },
  ],
});

WGSL textureSampleLevel 支持一维纹理

现在可以使用 textureSampleLevel() 对 1D 纹理进行采样,以与 2D 纹理保持一致。这样一来,您就可以从顶点着色器中对 1D 纹理进行采样,而之前只能通过片段着色器使用 textureSample() 来实现。请参阅 问题 382514673

弃用 bgra8unorm 只读存储纹理使用

现在已弃用将 "bgra8unorm" 格式与只读存储纹理搭配使用。WebGPU 规范明确禁止这样做,而 Chrome 之前允许这样做是一个 bug,因为此格式仅用于写入访问,且不可移植。请参阅问题 427681156

移除 GPUAdapter isFallbackAdapter 属性

如之前公告所述,GPUAdapter isFallbackAdapter 属性现已移除。它已替换为 Chrome 136 中引入的 GPUAdapterInfo isFallbackAdapter 属性。请参阅移除意图

Dawn 更新

wgpuInstanceGetWGSLLanguageFeatures() 函数用于获取实例支持的 WGSL 语言功能列表。之前,它返回的是 WGPUStatus 值。由于该方法不会失败,因此已更新为不返回值。请参阅问题 429178774

如果界面没有当前纹理,wgpuSurfacePresent() 函数现在会返回 WGPUStatus 错误。请参阅问题 425930323

借助新的 wgpu::InstanceFeatureName::MultipleDevicesPerAdapter 功能,适配器可以创建多个设备,而不会被“消耗”。请参阅问题 415825174

借助 dump_shaders_on_failure 设备切换开关,您可以仅在失败时转储着色器,以用于调试。它仅适用于 D3 后端,但未来可能会扩展到其他后端。请参阅问题 429187478

对 Vulkan 后端进行了多项更改,以减少提交渲染通道时的开销,尤其是在移动 GPU 上提升性能。例如:缓存 VkFramebuffer

这仅涵盖了部分重要亮点。查看详尽的提交列表

WebGPU 的新变化

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

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