What's New in WebGPU (Chrome 146)

François Beaufort
François Beaufort

Published: February 25, 2026

Support WebGPU compatibility mode on OpenGL ES 3.1

While WebGPU is designed to align with modern graphics APIs like Vulkan, Metal, and D3D12, many users have older hardware that does not support these standards. To bridge this gap and ensure broad accessibility, Chrome introduces a new opt-in feature called compatibility mode.

This mode lets you run WebGPU on older graphics APIs like OpenGL ES 3.1. By targeting a slightly restricted subset of the WebGPU spec, you ensure your web app is accessible to everyone, from the latest gaming rigs to older laptops and mobile devices. While starting with Android, the team is exploring support for other devices, such as ChromeOS with OpenGL ES 3.1 and Windows with Direct3D 11.

For many web apps, you can enable compatibility mode by passing featureLevel: "compatibility" when you call requestAdapter(). If your device supports Core WebGPU, Chrome will return a Core-capable adapter, but your web app will know to stay within the compatibility limits unless it enables the "core-features-and-limits" feature (or enables all available features). More complex applications might require minor adjustments to fit within the mode's restrictions.

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

See the WebGPU Fundamentals guide for detailed information about the specific architectural restrictions of this mode. Additionally, all WebGPU samples now support compatibility mode. You can also read the intent to ship.

Transient attachments

You can use the new TRANSIENT_ATTACHMENT GPUTextureUsage flag to create memory-efficient attachments. This lets render pass operations stay in tile memory, which avoids VRAM traffic and can avoid VRAM allocation for the textures.

By declaring a texture as transient (or "memoryless"), the GPU knows that it only needs the texture's contents temporarily—specifically, only within the current render pass. Moreover, because the texture's contents are discarded after the render pass, the driver may not need to allocate VRAM for it at all.

The following example shows how to create a transient texture.

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',
  });
}

See the Hello Triangle MSAA - WebGPU Sample and the intent to ship.

WGSL texture_and_sampler_let extension

The WGSL language extension texture_and_sampler_let lets you assign texture or sampler variables to a let within a WGSL shader. This feature currently provides an alternative naming mechanism and prepares for bindless support where methods returning textures or samplers can be stored directly into local variables.

See the following example and the intent to ship.

@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);
}

Dawn updates

The following new limit tiers are available:

SPIR-V validation is enabled by default on Android to provide an additional security layer and prevent driver instability from malformed input. See issue 473526182.

This covers only some of the key highlights. Check out the exhaustive list of commits.

What's New in WebGPU

A list of everything that has been covered in the What's New in WebGPU series.

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