GraphiteEditor/Graphite · critical
Failed to create WgpuExecutor
Error message
Failed to create WgpuExecutor
What it means
Panic when WgpuExecutor::with_context returns None. Looking at the implementation, the only fallible step is creating the Vello Renderer (it maps the error to 'Failed to create Vello renderer') plus the texture cache and shader runtime setup. Vello's Renderer::new fails when the device does not meet the required limits for its compute-based rendering pipelines (e.g., storage buffer/textures counts on weak or software adapters) or when the device is lost/out of memory.
Source
Thrown at desktop/src/render/state.rs:164
topology: wgpu::PrimitiveTopology::TriangleList,
strip_index_format: None,
front_face: wgpu::FrontFace::Ccw,
cull_mode: Some(wgpu::Face::Back),
polygon_mode: wgpu::PolygonMode::Fill,
unclipped_depth: false,
conservative: false,
},
depth_stencil: None,
multisample: wgpu::MultisampleState {
count: 1,
mask: !0,
alpha_to_coverage_enabled: false,
},
multiview_mask: None,
cache: None,
});
let executor = WgpuExecutor::with_context(context).expect("Failed to create WgpuExecutor");
Self {
surface,
executor,
config,
render_pipeline,
transparent_texture,
sampler,
desired_width: size.width,
desired_height: size.height,
viewport_scale: [1., 1.],
viewport_offset: [0., 0.],
viewport_texture: None,
overlays_texture: None,
ui_texture: None,
bind_group: None,
overlays_scene: None,
surface_outdated: true,View on GitHub (pinned to c507b35645)
Solutions
- Select a hardware adapter explicitly via GRAPHITE_WGPU_ADAPTER using the printed adapter list, avoiding software/llvmpipe entries
- Update GPU and Vulkan drivers so the device reports Vello's required limits
- Close other GPU-heavy applications to free VRAM and retry
- In VMs/CI, enable GPU passthrough or hardware acceleration instead of software rendering
Example fix
// before
let executor = WgpuExecutor::with_context(context).expect("Failed to create WgpuExecutor");
// after
let executor = WgpuExecutor::with_context(context)
.unwrap_or_else(|| panic!("Failed to create WgpuExecutor (Vello renderer unsupported on adapter: {:?})", context.adapter.get_info())); Defensive patterns
Strategy: try-catch
Validate before calling
// Check the chosen adapter meets Vello's needs before constructing the executor
let info = context.adapter.get_info();
if info.software {
tracing::warn!("software adapter selected; Vello rendering may be unsupported");
} Try / catch
let Some(executor) = WgpuExecutor::with_context(context.clone()) else {
eprintln!("Failed to create WgpuExecutor on adapter {:?}; select another with GRAPHITE_WGPU_ADAPTER", context.adapter.get_info());
std::process::exit(1);
}; Prevention
- Prefer hardware adapters; filter software/llvmpipe adapters when more than one is available
- Keep GPU drivers updated so device limits satisfy Vello's renderer requirements
- Surface the adapter info in the failure message to make mis-selection obvious
When it happens
Trigger: Creating the window render state on a software adapter (llvmpipe) or GL/ANGLE-backed device whose limits fall short of Vello's requirements; a device lost between context creation and executor creation; GPU memory exhausted by other applications.
Common situations: Running on virtualized/software GPUs in CI or VMs; older integrated GPUs with outdated drivers; selecting a non-default adapter via GRAPHITE_WGPU_ADAPTER that happens to be a software adapter; long sessions where another app consumed VRAM.
Related errors
- GPU executor not available
- Failed to render Vello scene
- Failed to create WGPU context
- Failed to create surface
- GPU executor should be available when we receive a texture
AI-assisted analysis of GraphiteEditor/Graphite@c507b35645 (2026-08-16).
Data as JSON: /api/errors/cad7c95b9b1467c6.
Report an issue: GitHub.