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):透過與 id 相符的 subgroup_invocation_id 將叫用的 value 播送給子群組中的所有叫用。注意: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