發布日期:2025 年 1 月 29 日
額外的 unorm8x4-bgra 和 1 元件頂點格式
已新增 "unorm8x4-bgra"
頂點格式和下列 1 元件頂點格式:"uint8"
、"sint8"
、"unorm8"
、"snorm8"
、"uint16"
、"sint16"
、"unorm16"
、"snorm16"
和 "float16"
。
"unorm8x4-bgra"
頂點格式可讓您更輕鬆地載入 BGRA 編碼的頂點顏色,同時保留相同的著色器。此外,1 元件頂點格式可讓您只要求必要的資料,而先前 8 位元和 16 位元資料型別至少需要兩倍的資料量。請參閱 chromestatus 項目和問題 376924407。
允許使用未定義的值要求不明限制
為因應 WebGPU API 的演進,您現在可以在要求 GPU 裝置時,使用 undefined
值要求不明限制,舉例來說,在下列應用程式程式碼中,如果 someLimit
不再存在,adapter.limits.someLimit
可能會是 undefined
。請參閱規格 PR 4781。
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice({
requiredLimits: { someLimit: adapter.limits.someLimit }, // someLimit can be undefined
});
WGSL 對齊規則異動
現在所有結構體都必須滿足 @align(n)
除以 RequiredAlignOf
的條件,因此您無法再為結構體成員提供過小的對齊值。這項重大變更可簡化 WGSL 語言的使用方式,並提升與 Firefox 和 Safari 的相容性。如要查看 Tint、Naga 和 WebKit 編譯器之間的差異,請參閱規格 PR 中的範例程式碼。
使用 discard 提升 WGSL 效能
由於算繪複雜的螢幕空間反射 (SSR) 效果時,效能會大幅下降,因此 discard 陳述式的實作方式會使用平台提供的語意,在可用的情況下降級為輔助函式呼叫。這可提升使用捨棄項目的著色器效能。請參閱問題 372714384。
針對外部紋理使用 VideoFrame displaySize
根據 WebGPU 規格匯入 VideoFrame 時,displayWidth
和 displayHeight
維度應做為 GPUExternalTexture 的顯著大小。不過,系統誤用可見大小,導致嘗試在 GPUExternalTexture 上使用 textureLoad()
時發生問題。不過現在我們已順利解決這項問題。請參閱問題 377574981。
使用 copyExternalImageToTexture 處理非預設方向的圖片
copyExternalImageToTexture()
GPUQueue 方法用於將圖片或畫布的內容複製到紋理。現在可正確處理非預設方向的圖片。如果來源是具有 imageOrientation
"from-image"
的 ImageBitmap,或是具有非預設方向的圖片,則不會發生這種情況。請參閱問題 384858956。
提升開發人員體驗
當 adapter.limits
顯示高值時,您可能會感到驚訝,但您並未意識到在要求 GPU 裝置時,需要明確要求更高的限制。否則日後可能會意外達到限制。
為此,我們擴充了錯誤訊息,加入提示,說明在呼叫 requestDevice()
時,如果 requiredLimits
中未指定任何限制,就必須明確要求提高限制。請參閱問題 42240683。
下例顯示在建立 GPU 緩衝區時,如果大小超過預設的緩衝區大小裝置上限,開發人員工具控制台會記錄的改良錯誤訊息。
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create a GPU buffer with a size exceeding the default max buffer size device limit.
const size = device.limits.maxBufferSize + 1;
const buffer = device.createBuffer({ size, usage: GPUBufferUsage.MAP_READ });
device.queue.submit([]);
⚠️ Buffer size (268435457) exceeds the max buffer size limit (268435456). This adapter supports a higher maxBufferSize of 4294967296, which can be specified in requiredLimits when calling requestDevice(). Limits differ by hardware, so always check the adapter limits prior to requesting a higher limit. - While calling [Device].CreateBuffer([BufferDescriptor]).
使用 featureLevel 啟用相容模式
現在只要將標準化 featureLevel
選項設為 "compatibility"
,即可在實驗相容模式中要求 GPU 轉接器。只能輸入「"core"
」(預設) 和「"compatibility"
」字串。請參閱以下範例和規格 PR 4897。
// Request a GPU adapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
if (adapter?.featureLevel === "compatibility") {
// Any devices created from this adapter will support only compatibility mode.
}
featureLevel
選項會取代非標準化的 compatibilityMode
選項,而非標準化的 featureLevel
屬性則會取代 isCompatibilityMode
屬性。
由於這項功能仍在實驗階段,目前您必須在 chrome://flags/#enable-unsafe-webgpu
執行 Chrome,並使用「Unsafe WebGPU Support」標記。歡迎前往 webgpureport.org 試用。
清除實驗子群組功能
已移除已淘汰的 "chromium-experimental-subgroups"
和 "chromium-experimental-subgroup-uniform-control-flow"
實驗性子群組功能。請參閱問題 377868468。
"subgroups"
實驗功能現在已可實驗子群組。"subgroups-f16"
實驗功能已淘汰,並將在近期內移除。當應用程式同時要求 "shader-f16"
和 "subgroups"
功能時,您可以在子群組中使用 f16 值。請參閱問題 380244620。
淘汰 maxInterStageShaderComponents 限制
由於多種因素,maxInterStageShaderComponents
限制已淘汰:
maxInterStageShaderVariables
的冗餘:這個限制已達到類似目的,可控制著色器階段之間傳遞的資料量。- 微小差異:雖然這兩種限制的計算方式略有不同,但差異不大,可在
maxInterStageShaderVariables
限制內有效管理。 - 簡化:移除
maxInterStageShaderComponents
可簡化著色器介面,降低開發人員的複雜度。不必再管理兩個有細微差異的獨立限制,而是專注於名稱更適當且更全面的maxInterStageShaderVariables
。
目標是在 Chrome 135 中完全移除這項功能。請參閱預計淘汰和問題 364338810。
黎明更新
wgpu::Device::GetAdapterInfo(adapterInfo)
可讓您直接從 wgpu::Device
取得轉接器資訊。請參閱問題 376600838。
為使運算狀態與頂點和片段狀態保持一致,WGPUProgrammableStageDescriptor
結構體已重新命名為 WGPUComputeState
。請參閱問題 379059434。
已移除 wgpu::VertexStepMode::VertexBufferNotUsed
列舉值。現在可以使用 {.stepMode=wgpu::VertexStepMode::Undefined, .attributeCount=0}
表示未使用的頂點緩衝區版面配置。請參閱問題 383147017。
這僅涵蓋部分重點。請參閱完整的提交清單。
WebGPU 最新消息
「WebGPU 最新消息」系列涵蓋的所有主題清單。
Chrome 140
- 裝置要求會耗用轉接程式
- 使用紋理檢視畫面時,可使用紋理的簡短形式
- WGSL textureSampleLevel 支援 1D 紋理
- 淘汰 bgra8unorm 唯讀儲存空間紋理用法
- 移除 GPUAdapter isFallbackAdapter 屬性
- Dawn 更新
Chrome 139
Chrome 138
Chrome 137
- 使用紋理檢視區塊進行 externalTexture 繫結
- 複製緩衝區,但不指定位移和大小
- WGSL 工作群組 UniformLoad,使用指標指向原子
- GPUAdapterInfo powerPreference 屬性
- 移除 GPURequestAdapterOptions compatibilityMode 屬性
- Dawn 更新
Chrome 136
Chrome 135
- 允許使用空值繫結群組版面配置建立管道版面配置
- 允許檢視區塊超出算繪目標的邊界
- 在 Android 上更輕鬆存取實驗性相容模式
- 移除 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 134
Chrome 133
- 額外的 unorm8x4-bgra 和 1 元件頂點格式
- 允許使用未定義的值要求不明限制
- WGSL 對齊規則變更
- 使用 discard 提升 WGSL 效能
- 針對外部紋理使用 VideoFrame displaySize
- 使用 copyExternalImageToTexture 處理方向非預設的圖片
- 提升開發人員體驗
- 使用 featureLevel 啟用相容模式
- 清除實驗性子群組功能
- 淘汰 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 132
- 紋理檢視畫面使用方式
- 32 位元浮點紋理混合
- GPUDevice adapterInfo 屬性
- 以無效格式設定畫布內容時,會擲回 JavaScript 錯誤
- 紋理的篩選取樣器限制
- 擴大子群組實驗
- 提升開發人員體驗
- 實驗性支援 16 位元標準化紋理格式
- Dawn 更新
Chrome 131
- 在 WGSL 中裁剪距離
- GPUCanvasContext getConfiguration()
- 點和線條圖元不得有深度偏差
- 子群組的內建包容性掃描功能
- 實驗性支援多重繪圖間接
- 著色器模組編譯選項「嚴格的數學」
- 移除 GPUAdapter requestAdapterInfo()
- Dawn 更新
Chrome 130
Chrome 129
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
copyExternalImageToTexture()
支援 HTMLImageElement 和 ImageData- 實驗性支援讀寫和唯讀儲存空間紋理
- Dawn 更新
Chrome 117
Chrome 116
- 整合 WebCodecs
- GPUAdapter
requestDevice()
傳回的遺失裝置 - 如果呼叫
importExternalTexture()
,請確保影片播放流暢 - 規格一致性
- 提升開發人員體驗
- Dawn 更新
Chrome 115
Chrome 114
Chrome 113
- 在
importExternalTexture()
中使用 WebCodecs VideoFrame 來源