What's WebGPU 的新功能 (Chrome 適 130)

François Beaufort
François Beaufort

雙來源混和

將兩個片段著色器輸出內容合併為單一幀緩衝區,稱為「雙來源混合」。這項技術特別適合需要複雜混合作業的應用程式,例如以 Porter-Duff 混合模式為基礎的應用程式。雙來源混合可將後續的算繪通道替換為單一算繪通道,進而提升效能和彈性。

透過新的 "dual-source-blending" WebGPU 功能,您可以在 @location(0) 使用 WGSL @blend_src 屬性,標示混合來源索引和下列混合因子"src1""one-minus-src1""src1-alpha""one-minus-src1-alpha"。請參閱下列程式碼片段、chromestatus 項目問題 341973423

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("dual-source-blending")) {
  throw new Error("Dual source blending support is not available");
}
// Explicitly request dual source blending support.
const device = await adapter.requestDevice({
  requiredFeatures: ["dual-source-blending"],
});

const code = `
  enable dual_source_blending;

  struct FragOut {
    @location(0) @blend_src(0) color : vec4f,
    @location(0) @blend_src(1) blend : vec4f,
  }

  @fragment fn main() -> FragOut {
    var output : FragOut;
    output.color = vec4f(1.0, 1.0, 1.0, 1.0);
    output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
    return output;
  }
`;

const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...

改善 Metal 的著色器編譯時間

Chrome 團隊正在強化 Tint (WebGPU 著色器語言編譯器),為支援 Metal 後端的 WebGPU 裝置導入中繼表示法 (IR)。這個 IR 位於 Tint 的抽象語法樹 (AST) 和 Metal 後端編寫器之間,可提升編譯器的效率和可維護性,最終造福開發人員和使用者。初步測試結果顯示,新版 Tint 在將 Unity 的 WGSL 著色器轉換為 MSL 時,速度最多可提升 10 倍。

流程圖:顯示將 WGSL 著色器程式碼轉換為低階 GPU 指令的程序。
在 macOS 中建立轉譯管道。

這些改良功能已在 Android 和 ChromeOS 上推出,並逐步擴展至支援 WebGPU 的 macOS 裝置 (搭配 Metal 後端)。請參閱問題 42251016

淘汰 GPUAdapter requestAdapterInfo()

開發人員已可使用 GPUAdapter info 屬性同步取得 GPUAdapterInfo,因此 GPUAdapter requestAdapterInfo() 非同步方法已顯得冗餘。因此,非標準的 GPUAdapter requestAdapterInfo() 方法現已淘汰。請參閱淘汰意圖

開發人員工具控制台會顯示 requestAdapterInfo() 的淘汰警告。
Chrome 開發人員工具中顯示 requestAdapterInfo() 的已淘汰功能警告。

黎明更新

webgpu.h C API 為擴充功能結構體定義了一些命名慣例。請參閱下列名稱異動和問題 42241174

WGPURenderPassDescriptor 擴充功能
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
WGPUShaderModuleDescriptor 擴充功能
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
WGPUSurfaceDescriptor 擴充功能
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

WGPUDepthStencilStatedepthWriteEnabled 屬性類型會從布林值切換為 WGPUOptionalBool,以更準確地反映其三種可能狀態 (true、false 和未定義),如同 JavaScript API。詳情請參閱下列程式碼片段和 webgpu-headers PR

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

這僅涵蓋部分重點。請參閱完整的提交清單

WebGPU 最新消息

WebGPU 最新消息」系列涵蓋的所有主題清單。

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

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