2025-03-21 13:25:31 -04:00

117 lines
3.5 KiB
Rust

mod multi_instance {
#![cfg(not(target_arch = "wasm32"))]
async fn get() -> wgpu::Adapter {
let adapter = {
let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor {
backends: wgpu::Backends::from_env().unwrap_or_default(),
..Default::default()
});
instance
.request_adapter(&wgpu::RequestAdapterOptions::default())
.await
.unwrap()
};
log::info!("Selected adapter: {:?}", adapter.get_info());
adapter
}
#[test]
pub fn multi_instance() {
{
env_logger::init();
// Sequential instances.
for _ in 0..3 {
pollster::block_on(get());
}
// Concurrent instances
let _instances: Vec<_> = (0..3).map(|_| pollster::block_on(get())).collect();
}
}
}
mod request_adapter_error {
fn id(backends: wgpu::Backends) -> wgpu::InstanceDescriptor {
wgpu::InstanceDescriptor {
backends,
flags: wgpu::InstanceFlags::default(),
backend_options: wgpu::BackendOptions::default(),
}
}
fn adapter_error(desc: &wgpu::InstanceDescriptor) -> String {
let instance = wgpu::Instance::new(desc);
pollster::block_on(instance.request_adapter(&wgpu::RequestAdapterOptions {
power_preference: wgpu::PowerPreference::default(),
force_fallback_adapter: false,
compatible_surface: None,
}))
.unwrap_err()
.to_string()
}
#[test]
fn no_backends_requested() {
assert_eq!(
adapter_error(&id(wgpu::Backends::empty())),
"No suitable graphics adapter found; \
noop not requested, \
vulkan not requested, \
metal not requested, \
dx12 not requested, \
gl not requested, \
webgpu not requested"
);
}
/// This test nominally tests the noop backend, but it also exercises the logic for other backends
/// that fail to return any adapter.
#[test]
fn noop_not_enabled() {
assert_eq!(
adapter_error(&id(wgpu::Backends::NOOP)),
"No suitable graphics adapter found; \
noop not explicitly enabled, \
vulkan not requested, \
metal not requested, \
dx12 not requested, \
gl not requested, \
webgpu not requested"
);
}
#[test]
fn no_compiled_support() {
// Whichever platform we are on, try asking for a backend that definitely will be
// cfged out regardless of feature flags. (Not that these tests run on wasm at all yet.)
#[cfg(target_family = "wasm")]
assert_eq!(
adapter_error(&id(wgpu::Backends::METAL)),
"No suitable graphics adapter found; \
noop not requested, \
vulkan not requested, \
metal support not compiled in, \
dx12 not requested, \
gl not requested, \
webgpu not requested"
);
#[cfg(not(target_family = "wasm"))]
assert_eq!(
adapter_error(&id(wgpu::Backends::BROWSER_WEBGPU)),
"No suitable graphics adapter found; \
noop not requested, \
vulkan not requested, \
metal not requested, \
dx12 not requested, \
gl not requested, \
webgpu support not compiled in"
);
}
}