发布时间: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
- 设备请求消耗适配器
- 使用纹理视图时使用纹理的简写形式
- WGSL textureSampleLevel 支持一维纹理
- 弃用 bgra8unorm 只读存储纹理用法
- 移除了 GPUAdapter isFallbackAdapter 属性
- Dawn 更新
Chrome 139
Chrome 138
Chrome 137
- 使用纹理视图进行 externalTexture 绑定
- 复制缓冲区,但不指定偏移量和大小
- 使用指向原子变量的指针的 WGSL workgroupUniformLoad
- GPUAdapterInfo powerPreference 属性
- 移除 GPURequestAdapterOptions compatibilityMode 属性
- Dawn 更新
Chrome 136
Chrome 135
- 允许创建具有 null bind 组布局的流水线布局
- 允许视口超出渲染目标边界
- 更轻松地访问 Android 上的实验性兼容性模式
- 移除 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 134
Chrome 133
- 新增了 unorm8x4-bgra 和 1 分量顶点格式
- 允许请求具有未定义值的未知限制
- WGSL 对齐规则变更
- 使用 discard 提高 WGSL 性能
- 针对外部纹理使用 VideoFrame displaySize
- 使用 copyExternalImageToTexture 处理具有非默认方向的图片
- 改善开发者体验
- 启用与 featureLevel 的兼容模式
- 清理实验性子群组功能
- 弃用 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 132
- 纹理视图使用情况
- 32 位浮点纹理混合
- GPUDevice adapterInfo 属性
- 使用无效格式配置画布上下文时抛出 JavaScript 错误
- 纹理的过滤采样器限制
- 扩展子群组实验
- 改善开发者体验
- 实验性支持 16 位归一化纹理格式
- Dawn 更新
Chrome 131
- 剪裁 WGSL 中的距离
- GPUCanvasContext getConfiguration()
- 点和线图元不得具有深度偏移
- 子群组的包含性扫描内置函数
- 对多重绘制间接调用的实验性支持
- 着色器模块编译选项 strict math
- 移除 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 更新
Chrome 115
Chrome 114
Chrome 113
- 在
importExternalTexture()
中使用 WebCodecs VideoFrame 来源