对 Android 上的 OpenGL ES 的实验性支持
现在,当您在 Chrome for 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 });
由于此功能仍处于实验阶段,因此您需要执行以下步骤:
- 启用以下 Chrome 标志:“Unsafe WebGPU Support”“WebGPU Developer Features”和“Enable command line on non-rooted devices”。
- 在 Android 设备上启用 USB 调试。
- 将 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 互操作改进
为了适应直接传递给 WebGPU 的 WebAssembly 堆,以下 BufferSource 参数的大小不再限制为 2 GB:dynamicOffsetsData 在 setBindGroup() 中、源 data 在 writeBuffer() 中,以及源 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] 获取此表面首选的纹理格式。同时,调用
wgpu::Surface::GetPreferredFormat() 会发出弃用警告。请参阅问题 290。
现在,在调用 wgpu::Surface::GetCapabilities() 时,可以通过
wgpu::SurfaceCapabilities::usages 获取表面的支持纹理用法。它们应始终包含
wgpu::TextureUsage::RenderAttachment。请参阅问题 301。
这仅涵盖了一些主要亮点。如需查看提交的完整列表,请点击此处。
WebGPU 的新变化
“WebGPU 的新变化”系列中涵盖的所有内容的列表。
Chrome 147-148
Chrome 146
Chrome 145
Chrome 144
- WGSL subgroup_id 扩展
- WGSL uniform_buffer_standard_layout 扩展
- Linux 上的 WebGPU
- 更快的 writeBuffer 和 writeTexture
- Dawn 更新
Chrome 143
Chrome 142
Chrome 141
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 绑定组布局创建流水线布局
- 允许视口超出渲染目标边界
- 更轻松地访问 Android 上的实验性兼容模式
- 移除 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 134
Chrome 133
- 额外的 unorm8x4-bgra 和 1 组件顶点格式
- 允许使用未定义的值请求未知限制
- WGSL 对齐规则变更
- WGSL 通过 discard 提升性能
- 将 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
- copyExternalImageToTexture()
copyExternalImageToTexture()中支持 HTMLImageElement 和 ImageData - 对读写和只读存储纹理的实验性支持
- Dawn 更新
Chrome 117
Chrome 116
- WebCodecs 集成
- GPUAdapter
requestDevice()返回的丢失设备 - 如果调用
importExternalTexture(),则保持视频播放流畅 - 规范一致性
- 提升开发者体验
- Dawn 更新
Chrome 115
Chrome 114
Chrome 113
- 在
importExternalTexture()中使用 WebCodecs VideoFrame 源