WebGPU 新功能 (Chrome 135)

François Beaufort
François Beaufort

發布日期:2025 年 3 月 26 日

允許使用空值繫結群組版面配置建立管道版面配置

先前,建立空白繫結群組版面配置時,必須新增繫結群組,且繫結數為零,這項操作相當不便。這項操作已無必要,因為現在允許在建立管道版面配置時,忽略空值繫結群組版面配置。這麼做可以簡化開發作業。

舉例來說,您可能會想要建立只使用繫結群組版面配置 0 和 2 的管道。您可以將繫結群組版面配置 1 指派給片段資料,並將繫結群組版面配置 2 指派給頂點資料,然後在不使用片段著色器的情況下進行算繪。請參閱問題 377836524

const bgl0 = myDevice.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = myDevice.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = myDevice.createBindGroupLayout({ entries: myVertexEntries });

// Create a pipeline layout that will be used to render without a fragment shader.
const myPipelineLayout = myDevice.createPipelineLayout({
  bindGroupLayouts: [bgl0, null, bgl2],
});

允許可視區域超出算繪目標邊界

我們已放寬檢視區域驗證的必要條件,讓檢視區域超出轉譯目標邊界。這對於繪製 2D 元素 (例如可能延伸至目前可視區域之外的 UI) 特別實用。請參閱問題 390162929

const passEncoder = myCommandEncoder.beginRenderPass({
  colorAttachments: [
    {
      view: myColorTexture.createView(),
      loadOp: "clear",
      storeOp: "store",
    },
  ],
});

// Set a viewport that extends past the render target's bounds by 8 pixels
// in all directions.
passEncoder.setViewport(
  /*x=*/ -8,
  /*y=*/ -8,
  /*width=*/ myColorTexture.width + 16,
  /*height=*/ myColorTexture.height + 16,
  /*minDepth=*/ 0,
  /*maxDepth=*/ 1,
);

// Draw geometry and complete the render pass as usual.

在 Android 上更輕鬆存取實驗相容性模式

chrome://flags/#enable-unsafe-webgpu 標記現在可單獨啟用 Android 上實驗性 WebGPU 相容模式所需的所有功能。這樣一來,您就能使用 featureLevel: "compatibility" 選項在相容模式中要求 GPUAdapter,甚至可以在不支援 Vulkan 的裝置上存取 OpenGL ES 後端。請參閱以下範例和問題 dawn:389876644

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
WebGPU 報表頁面顯示 Android 裝置上的 GPUAdapter 相容模式。
webgpureport.org 中的相容性模式轉接器資訊。

移除 maxInterStageShaderComponents 限制

先前公告,maxInterStageShaderComponents 限制已移除,原因如下:

  • maxInterStageShaderVariables 的冗餘:這個限制已經用於類似的用途,可控制在著色器階段之間傳遞的資料量。
  • 差異不大:雖然兩種限制的計算方式略有不同,但差異不大,且可在 maxInterStageShaderVariables 限制內有效管理。
  • 簡化:移除 maxInterStageShaderComponents 可簡化著色器介面,並降低開發人員的複雜度。這樣一來,他們就能專注於命名更貼切且更全面的 maxInterStageShaderVariables,而非管理兩個差異不大的獨立限制。

請參閱「意圖移除」和問題 364338810

黎明更新

您無法再使用篩選取樣器來取樣深度紋理。提醒您,深度紋理只能搭配非篩選或比較取樣器使用。請參閱問題 379788112

WGPURequiredLimitsWGPUSupportedLimits 結構體已扁平化為 WGPULimits。請參閱問題 374263404

下列結構體已重新命名。請參閱問題 42240793

  • WGPUImageCopyBuffer 現在是 WGPUTexelCopyBufferInfo
  • WGPUImageCopyTexture 現在是 WGPUTexelCopyTextureInfo
  • WGPUTextureDataLayout 現在是 WGPUTexelCopyBufferLayout

subgroupMinSizesubgroupMaxSize 成員已新增至 WGPUAdapterInfo 結構體。請參閱 webgpu-headers PR

只要使用 DAWN_TRACE_FILE_BASE 環境變數執行程式,即可在 Metal 中追蹤 Dawn API 的用量,這個變數會儲存 .gputrace 檔案,之後可將檔案載入 XCode 的 Metal 偵錯工具。請參閱 Debugging Dawn 說明文件。

這份文件僅涵蓋部分重點。請查看完整的修訂版本清單

WebGPU 新功能

以下是「WebGPU 最新消息」系列文章中涵蓋的所有內容。

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