WebGPU(Chrome 135)中的新变化

François Beaufort
François Beaufort

Published: March 26, 2025

允许使用 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

请参阅移除意向问题 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 调试器中。请参阅调试 Dawn 文档。

这仅涵盖了一些主要亮点。请查看提交的完整列表

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