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):將調用中的 value 透過與 id 相符的 subgroup_invocation_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 紋理切片

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

黎明更新

請參閱完整的提交清單

WebGPU 最新消息

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

Chrome 143

Chrome 142

Chrome 141

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