mrdoob/three.js · critical · Error
THREE.WebGPUBackend: Unable to create WebGPU adapter.
Error message
THREE.WebGPUBackend: Unable to create WebGPU adapter.
What it means
Thrown by WebGPUBackend.init() when navigator.gpu.requestAdapter() resolves to null (or navigator.gpu is absent and the call is skipped). A null adapter means the browser could not provide any WebGPU-capable GPU adapter under the requested options — so there is no device to create and the backend cannot function.
Source
Thrown at src/renderers/webgpu/WebGPUBackend.js:225
const parameters = this.parameters;
// create the device if it is not passed with parameters
let device;
if ( parameters.device === undefined ) {
const adapterOptions = {
powerPreference: parameters.powerPreference,
featureLevel: 'compatibility',
xrCompatible: renderer.xr.enabled
};
const adapter = ( typeof navigator !== 'undefined' ) ? await navigator.gpu.requestAdapter( adapterOptions ) : null;
if ( adapter === null ) {
throw new Error( 'THREE.WebGPUBackend: Unable to create WebGPU adapter.' );
}
// feature support
const features = Object.values( GPUFeatureName );
const supportedFeatures = [];
for ( const name of features ) {
if ( adapter.features.has( name ) ) {
supportedFeatures.push( name );
}
}View on GitHub (pinned to da05705fa3)
Solutions
- Feature-detect WebGPU before constructing the renderer: `if (!navigator.gpu) { fall back to WebGL }`.
- Fall back to a WebGLRenderer (WebGLBackend) when requestAdapter returns null or throws.
- Relax adapterOptions (drop powerPreference/featureLevel) and retry.
- Ensure the browser is WebGPU-capable and GPU drivers are up to date; in tests use a GPU-enabled headless setup (e.g. HeadlessShell with SwiftShader).
Example fix
// before
const renderer = new WebGPURenderer(); // throws in init() if no adapter
await renderer.init();
// after
let renderer;
if (navigator.gpu && (await navigator.gpu.requestAdapter().catch(() => null))) {
renderer = new WebGPURenderer();
await renderer.init();
} else {
renderer = new WebGLRenderer();
} Defensive patterns
Strategy: fallback
Validate before calling
async function createRendererWithFallback(params) {
if (navigator.gpu) {
const adapter = await navigator.gpu.requestAdapter({ powerPreference: params.powerPreference }).catch(() => null);
if (adapter) { const r = new THREE.WebGPURenderer(params); await r.init(); return { renderer: r, backend: 'webgpu' }; }
}
return { renderer: new THREE.WebGLRenderer(params), backend: 'webgl' };
} Type guard
async function webgpuSupported() {
return typeof navigator !== 'undefined' && !!navigator.gpu && !!(await navigator.gpu.requestAdapter().catch(() => null));
} Try / catch
try {
renderer = new THREE.WebGPURenderer(params);
await renderer.init();
} catch (e) {
if (/Unable to create WebGPU adapter/.test(e.message)) { renderer = new THREE.WebGLRenderer(params); }
else throw e;
} Prevention
- Feature-detect navigator.gpu and requestAdapter() before constructing a WebGPURenderer.
- Always keep a WebGLRenderer fallback path for unsupported environments.
- In CI/headless, run with a GPU-capable browser build (SwiftShader/HeadlessShell).
When it happens
Trigger: Constructing WebGPURenderer/WebGPUBackend in a browser without WebGPU support, with WebGPU disabled by flags, on an outdated GPU/driver, in a headless/SSR context (no navigator.gpu), or with adapterOptions the system cannot satisfy.
Common situations: Running in Firefox/Safari without WebGPU enabled. Linux machines without proper GPU drivers. CI/headless browsers lacking GPU adapters. Over-constrained powerPreference or featureLevel options. End-user machines with blocked/unsupported GPUs.
Related errors
- THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinat
- THREE.WebGLRenderer: Error creating WebGL context with your
- THREE.WebGLRenderer: Error creating WebGL context.
- THREE.Renderer: .compileComputeAsync() expects a ComputeNode
- THREE.Renderer: .render() called before the backend is initi
AI-assisted analysis of mrdoob/three.js@da05705fa3 (2026-08-12).
Data as JSON: /api/errors/c4f052f6bef7088f.
Report an issue: GitHub.