WebGPU 的新功能 (Chrome 125)

François Beaufort
François Beaufort

這次的 WebGPU 功能數量可能會讓您覺得有點稀少,但我們即將推出一些重大進展!日後推出的版本將包含一些功能,例如著色器編譯速度改善,以及使用 WGPUFuture 實作非同步模型的變更。

子群組 (開發中的功能)

子群組功能可啟用 SIMD 等級的平行運算,讓群組中的執行緒進行通訊及執行集體數學運算 (例如計算 16 個數字的總和)。這可提供非常有效率的跨執行緒資料共用方式。

現代 GPU API 支援子群組作業,但命名和實作細節各有不同。Chrome 團隊已找出共同點,並正在努力將這項功能標準化。如有任何疑問,請查看提案留言

chrome://flags/#enable-experimental-web-platform-features 的「Experimental Web Platform Features」標記後方,有一個不受標準化限制的子群組實作,開發人員可以試用並提供意見回饋,因為 WebGPU 的實際效益尚未獲得證實。

GPUAdapter 支援 "chromium-experimental-subgroups" 功能時,請要求使用這項功能的 GPUDevice,以便在 WGSL 中取得實驗子群組支援,並檢查其 minSubgroupSizemaxSubgroupSize 限制。

您也需要使用 enable chromium_experimental_subgroups 在 WGSL 程式碼中明確啟用此擴充功能。啟用後,您就能使用下列新增功能:

  • subgroup_invocation_id:子群組中執行緒索引的內建值。
  • subgroup_size:子群組大小存取權的內建值。
  • subgroupBallot(value): 會傳回一組位元欄位,其中與 subgroup_invocation_id 相對應的位元為 1 (如果 value 對該有效叫用為 true),否則為 0。
  • subgroupBroadcast(value, id):將呼叫中 valuesubgroup_invocation_id 廣播給子群組中的所有呼叫,以便與 id 相符。注意:id 必須是編譯時間常數。

以下程式碼片段可讓您著手調整,並發掘子群組的潛力。

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

算繪至 3D 紋理的切片

您現在可以使用 GPURenderPassColorAttachment 中的新 depthSlice 成員,直接在算繪階段算繪 3D 紋理的切片,擴展其功能,超越一般 2D 紋理算繪。舉例來說,您可以直接將轉譯結果算繪至 3D 紋理體積,藉此建立以 Voxel 為基礎的場景和效果。請參閱 issue dawn:1020

黎明更新

請查看完整的修訂版本清單

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