WebGPU 的新功能 (Chrome 125)

François Beaufort
François Beaufort

這次的 WebGPU 功能數量可能不多,但我們即將推出一些重大進展!日後版本將包含著色器編譯速度提升等功能,並使用 WGPUFuture 變更實作的非同步模型。

子群組 (開發中的功能)

子群組功能可啟用 SIMD 層級的平行運算,讓群組內的執行緒進行通訊,並執行集體數學運算 (例如計算 16 個數字的總和)。這可提供高效率的跨執行緒資料共用形式。

現代 GPU API 支援子群組作業,但命名和實作細節有所不同。Chrome 團隊已找出這些共通點,目前正致力於將這項功能標準化。如有疑問,請參閱提案留言

「Experimental Web Platform Features」旗標後方的子群組實作項目極少且未標準化,因此開發人員可以試用並分享意見回饋,因為在 WebGPU 的環境中,尚未證明子群組的實際優勢。chrome://flags/#enable-experimental-web-platform-features

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

您也需要在 WGSL 程式碼中,使用 enable chromium_experimental_subgroups 明確啟用這項擴充功能。啟用後,你就能使用下列加購內容:

  • subgroup_invocation_id:子群組中執行緒索引的內建值。
  • subgroup_size:子群組大小存取的內建值。
  • subgroupBallot(value): 傳回一組位元欄位,如果 value 對於該有效呼叫為 true,則對應至 subgroup_invocation_id 的位元為 1,否則為 0。
  • subgroupBroadcast(value, id):將具有相符 idsubgroup_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 紋理切片

您現在可以在算繪通道中直接算繪至 3D 紋理的切片,將功能擴展至常見的 2D 紋理算繪以外,並在 GPURenderPassColorAttachment 中使用新的 depthSlice 成員。舉例來說,您可以透過直接轉譯至 3D 紋理體積,建立以體素為基礎的場景和效果。請參閱問題 dawn:1020

黎明更新

請參閱完整的提交清單

WebGPU 最新消息

WebGPU 最新消息」系列涵蓋的所有主題清單。

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

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