对 Android 上的 OpenGL ES 的实验性支持
现在,在 Android 版 Chrome 中请求实验性 WebGPU 兼容模式时,您可以从 OpenGL ES 后端访问 GPUAdapter
。这对于不支持 Vulkan 1.1 或更高版本的 Android 设备特别有用。请参阅以下示例和问题 dawn:1545。
// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
由于此功能仍处于实验阶段,因此您需要执行以下步骤:
- 启用以下 Chrome 标志:“不安全的 WebGPU 支持”“WebGPU 开发者功能”和“在非已取得 root 权限的设备上启用命令行”。
- 在 Android 设备上启用 USB 调试。
- 将 Android 设备连接到工作站,运行
adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line'
以优先使用 OpenGL ES 后端而非 Vulkan,然后重启 Chrome。
GPUAdapter info 属性
现在,您可以使用 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()
中的 dynamicOffsetsData
、writeBuffer()
中的源 data
和源 data
引脚 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 131
- 在 WGSL 中剪裁距离
- GPUCanvasContext getConfiguration()
- 点和线基元不得有深度偏差
- 针对子群组的包含性扫描内置函数
- 对多绘制间接的实验性支持
- 着色器模块编译选项“严格数学”
- 移除了 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 更新