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() 內建函式同步處理工作群組中的紋理記憶體存取權。

建議您在 WGSL 著色器程式碼頂端使用 Requires-directive 來指出 requires readonly_and_readwrite_storage_textures; 不可遷移。請參閱以下範例和問題發生時間: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 與共用員工支援

Chrome 的 WebGPU 讓網路工作站的效率更上一層樓,現在支援服務工作站共用工作站。您可以使用 Service Worker 來增強背景工作和離線功能,以及透過共用工作人員有效率地跨指令碼分享資源。請參閱問題 chromium:41494731

如要瞭解如何在擴充功能服務工作站中使用 WebGPU,請參閱 Chrome 擴充功能範例WebLLM Chrome 擴充功能

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

新的轉接器資訊屬性

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

https://webgpureport.org 螢幕截圖,當中包含轉接程式資訊中的 vkDriverVersion。
顯示在 https://webgpureport.org 上的轉接程式資訊 vkDriverVersion

修正錯誤

使用 layout: "auto" 建立兩個具有相符繫結群組的管道,然後建立包含第一個管道的繫結群組,並在第二個管道中使用,現在會產生 GPUValidationError。允許此版本的實作錯誤,現已修正為正確的測試。請參閱「問題日:2402」。

黎明更新

在 Dawn API 中,當 GPU 裝置遺失後,系統便不會呼叫使用 wgpuDeviceSetUncapturedErrorCallback 設定的未擷取錯誤回呼。這個修正項目讓 Dawn 符合 JavaScript API 規格和 Blink 實作項目。請參閱「問題日:2459」。

這僅涵蓋部分重點功能。查看完整的修訂版本清單

WebGPU 的新功能

WebGPU 新功能」系列中已說明的所有功能清單。

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