v146 · Web APIs · WebGPU
WebGPU compatibility mode
Chrome 146 adds WebGPU compatibility mode — a subset of WebGPU that can run on OpenGL ES 3.1 and OpenGL 4.4, in addition to the primary backends (Vulkan, Metal, D3D12). This extends WebGPU to hardware and platforms where Vulkan is not available.
concepts
-
Compatibility Demo
Requests a WebGPU adapter in compatibility mode using the
featureLevel: 'compatibility'option, and reports which adapter was returned and what the device's limits are. -
Compatibility Limits
What features are restricted in compatibility mode versus full WebGPU, why each restriction exists (OpenGL ES limits), and how to write shaders that work in both modes.
-
Feature fallback matrix
The full optional-feature table evaluated against your device's adapters. Switch between compatibility and core requests and see which features come back.
-
Feature Matrix
Full filterable table of WebGPU features versus compatibility mode — sorted by category, showing which are supported, partially limited, or unavailable. Includes a live GPU adapter probe to see which mode your device can deliver.
why it shipped
Standard WebGPU targets modern GPU APIs — Vulkan on Linux/Android, Metal on Apple, D3D12 on Windows. These are not universally available: some Android devices only support OpenGL ES, some Linux systems lack Vulkan drivers, and embedded or older hardware may not support these APIs at all. WebGPU compatibility mode maps to OpenGL ES 3.1+ (Android, embedded) and OpenGL 4.4+ (desktop Linux without Vulkan), with a small set of restrictions to stay within what these APIs support. The result: WebGPU reaches more devices.
the change
// Request a compatibility mode adapter (Chrome 146+)
const adapter = await navigator.gpu.requestAdapter({
featureLevel: 'compatibility', // new in Chrome 146
});
if (!adapter) {
// Not supported — fall back to canvas 2D or WebGL
throw new Error('No WebGPU adapter available');
}
const device = await adapter.requestDevice();
// Check if running in compatibility mode
console.log(adapter.featureLevel); // 'compatibility' or 'core'
// Compatibility mode restrictions:
// - No cube array textures
// - No separate depth/stencil aspects for textures
// - No multi-draw-indirect
// - WGSL: no sample_mask built-in
// Code that avoids these features works in both modes