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 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

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