WebGPU 的新功能 (Chrome 124)

François Beaufort
François Beaufort

唯讀和讀寫儲存空間紋理

儲存體紋理繫結類型可讓著色器從儲存體紋理讀取資料,而無需新增 TEXTURE_BINDING 用法,並針對特定格式執行混合讀取和寫入作業。如果 "readonly_and_readwrite_storage_textures" WGSL 語言擴充功能位於 navigator.gpu.wgslLanguageFeatures 中,您現在可以在建立繫結群組版面配置時,將 GPUStorageTexture 存取權設為 "read-write""read-only"。先前這項功能僅限於 "write-only"

接著,WGSL 著色器程式碼可以使用 read_writeread 存取限定詞來存放紋理,textureLoad()textureStore() 內建函式會相應運作,而新的 textureBarrier() 內建函式可用於同步處理工作群組中的紋理記憶體存取作業。

建議您使用 requires-directive,在 WGSL 著色器程式碼頂端使用 requires readonly_and_readwrite_storage_textures; 表示可能無法移植。請參閱以下範例和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.

服務工作者和共用 worker 支援

Chrome 中的 WebGPU 將網頁工作者支援功能提升到新的層級,現在同時支援服務工作者共用工作者。您可以使用 Service Worker 提升背景工作和離線功能,並使用共用工作站在不同指令碼之間有效共用資源。請參閱 chromium 問題 41494731

請參閱 Chrome 擴充功能範例WebLLM Chrome 擴充功能,瞭解如何在擴充功能服務 worker 中使用 WebGPU。

WebLLM Chrome 擴充功能的螢幕截圖。
WebLLM Chrome 擴充功能。

新的轉接器資訊屬性

如果使用者已在 chrome://flags/#enable-webgpu-developer-features 中啟用「WebGPU 開發人員功能」flag,現在只要呼叫 requestAdapterInfo(),即可使用非標準 d3dShaderModelvkDriverVersion 轉接器資訊屬性。支援時:

螢幕截圖:https://webgpureport.org 顯示配接器資訊中的 vkDriverVersion。
Adapter info vkDriverVersion 顯示在 https://webgpureport.org 上。

修正錯誤

使用 layout: "auto" 建立兩個管道,並使用相符的綁定群組,然後使用第一個管道建立綁定群組,並在第二個管道中使用該綁定群組,現在會引發 GPUValidationError。允許這項功能是實作錯誤,現在已透過適當的測試修正。請參閱 issue dawn:2402

黎明更新

在 Dawn API 中,使用 wgpuDeviceSetUncapturedErrorCallback 設定未擷取的錯誤回呼,現在不會在 GPU 裝置遺失後呼叫。這個修正項目可讓 Dawn 與 JavaScript API 規格和 Blink 的實作方式保持一致。請參閱問題 dawn:2459

這份文件僅涵蓋部分重點。請查看完整的修訂版本清單

WebGPU 新功能

以下是「WebGPU 最新消息」系列文章中涵蓋的所有內容。

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