WebGPU(Chrome 135)中的新变化

François Beaufort
François Beaufort

发布时间:2025 年 3 月 26 日

允许使用 null 绑定组布局创建流水线布局

以前,若要创建空绑定组布局,需要添加绑定数为零的绑定组,这很不方便。现在,创建流水线布局时允许使用 null 绑定组布局,并且会忽略此类布局,因此不再需要执行此操作。这样应该可以简化开发工作。

例如,您可能希望创建一个仅使用绑定组布局 0 和 2 的流水线。您可以将绑定组布局 1 分配给片段数据,并将绑定组布局 2 分配给顶点数据,然后在不使用片段着色器的情况下进行渲染。请参阅问题 377836524

const bgl0 = myDevice.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = myDevice.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = myDevice.createBindGroupLayout({ entries: myVertexEntries });

// Create a pipeline layout that will be used to render without a fragment shader.
const myPipelineLayout = myDevice.createPipelineLayout({
  bindGroupLayouts: [bgl0, null, bgl2],
});

允许视口超出渲染目标边界

我们放宽了视口验证要求,以允许视口超出渲染目标边界。这对于绘制可能延伸到当前视口之外的 2D 元素(例如界面)特别有用。请参阅问题 390162929

const passEncoder = myCommandEncoder.beginRenderPass({
  colorAttachments: [
    {
      view: myColorTexture.createView(),
      loadOp: "clear",
      storeOp: "store",
    },
  ],
});

// Set a viewport that extends past the render target's bounds by 8 pixels
// in all directions.
passEncoder.setViewport(
  /*x=*/ -8,
  /*y=*/ -8,
  /*width=*/ myColorTexture.width + 16,
  /*height=*/ myColorTexture.height + 16,
  /*minDepth=*/ 0,
  /*maxDepth=*/ 1,
);

// Draw geometry and complete the render pass as usual.

更轻松地在 Android 上使用实验性兼容性模式

现在,仅 chrome://flags/#enable-unsafe-webgpu 标志即可启用 Android 上实验性 WebGPU 兼容模式所需的所有功能。这样,您就可以使用 featureLevel: "compatibility" 选项在兼容模式下请求 GPUAdapter,甚至可以在不支持 Vulkan 的设备上访问 OpenGL ES 后端。请参阅以下示例和问题 dawn:389876644

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
WebGPU 报告页面显示 Android 设备上处于兼容模式的 GPUAdapter。
webgpureport.org 中的兼容模式适配器信息。

移除了 maxInterStageShaderComponents 限制

正如之前所宣布的那样,我们移除了 maxInterStageShaderComponents 限制,原因有很多:

  • maxInterStageShaderVariables 重复:此限制已经用于类似目的,即控制着着色器阶段之间传递的数据量。
  • 差异不大:虽然这两个限制的计算方式略有不同,但这些差异不大,并且可以在 maxInterStageShaderVariables 限制内得到有效管理。
  • 简化:移除 maxInterStageShaderComponents 可简化着色器接口,并降低开发者的复杂性。他们可以专注于更恰当命名且更全面的 maxInterStageShaderVariables,而不是管理两个存在细微差异的单独限制。

请参阅移除 intent问题 364338810

Dawn 更新

您无法再使用过滤采样器对深度纹理进行采样。请注意,深度纹理只能与非滤镜采样器或比较采样器搭配使用。请参阅问题 379788112

WGPURequiredLimitsWGPUSupportedLimits 结构已展平为 WGPULimits。请参阅问题 374263404

重命名了以下结构体。请参阅问题 42240793

  • WGPUImageCopyBuffer 现为 WGPUTexelCopyBufferInfo
  • WGPUImageCopyTexture 现在为 WGPUTexelCopyTextureInfo
  • WGPUTextureDataLayout 现为 WGPUTexelCopyBufferLayout

subgroupMinSizesubgroupMaxSize 成员已添加到 WGPUAdapterInfo 结构体中。请参阅 webgpu-headers PR

现在,您可以使用 DAWN_TRACE_FILE_BASE 环境变量运行程序,以跟踪 Metal 中的 Dawn API 使用情况。该变量会保存一个 .gputrace 文件,该文件稍后可加载到 XCode 的 Metal 调试程序中。请参阅 Debugging Dawn 文档。

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

WebGPU 中的新变化

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

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