WebGPU 新功能 (Chrome 146)

François Beaufort
François Beaufort

發布日期:2026 年 2 月 25 日

支援 OpenGL ES 3.1 的 WebGPU 相容模式

WebGPU 的設計與 Vulkan、Metal 和 D3D12 等現代圖形 API 保持一致,但許多使用者配備的硬體較舊,不支援這些標準。為解決這個問題並確保廣泛的無障礙功能,Chrome 推出了新的選擇啟用功能,稱為相容模式。

這個模式可讓您在較舊的圖形 API (例如 OpenGL ES 3.1) 上執行 WebGPU。指定 WebGPU 規格中稍微受限的子集,確保所有人都能存取您的網頁應用程式,無論是最新型電競電腦、舊款筆電或行動裝置。雖然目前僅支援 Android,但團隊正在研究如何支援其他裝置,例如搭載 OpenGL ES 3.1 的 ChromeOS 和搭載 Direct3D 11 的 Windows。

對於許多網頁應用程式,您可以在呼叫 requestAdapter() 時傳遞 featureLevel: "compatibility",啟用相容模式。如果裝置支援 Core WebGPU,Chrome 會傳回支援 Core 的轉接器,但除非啟用 "core-features-and-limits" 功能 (或啟用所有可用功能),否則網頁應用程式會知道要遵守相容性限制。如果應用程式較為複雜,可能需要稍做調整,才能符合模式的限制。

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
const device = await adapter.requestDevice();

如要詳細瞭解這個模式的特定架構限制,請參閱 WebGPU 基礎指南。此外,所有 WebGPU 範例現在都支援相容模式。你也可以閱讀出貨意願

暫時性附件

您可以使用新的 TRANSIENT_ATTACHMENT GPUTextureUsage 旗標建立節省記憶體的附件。這可讓算繪通道作業保留在圖塊記憶體中,避免 VRAM 流量,並避免為紋理分配 VRAM。

將紋理宣告為暫時性 (或「無記憶體」) 後,GPU 就會知道只需要暫時使用紋理的內容,具體來說,只在目前的算繪通道內使用。此外,由於紋理的內容會在算繪通道後捨棄,驅動程式可能完全不需要為其分配 VRAM。

以下範例說明如何建立暫時性紋理。

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

if ('TRANSIENT_ATTACHMENT' in GPUTextureUsage) {

  const transientTexture = device.createTexture({
    size: [42, 42],
    // The TRANSIENT_ATTACHMENT flag indicates the texture content is temporary,
    // potentially keeping it in fast on-chip memory.
    usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT,
    format: 'rgba8unorm',
  });
}

請參閱「Hello Triangle MSAA - WebGPU Sample」和「intent to ship」。

WGSL texture_and_sampler_let 擴充功能

WGSL 語言擴充功能 texture_and_sampler_let 可讓您在 WGSL 著色器中,將紋理或取樣器變數指派給 let。這項功能目前提供替代命名機制,並為無繫結支援做好準備,也就是可將傳回紋理或取樣器的方法直接儲存在區域變數中。

請參閱以下範例和出貨意願

@group(0) @binding(0) var tex: texture_2d<f32>;
@group(1) @binding(0) var store : texture_storage_2d<r32float, read_write>;

@fragment fn main() {
    let a = tex;
    var res: vec4f = textureLoad(a, vec2i(1i), 0);

    textureStore(store, vec2i(0i), res);
}

黎明更新

以下是可用的新限制層級:

  • maxStorageBuffersPerShaderStage 最多支援 16 個。請參閱問題 366151398

  • maxSampledTexturesPerShaderStage 最多支援 48 個。請參閱問題 475255737

Android 預設會啟用 SPIR-V 驗證,提供額外的安全防護層,並防止輸入內容格式錯誤導致驅動程式不穩定。請參閱問題 473526182

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

WebGPU 最新消息

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

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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