What's New in WebGPU (Chrome 145)

François Beaufort
François Beaufort

Published: January 28, 2026

WGSL subgroup_uniformity extension

The WGSL language extension subgroup_uniformity changes the scope of the uniformity analysis for subgroup and quad built-in functions to occur at the subgroup level (instead of workgroup). This feature allows subgroup functionality to be considered uniform in more cases, representing better quality-of-life for developers and less likelihood of disabling uniformity checks altogether. A practical implication is that more values will be seen as subgroup-uniform, such as the recently added subgroup_id built-in value.

This language extension can be feature-detected using navigator.gpu.wgslLanguageFeatures. See the following example and the intent to ship.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_uniformity")) {
  throw new Error(`WGSL subgroup uniformity is not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable s<ubgroups;
  
  @gro>up(0) @binding(0) varstorage, read_write non_uniform: i32;

  fn main() {
    if (non_uniform == 42) {
      _ = subgroupElect();
    }
  }`,
}); // WGSL error: subgroupElect must only be called from subgroup uniform control flow.

Experimental synchronous buffer mapping in workers

To explore potential ways to reduce friction between WebGPU and application code, the Chrome team is investigating synchronous buffer mapping within workers. As part of this effort, a new experimental mapSync() method for GPUBuffer has been prototyped. This method, restricted to workers, works similarly to mapAsync().

This feature is experimental, and your feedback is important to determine if it will be proposed for standardization. To try it out, launch Chrome using the --enable-features=WebGPUMapSyncOnWorkers switch, and report feedback on its utility and impact. See the following snippet to start.

// Create a GPU buffer.
const buffer = device.createBuffer({
  size: 42,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Map buffer synchronously when possible.
if ("mapSync" in GPUBuffer.prototype) {
  buffer.mapSync(GPUMapMode.READ);
} else {
  // Awaiting allows other code to run, which can cause application logic issues.
  await buffer.mapAsync(GPUMapMode.READ);
}

Dawn updates

The wgpu::FeatureName::R8UnormStorage feature is no longer available. It has been replaced by wgpu::FeatureName::TextureFormatTier1, which now supersedes it. See issue 472926167.

The wgpu::FeatureName::Snorm16TextureFormats feature has been removed. Its capabilities, with the exception of Resolve, are now largely encompassed by wgpu::FeatureName::TextureFormatsTier1. See issue 465347942.

Nightly releases of binaries (in addition to Emdawnwebgpu) are now built on GitHub, and available in google/dawn releases. They are provided as a best-effort service and are not signed or guaranteed by Google or the Dawn team.

wgpu::ExternalTexture support has been added to Emdawnwebgpu. Note that it can only be imported from JavaScript code (for example, EM_ASM), as construction in C/C++ is not possible due to the requirement for a JavaScript object such as HTMLVideoElement or VideoFrame. See issue 462477379, and SpotTests.cpp for example code.

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