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

建議您使用 requiresdirective,在 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.

服務工作站和共用工作站支援

Chrome 中的 WebGPU 將網路工作站的支援服務提升到更高層次,並同時支援服務工作站共用工作站。您可以運用服務工作處理程序強化背景工作和離線功能,並共用員工,加快指令碼之間共用資源的速度。詳情請參閱問題 chromium:41494731

請參考 Chrome 擴充功能範例WebLLM 的 Chrome 擴充功能,瞭解如何在擴充功能 Service Worker 中使用 WebGPU。

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

新的轉接器資訊屬性

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

https://webgpureport.org 螢幕截圖,內含轉接器資訊中的 vkDriverVersion。
轉接程式資訊 vkDriverVersion,顯示於 https://webgpureport.org

修正錯誤

請使用 layout: "auto" 建立兩個包含相符繫結群組的管道,然後建立包含第一個管道的繫結群組,然後在第二個管道上使用該群組,此時會引發 GPUValidationError。允許該錯誤屬於導入錯誤,現在您已透過正確的測試修正。請參閱問題 dawn:2402

日出最新消息

在 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