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 中取得實驗性子群組支援,並檢查其 minSubgroupSize 和 maxSubgroupSize 限制。

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

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

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

黎明更新

請參閱完整的提交清單。

WebGPU 新功能

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

Chrome 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

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