WebGPU 的新变化 (Chrome 127)

François Beaufort
François Beaufort

在 Android 上对 OpenGL ES 的实验性支持

现在,在 Chrome(Android 版)中请求实验性 WebGPU 兼容模式时,您可以从 OpenGL ES 后端访问 GPUAdapter。这对于不支持 Vulkan 1.1 或更高版本的 Android 设备尤为有用。请参阅以下示例和问题 dawn:1545

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
<ph type="x-smartling-placeholder">
</ph> WebGPU 报告页面显示了 Android 设备上 OpenGL ES 后端的 GPUAdapter 信息。
webgpureport.org 中的 OpenGL ES 适配器信息

由于此功能仍处于实验阶段,因此您需要执行以下步骤:

  1. 启用以下 Chrome 标志:“不安全的 WebGPU 支持”、“WebGPU 开发者功能”和“在未取得 root 权限的设备上启用命令行”。
  2. 在 Android 设备上启用 USB 调试。
  3. 将 Android 设备连接到工作站,运行 adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' 以优先选择 OpenGL ES 后端(而非 Vulkan),然后重启 Chrome。

GPUAdapter 信息属性

现在,可以使用 GPUAdapter info 属性以同步方式获取有关适配器的标识信息。以前,调用异步 GPUAdapter requestAdapterInfo() 方法是获取适配器信息的唯一方式。不过,requestAdapterInfo() 已从 WebGPU 规范中移除,并将于今年晚些时候从 Chrome 中移除,以便为 Web 开发者留出足够的时间进行必要的过渡。请参阅以下示例:Chrome 状态问题 335383516

const adapter = await navigator.gpu.requestAdapter();
const info = adapter.info;

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

WebAssembly 互操作性改进

为了适应将 WebAssembly 堆直接传递到 WebGPU 的情况,以下 BufferSource 参数的大小不再限制为 2 GB:setBindGroup() 中的 dynamicOffsetsDatawriteBuffer() 中的来源 data 和来源 data Pin writeTexture()。请参阅问题 339049388

改进了命令编码器错误

现在,命令编码器引发的一些验证错误已得到改进的上下文信息。例如,如果在渲染通道仍处于打开状态时尝试启动计算通道,则会导致以下错误。

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

这确实说明了错误的原因,但并不指出实际是哪个调用导致了验证错误。以下错误显示了改进后的消息功能,其中包括触发错误的命令。请参阅变更 192245

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

Dawn 最新动态

webgpu.h C API 不再公开 wgpuSurfaceGetPreferredFormat()(相当于 Dawn 的 wgpu::Surface::GetPreferredFormat() 的 C 语言)。请改为使用 wgpu::Surface::GetCapabilities() 获取受支持格式的列表,然后使用 formats[0] 获取此 Surface 的首选纹理格式。与此同时,调用 wgpu::Surface::GetPreferredFormat() 会发出弃用警告。请参阅问题 290

现在,调用 wgpu::Surface::GetCapabilities() 时,可通过 wgpu::SurfaceCapabilities::usages 获得 Surface 支持的纹理使用。它们应始终包含 wgpu::TextureUsage::RenderAttachment。请参阅问题 301

本指南仅涵盖部分重要内容。查看详尽的提交内容列表

WebGPU 的新变化

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

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