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

  1. Select a hardware adapter explicitly via GRAPHITE_WGPU_ADAPTER using the printed adapter list, avoiding software/llvmpipe entries
  2. Update GPU and Vulkan drivers so the device reports Vello's required limits
  3. Close other GPU-heavy applications to free VRAM and retry
  4. 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

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


AI-assisted analysis of GraphiteEditor/Graphite@c507b35645 (2026-08-16). Data as JSON: /api/errors/cad7c95b9b1467c6. Report an issue: GitHub.