gpu: captures draw name labels; a shared capturer and a PNG with the CPU as last tier

render::draw_labels draws a scene's labels over finished pixels in the CPU
rasterizer's font. capture::shared opens the process's device once by the
FIELDCRAFT_GPU policy; capture::png draws on it or on the CPU and reports
which (Renderer).

Refs #422

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
jyvikoandClaude Opus 5.5 authored and Irakli Kourtis committed 2026-10-15 20:50:40 -04:00
1 parent fee978c7e4
commit c9163e98ad
5 files changed
+134 -20

No files matched your search

+41
View File
@@ -29,3 +29,44 @@ pub enum GpuError {
}
pub type Result<T> = std::result::Result<T, GpuError>;
/// The kind of device a picture was drawn on.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Tier {
Hardware,
Software,
}
impl Tier {
pub fn label(self) -> &'static str {
match self {
Tier::Hardware => "hardware GPU",
Tier::Software => "software GPU",
}
}
}
/// What drew a picture.
#[derive(Clone, Debug, PartialEq)]
pub enum Renderer {
Gpu {
adapter: String,
tier: Tier,
samples: u32,
},
/// The CPU rasterizer, and why when a GPU was wanted (`auto` with no usable GPU).
Cpu {
why: Option<String>,
},
}
impl Renderer {
/// `"hardware"`, `"software"` or `"cpu"`.
pub fn kind(&self) -> &'static str {
match self {
Renderer::Gpu { tier: Tier::Hardware, .. } => "hardware",
Renderer::Gpu { tier: Tier::Software, .. } => "software",
Renderer::Cpu { .. } => "cpu",
}
}
}