Skip to main content

structural_scene

Function structural_scene 

Source
pub fn structural_scene(width: u32, height: u32) -> Result<SceneBundle, Error>
Expand description

Builds a synthetic structural/tall/multipart/fog/cutaway/UI contract scene.

ยงErrors

Returns a scene validation error for dimensions below the fixture contract.

Examples found in repository?
examples/corpus.rs (line 17)
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13    println!("{{\"schema_version\":1,\"cases\":[");
14    let cases = [
15        ("overlap-square", synthetic_scene(16, 16)?, 50_000_u64),
16        ("unaligned-wide", synthetic_scene(31, 17)?, 50_000),
17        ("structural-fog-ui", structural_scene(48, 48)?, 75_000),
18        ("high-density-1024", dense_scene(128, 128)?, 250_000),
19    ];
20    for (index, (name, scene, maximum_cpu_micros)) in cases.into_iter().enumerate() {
21        let viewport = scene.viewport();
22        let started = Instant::now();
23        let frame = ReferenceRenderer::new(offscreen_target(viewport.width, viewport.height))?
24            .render(RenderRequest {
25                scene: &scene,
26                resources: synthetic_provider()?,
27            })?;
28        let elapsed_micros = u64::try_from(started.elapsed().as_micros()).unwrap_or(u64::MAX);
29        if elapsed_micros > maximum_cpu_micros {
30            return Err(format!(
31                "scenario {name} exceeded CPU budget: {elapsed_micros} > {maximum_cpu_micros} microseconds"
32            )
33            .into());
34        }
35        let semantic = frame
36            .semantic_ids
37            .iter()
38            .flat_map(|value| value.to_le_bytes())
39            .collect::<Vec<_>>();
40        let depth = frame
41            .depth
42            .iter()
43            .flat_map(|value| value.to_le_bytes())
44            .collect::<Vec<_>>();
45        println!(
46            "{}{{\"name\":\"{}\",\"width\":{},\"height\":{},\"clock_millis\":{},\"maximum_rgba_channel_difference\":1,\"performance\":{{\"maximum_cpu_micros\":{},\"sprite_count\":{},\"resource_requests\":{},\"uploaded_bytes\":{},\"vertex_count\":{},\"vertex_allocation_bytes\":{},\"target_allocation_bytes\":{}}},\"digests\":{{\"rgba8\":\"{}\",\"semantic_u32le\":\"{}\",\"depth_i16le\":\"{}\",\"coverage_u8\":\"{}\"}}}}",
47            if index == 0 { "" } else { "," },
48            name,
49            viewport.width,
50            viewport.height,
51            scene.clock_millis(),
52            maximum_cpu_micros,
53            scene.sprites().len(),
54            frame.metrics.resource_requests,
55            frame.metrics.uploaded_bytes,
56            frame.metrics.vertex_count,
57            frame.metrics.vertex_allocation_bytes,
58            frame.metrics.target_allocation_bytes,
59            digest(&frame.rgba8),
60            digest(&semantic),
61            digest(&depth),
62            digest(&frame.coverage),
63        );
64    }
65    println!("]}}");
66    Ok(())
67}