blob: 434c68ccc4c752b2fe48aa52008ab5b78abc4240 [file] [edit]
// Copyright 2026 the Vello Authors
// SPDX-License-Identifier: Apache-2.0 OR MIT
//! Tests for probing the wgpu renderer.
use vello_common::probe;
use vello_gpu::{RenderTargetConfig, Renderer, WgpuProbeStatus};
#[test]
fn wgpu_probe_succeeds_with_depth_buffer() {
run_wgpu_probe(true);
}
#[test]
fn wgpu_probe_succeeds_without_depth_buffer() {
run_wgpu_probe(false);
}
fn run_wgpu_probe(use_depth_buffer: bool) {
let instance = wgpu::Instance::default();
let adapter =
pollster::block_on(instance.request_adapter(&wgpu::RequestAdapterOptions::default()))
.expect("Failed to find an appropriate adapter");
let (device, queue) =
pollster::block_on(adapter.request_device(&wgpu::DeviceDescriptor::default()))
.expect("Failed to create device");
let (width, height) = probe::canvas_size(probe::ALL_PROBE_ELEMENTS);
let config = RenderTargetConfig {
format: wgpu::TextureFormat::Rgba8Unorm,
width,
height,
};
let (mut renderer, _) = Renderer::new(&device, &queue, &config);
let mut pending = renderer
.probe(probe::ALL_PROBE_ELEMENTS, use_depth_buffer)
.unwrap_or_else(|error| panic!("Renderer::probe() failed to render: {error:?}"));
loop {
device.poll(wgpu::PollType::wait_indefinitely()).unwrap();
match pending.try_finish() {
Ok(WgpuProbeStatus::Complete(result)) => {
assert!(result.is_success(), "probe failed unexpectedly");
return;
}
Ok(WgpuProbeStatus::Pending(next_pending)) => pending = next_pending,
Err(error) => panic!("Renderer::probe() readback failed: {error:?}"),
}
}
}