WebGPU 的新变化 (Chrome 124)

François Beaufort
François Beaufort

只读和读写存储纹理

存储纹理绑定类型允许着色器从存储纹理中读取数据,而无需增加 TEXTURE_BINDING 用法,并针对特定格式执行混合读写操作。当 navigator.gpu.wgslLanguageFeatures 中存在 "readonly_and_readwrite_storage_textures" WGSL 语言扩展时,您现在可以在创建绑定组布局时将 GPUStorageTexture 访问权限设置为 "read-write""read-only"。之前,只有 "write-only" 可以使用。

然后,您的 WGSL 着色器代码可以使用 read_writeread 访问限定符来存储纹理,textureLoad()textureStore() 内置函数会相应地执行相应行为,并且新的 textureBarrier() 内置函数可用于同步工作组中的纹理内存访问。

建议使用 requires-directive,通过 WGSL 着色器代码顶部的 requires readonly_and_readwrite_storage_textures; 表明可能不可移植。请参阅以下示例和issue dawn:1972

if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
  throw new Error("Read-only and read-write storage textures are not available");
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

const shaderModule = device.createShaderModule({ code: `
  requires readonly_and_readwrite_storage_textures;

  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

Service Worker 和共享 Worker 支持

Chrome 中的 WebGPU 将 Web Worker 的支持更上一层楼,现在可为 Service Worker共享 Worker 提供支持。您可以使用 Service Worker 增强后台任务和离线功能,并使用共享 Worker 实现跨脚本高效共享资源。请参阅问题 chromium:41494731

如需了解如何在扩展程序 Service Worker 中使用 WebGPU,请查看 Chrome 扩展程序示例WebLLM Chrome 扩展程序

WebLLM Chrome 扩展程序的屏幕截图。
WebLLM Chrome 扩展程序。

新的适配器信息属性

如果用户已启用“WebGPU 开发者功能”,则在调用 requestAdapterInfo() 时,现在可以使用非标准的 d3dShaderModelvkDriverVersion 适配器信息属性flag(在 chrome://flags/#enable-webgpu-developer-features 处)。受支持的情况下:

  • d3dShaderModel 是支持的最大 D3D 着色器型号。例如,值 62 表示当前驱动程序支持 HLSL SM 6.2。请参阅文档问题 dawn:1254

  • vkDriverVersion 是供应商指定的 Vulkan 驱动程序版本号。请参阅文档问题 chromium:327457605

。 <ph type="x-smartling-placeholder">
</ph> https://webgpureport.org 屏幕截图,适配器信息中包含 vkDriverVersion。
适配器信息 vkDriverVersion 显示在 https://webgpureport.org 上。

bug 修复

现在,使用 layout: "auto" 创建两个具有匹配绑定组的流水线,然后使用第一个流水线创建一个 bindgroup,并在第二个流水线上使用它,现在会引发 GPUValidationError。允许该错误是一个实现 bug,现在已通过适当的测试修复。请参阅问题 dawn:2402

Dawn 最新动态

在 Dawn API 中,现在 GPU 设备丢失后,系统不会调用使用 wgpuDeviceSetUncapturedErrorCallback 设置的未捕获错误回调。此修复使 Dawn 符合 JavaScript API 规范和 Blink 的实现。请参阅问题 dawn:2459

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

WebGPU 的新变化

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

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