發布日期: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
。請參閱 spec 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 語言的使用方式,並讓 WGSL 與 Firefox 和 Safari 更相容。您可以在 spec PR 中找到範例程式碼,說明 Tint、Naga 和 WebKit 編譯器之間的差異。
透過棄用功能提升 WGSL 效能
由於在算繪複雜的螢幕空間反射 (SSR) 效果時,會觀察到效能大幅下降,因此捨棄陳述式的實作會使用平台提供的語意,在可用時降級為輔助呼叫。這可改善使用捨棄功能的著色器效能。請參閱問題 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
中使用「Unsafe WebGPU Support」標記執行 Chrome。歡迎前往 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 133
- 其他 unorm8x4-bgra 和 1 個元件的頂點格式
- 允許使用未定義的值要求不明的限制
- WGSL 對齊規則異動
- 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 進行著色器編譯
- 在運算和算繪階段中執行時間戳記查詢
- 著色器模組的預設進入點
- 支援使用顯示器-p3 做為 GPUExternalTexture 色彩空間
- 記憶體堆積資訊
- Dawn 更新
Chrome 120
Chrome 119
Chrome 118
Chrome 117
Chrome 116
- WebCodecs 整合
- GPUAdapter
requestDevice()
傳回的遺失裝置 - 如果呼叫
importExternalTexture()
,請保持影片播放流暢 - 規格相符性
- 改善開發人員體驗
- Dawn 更新