額外的 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 的相容性。您可以在規格 PR 中找到範例程式碼,瞭解 Tint、Naga 和 WebKit 編譯器之間的差異。

使用 discard 提升 WGSL 效能

由於算繪複雜的螢幕空間反射 (SSR) 效果時,效能會大幅下降,因此 discard 陳述式的實作會使用平台提供的語意,在可用的情況下降級為輔助函式呼叫。這可提升使用捨棄項目的著色器效能。請參閱問題 372714384

針對外部紋理使用 VideoFrame displaySize

根據 WebGPU 規格匯入 VideoFrame 時,displayWidthdisplayHeight 維度應做為 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 146

  • 在 OpenGL ES 3.1 上支援 WebGPU 相容模式
  • 暫時性附件
  • WGSL texture_and_sampler_let
  • Dawn 更新
  • Chrome 145

  • WGSL subgroup_uniformity 擴充功能
  • 工作人員中的實驗性同步緩衝區對應
  • Dawn 更新
  • Chrome 144

  • WGSL subgroup_id 擴充功能
  • WGSL uniform_buffer_standard_layout 擴充功能
  • Linux 上的 WebGPU
  • 更快速的 writeBuffer 和 writeTexture
  • Dawn 更新
  • Chrome 143

  • 紋理元件 swizzle
  • 移除 bgra8unorm 唯讀儲存空間紋理使用情形
  • Dawn 更新
  • Chrome 142

  • 擴充紋理格式支援功能
  • WGSL 中的基本索引
  • Dawn 更新
  • Chrome 141

  • Tint IR 完成
  • WGSL 編譯器中的整數範圍分析
  • Vulkan 後端的 SPIR-V 1.4 更新
  • Dawn 更新
  • Chrome 140

  • 裝置要求會耗用轉接器
  • 使用紋理檢視畫面時,可使用紋理的簡短形式
  • WGSL textureSampleLevel 支援 1D 紋理
  • 淘汰 bgra8unorm 唯讀儲存空間紋理用法
  • 移除 GPUAdapter isFallbackAdapter 屬性
  • Dawn 更新
  • Chrome 139

  • 支援 BC 和 ASTC 壓縮格式的 3D 紋理
  • 新的「核心功能和限制」功能
  • WebGPU 相容性模式的原始試用
  • Dawn 更新
  • Chrome 138

  • 將緩衝區做為繫結資源的簡寫
  • 建立時對應的緩衝區大小規定異動
  • 近期 GPU 的架構報告
  • 淘汰 GPUAdapter isFallbackAdapter 屬性
  • Dawn 更新
  • Chrome 137

  • 使用紋理檢視區塊進行 externalTexture 繫結
  • 複製緩衝區,但不指定位移和大小
  • WGSL 工作群組 UniformLoad,使用指標指向原子
  • GPUAdapterInfo powerPreference 屬性
  • 移除 GPURequestAdapterOptions compatibilityMode 屬性
  • Dawn 更新
  • Chrome 136

  • GPUAdapterInfo isFallbackAdapter 屬性
  • 改善 D3D12 的著色器編譯時間
  • 儲存及複製畫布圖片
  • Lift 相容模式限制
  • Dawn 更新
  • Chrome 135

  • 允許使用空值繫結群組版面配置建立管道版面配置
  • 允許檢視區塊超出算繪目標的邊界
  • 在 Android 上更輕鬆存取實驗性相容模式
  • 移除 maxInterStageShaderComponents 限制
  • Dawn 更新
  • Chrome 134

  • 使用子群組提升機器學習工作負載
  • 移除浮點可篩選紋理類型支援,做為可混合的類型
  • Dawn 更新
  • Chrome 133

  • 額外的 unorm8x4-bgra 和 1 元件頂點格式
  • Allow unknown limits to be requested with undefined value
  • WGSL 對齊規則變更
  • 使用 discard 提升 WGSL 效能
  • 針對外部紋理使用 VideoFrame displaySize
  • 使用 copyExternalImageToTexture 處理方向非預設的圖片
  • 提升開發人員體驗
  • 使用 featureLevel 啟用相容模式
  • 清除實驗性子群組功能
  • 淘汰 maxInterStageShaderComponents 限制
  • Dawn 更新
  • Chrome 132

  • 紋理檢視畫面使用方式
  • 32 位元浮點紋理混合
  • GPUDevice adapterInfo 屬性
  • 以無效格式設定畫布內容時,會擲回 JavaScript 錯誤
  • 紋理的篩選取樣器限制
  • 擴大子群組實驗
  • 提升開發人員體驗
  • 實驗性支援 16 位元標準化紋理格式
  • Dawn 更新
  • Chrome 131

  • 裁剪 WGSL 中的距離
  • GPUCanvasContext getConfiguration()
  • 點和線條圖元不得有深度偏差
  • 子群組的內建掃描功能
  • 實驗性支援多重繪圖間接
  • 著色器模組編譯選項 strict math
  • 移除 GPUAdapter requestAdapterInfo()
  • Dawn 更新
  • Chrome 130

  • 雙來源混合
  • 改善 Metal 的著色器編譯時間
  • 淘汰 GPUAdapter requestAdapterInfo()
  • Dawn 更新
  • Chrome 129

  • 支援 HDR,並提供畫布色調對應模式
  • 擴大支援子群組
  • Dawn 更新
  • Chrome 128

  • 實驗子群組
  • 淘汰線條和點的深度偏差設定
  • 如果 preventDefault,則隱藏未擷取的錯誤開發人員工具警告
  • WGSL 會先插補取樣,然後
  • Dawn 更新
  • Chrome 127

  • Android 上的 OpenGL ES 實驗性支援
  • GPUAdapter 資訊屬性
  • 改善 WebAssembly 互通性
  • 改善指令編碼器錯誤
  • Dawn 更新
  • Chrome 126

  • 提高 maxTextureArrayLayers 上限
  • 針對 Vulkan 後端最佳化緩衝區上傳作業
  • 縮短著色器編譯時間
  • 提交的指令緩衝區不得重複
  • Dawn 更新
  • Chrome 125

  • 子群組 (開發中的功能)
  • 將內容算繪至 3D 紋理的切片
  • Dawn 更新
  • Chrome 124

  • 唯讀和讀寫儲存紋理
  • 支援 Service Worker 和 Shared Worker
  • 新的轉接器資訊屬性
  • Dawn 更新
  • Chrome 123

  • WGSL 支援 DP4a 內建函式
  • WGSL 中不受限制的指標參數
  • WGSL 中取消參照複合項的語法糖
  • 樣板和深度層面的唯讀狀態分開
  • Dawn 更新
  • Chrome 122

  • 使用相容模式擴大觸及範圍 (開發中的功能)
  • 提高 maxVertexAttributes 上限
  • Dawn 更新
  • Chrome 121

  • 在 Android 上支援 WebGPU
  • 在 Windows 上使用 DXC 取代 FXC,編譯著色器
  • 運算和算繪階段中的時間戳記查詢
  • 著色器模組的預設進入點
  • 支援將 display-p3 做為 GPUExternalTexture 色彩空間
  • 記憶體堆積資訊
  • Dawn 更新
  • Chrome 120

  • WGSL 支援 16 位元浮點值
  • 深度樣板狀態的變更
  • 更新轉接器資訊
  • 時間戳記查詢量化
  • 春季大掃除功能
  • Chrome 119

  • 可篩選的 32 位元浮點紋理
  • unorm10-10-10-2 頂點格式
  • rgb10a2uint 紋理格式
  • Dawn 更新
  • Chrome 118

  • copyExternalImageToTexture() 中支援 HTMLImageElement 和 ImageData
  • 實驗性支援讀寫和唯讀儲存空間紋理
  • Dawn 更新
  • Chrome 117

  • 取消設定頂點緩衝區
  • 取消設定繫結群組
  • 裝置遺失時,不要顯示非同步管道建立作業的錯誤
  • SPIR-V 著色器模組建立作業更新
  • 提升開發人員體驗
  • 使用自動產生的版面配置快取管道
  • Dawn 更新
  • Chrome 116

  • 整合 WebCodecs
  • GPUAdapter requestDevice() 傳回的遺失裝置
  • 如果呼叫 importExternalTexture(),請確保影片播放流暢
  • 規格一致性
  • 提升開發人員體驗
  • Dawn 更新
  • Chrome 115

  • 支援的 WGSL 語言擴充功能
  • 實驗性支援 Direct3D 11
  • 在接上 AC 電源時預設使用獨立 GPU
  • 提升開發人員體驗
  • Dawn 更新
  • Chrome 114

  • 最佳化 JavaScript
  • 未設定畫布時,getCurrentTexture() 會擲回 InvalidStateError
  • WGSL 更新
  • Dawn 更新
  • Chrome 113

  • importExternalTexture() 中使用 WebCodecs VideoFrame 來源
  • 除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。

    上次更新時間:2025-01-29 (世界標準時間)。

    [[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-01-29 (世界標準時間)。"],[],[]]