What's New in WebGPU (Chrome 140)

François Beaufort
François Beaufort

Published: August 27, 2025

Device requests consume adapter

According to the WebGPU specification, an adapter is marked as "consumed" upon a successful device request. Consequently, any subsequent requestDevice() calls using the same adapter will now result in a rejected promise. Previously, these calls would return a device that was lost at creation. See issue 415825174.

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

await adapter.requestDevice(); // Fails because adapter has been consumed.

Shorthand for using texture where texture view is used

A GPUTexture can now be used directly as a GPUBindingResource to expose to the shader for binding. It can also be used as a GPURenderPassColorAttachment view, a GPURenderPassColorAttachment resolveTarget, and a GPURenderPassDepthStencilAttachment view for improved ergonomics. This offers a simpler approach than using a GPUTextureView to get a default view. See issue 425906323.

const bindGroup = myDevice.createBindGroup({
  layout: myPipeline.getBindGroupLayout(0),
  entries: [
    { binding: 0, resource: mySampler },
    { binding: 1, resource: myTexture }, // Same as myTexture.createView()
    { binding: 2, resource: myExternalTexture },
    { binding: 3, resource: myBuffer },
  ],
});

WGSL textureSampleLevel supports 1D textures

1D textures can now be sampled using textureSampleLevel() for consistency with 2D textures. This lets you sample a 1D texture from a vertex shader which was previously only possible from a fragment shader with textureSample(). See issue 382514673.

Deprecate bgra8unorm read-only storage texture usage

Using "bgra8unorm" format with read-only storage textures is now deprecated. The WebGPU specification explicitly disallows this, and its prior allowance in Chrome was a bug, as this format is intended for write-only access and is not portable. See issue 427681156.

Remove GPUAdapter isFallbackAdapter attribute

As previously announced, the GPUAdapter isFallbackAdapter attribute is now removed. It's replaced by the GPUAdapterInfo isFallbackAdapter attribute that was introduced in Chrome 136. See intent to remove.

Dawn updates

The wgpuInstanceGetWGSLLanguageFeatures() function is used to get a list of WGSL language features supported by the instance. Previously it returned a WGPUStatus value. It has been updated to not return a value since it can't fail. See issue 429178774.

The wgpuSurfacePresent() function now returns a WGPUStatus error if the surface doesn't have a current texture. See issue 425930323

The new wgpu::InstanceFeatureName::MultipleDevicesPerAdapter feature lets adapters create multiple devices without being "consumed". See issue 415825174.

The dump_shaders_on_failure device toggle lets you dump shaders only on failure for debugging purposes. It applies exclusively to D3 backends, though future expansion to other backends is possible. See issue 429187478.

Multiple changes have been made to the Vulkan backend to reduce overhead when submitting render passes, especially for improved performance on mobile GPUs. For example: caching VkFramebuffers.

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