zed-industries/zed · error

Failed to create wgpu device: {e}

Error message

Failed to create wgpu device: {e}

What it means

Raised in `WgpuContext::create_device` when `adapter.request_device` fails: the adapter cannot provide a logical device with the requested features/limits. Typical causes are required_features not supported by the driver, required_limits exceeding adapter.limits(), or the device being lost during creation.

Source

Thrown at crates/gpui_wgpu/src/wgpu_context.rs:279

                .using_resolution(adapter.limits())
                .using_alignment(adapter.limits())
        };
        #[cfg(not(target_family = "wasm"))]
        let required_limits = wgpu::Limits::downlevel_defaults()
            .using_resolution(adapter.limits())
            .using_alignment(adapter.limits());

        let (device, queue) = adapter
            .request_device(&wgpu::DeviceDescriptor {
                label: Some("gpui_device"),
                required_features,
                required_limits,
                memory_hints: wgpu::MemoryHints::MemoryUsage,
                trace: wgpu::Trace::Off,
                experimental_features: wgpu::ExperimentalFeatures::disabled(),
            })
            .await
            .map_err(|e| anyhow::anyhow!("Failed to create wgpu device: {e}"))?;

        Ok((
            device,
            queue,
            dual_source_blending,
            color_atlas_texture_format,
        ))
    }

    #[cfg(not(target_family = "wasm"))]
    pub fn instance(display: Box<dyn wgpu::wgt::WgpuHasDisplayHandle>) -> wgpu::Instance {
        wgpu::Instance::new(wgpu::InstanceDescriptor {
            backends: wgpu::Backends::VULKAN | wgpu::Backends::GL,
            flags: wgpu::InstanceFlags::default(),
            backend_options: wgpu::BackendOptions::default(),
            memory_budget_thresholds: wgpu::MemoryBudgetThresholds::default(),
            display: Some(display),
        })

View on GitHub (pinned to f4178619ac)

Solutions

  1. Derive required_limits from adapter.limits() (as this code already does) and avoid requesting features the adapter does not expose.
  2. Call adapter.features() and intersect with desired features before requesting.
  3. Retry after a device-lost event; a fresh adapter/device request may succeed.
  4. Update GPU drivers or fall back to software/less-capable backends.
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at crates/gpui_wgpu/src/wgpu_context.rs:279 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of zed-industries/zed@f4178619ac (2026-08-20). Data as JSON: /api/errors/1bf9d245dd4d09f8. Report an issue: GitHub.