mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-12-08 21:26:17 +00:00
117 lines
3.5 KiB
Rust
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"
|
|
);
|
|
}
|
|
}
|