測試子群組
子群組功能支援 SIMD 層級的平行處理,讓群組中的執行緒互相溝通並執行集體數學運算 (例如計算 16 個數字的總和)。這提供跨執行緒資料共用的高效率形式。
在「不安全的 WebGPU 支援」機制下,您幾乎不需要導入子群組提案進行本機測試標記在 chrome://flags/#enable-unsafe-webgpu
中。
如果想試用網站上的子群組,歡迎申請來源試用。想瞭解如何為網站做好使用來源試用的準備,請參閱「開始使用來源試用」一文。來源試用期間為 Chrome 128 至 131 版 (結束日期為 2025 年 2 月 19 日)。請參閱「意圖進行實驗」一文。
如果 GPUAdapter
提供 "subgroups"
功能,請要求含有這項功能的 GPUDevice
,以便在 WGSL 中取得子群組支援,並查看其 minSubgroupSize
和 maxSubgroupSize
限制。
您也必須使用 enable subgroups;
在 WGSL 程式碼中明確啟用此擴充功能。啟用後即可使用下列新增功能:
subgroup_invocation_id
:子群組中執行緒索引的內建值。subgroup_size
:子群組大小存取權的內建值。subgroupBallot(value)
:傳回一組位元欄位,如果value
為該主動叫用為 true,則與subgroup_invocation_id
對應的位元為 1,反之則為 0。subgroupBroadcast(value, id)
:透過與id
相符的subgroup_invocation_id
將叫用的value
播送給子群組中的所有叫用。注意:id
必須是編譯時間常數。
日後會新增更多內建函式,例如 subgroupAdd
、subgroupAll
、subgroupElect
、subgroupShuffle
。請參閱問題 354738715。
如要在子群組作業中允許 f16,請使用 "subgroups"
、"subgroups-f16"
和 "shader-f16"
功能要求 GPUDevice
,然後在 WGSL 程式碼中使用 enable f16, subgroups, subgroups_f16;
啟用這項功能。
下列程式碼片段提供基本研究並探索子群組的潛力。
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
var<workgroup> wgmem : u32;
@group(0) @binding(0)
var<storage, read> inputs : array<u32>;
@group(0) @binding(1)
var<storage, read_write> output : array<u32>;
@compute @workgroup_size(64)
fn main(@builtin(subgroup_size) subgroupSize : u32,
@builtin(subgroup_invocation_id) id : u32,
@builtin(local_invocation_index) lid : u32) {
// One thread per workgroup writes the value to workgroup memory.
if (lid == 0) {
wgmem = inputs[lid];
}
workgroupBarrier();
var v = 0u;
// One thread per subgroup reads the value from workgroup memory
// and shares that value with every other thread in the subgroup
// to reduce local memory bandwidth.
if (id == 0) {
v = wgmem;
}
v = subgroupBroadcast(v, 0);
output[lid] = v;
}`,
});
// Send the appropriate commands to the GPU...
淘汰線條和點的深度偏誤設定
變更 WebGPU 規格變更後,如果轉譯管道的拓撲為線條或點類型,就會將 depthBias
、depthBiasSlopeScale
和 depthBiasClamp
設為非零值。為了讓開發人員有足夠時間更新程式碼,開發人員工具控制台中會顯示這項即將進行的驗證警告,並在這類情況下強制將值強制設為 0。請參閱問題 352567424。
如果在 preventDefault 時隱藏未擷取的錯誤,開發人員工具警告
在開發人員工具控制台中,如果註冊 uncapturederror
的事件監聽器,且已在事件監聽器回呼內呼叫事件 preventDefault()
方法,畫面上就不會再顯示 uncapturederror
事件警告。這個行為與 JavaScript 的事件處理方式相符。請參考以下範例和問題 40263619。
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.addEventListener("uncapturederror", (event) => {
// Prevents browser warning to show up in the DevTools Console.
event.preventDefault();
// TODO: Handle event.error
});
WGSL 的內插取樣率先
WGSL interpolate
屬性可讓您管理使用者定義的 IO 資料內插功能。現在,新的內插取樣參數 first
(預設) 和 either
可讓您進一步控制:first
使用基元第一個頂點的值,而 either
則允許第一個或最後一個頂點。請參閱問題 340278447。
日出最新消息
為處理非同步作業,Dwn 的 WGPUFuture 現已實作完成。重要概念包括用於機會處理事件的 wgpuInstanceProcessEvents,以及用於定義回呼位置的 WGPUCallbackMode。WGPUFuture 代表生命週期無限的一次性事件,wgpuInstanceWaitAny 會等待任何 Future 或逾時。請參閱問題 42240932。
Surface::GetCapabilities()
目前不會回報 CompositeAlphaMode::Auto
值。這個有效狀態仍然有效,且等同於 Surface::GetCapabilities().alphaMode[0]
。請參閱問題 292。
OpenGL 後端現在支援 Surface
,為每個 Present()
呼叫 Y 軸翻轉。請參閱問題 344814083。
Adapter::GetProperties()
方法已淘汰,改用 Adapter::GetInfo()
。
外部貢獻者 Jaswant 重新編寫所有 CMake 檔案,讓檔案更易於更新,並允許預先建構。請參閱快速入門指南,瞭解如何在 CMake 專案中使用 Dawn。
這只涵蓋部分重點功能。請參閱完整的修訂版本清單。
WebGPU 新功能
WebGPU 最新消息系列中所有包含的清單。
Chrome 128
Chrome 127
Chrome 126
Chrome 125
Chrome 124
Chrome 123
Chrome 122
Chrome 121
- 在 Android 上支援 WebGPU
- 在 Windows 上使用 DXC (而非 FXC) 編譯著色器
- 在運算和算繪票證中為查詢加上時間戳記
- 著色器模組的預設進入點
- 支援 display-p3 做為 GPUExternalTexture 色彩空間
- 記憶體堆積資訊
- Dawn 更新
Chrome 120
Chrome 119
Chrome 118
Chrome 117
Chrome 116
- WebCodecs 整合
- GPUAdapter 傳回遺失的裝置
requestDevice()
- 如果呼叫
importExternalTexture()
,讓影片播放順暢 - 規格符合性
- 改善開發人員體驗
- Dawn 更新