pub(crate) fn try_device() -> Option<(wgpu::Device, wgpu::Queue)> {
pollster::block_on(async {
let instance = wgpu::Instance::new(wgpu::InstanceDescriptor {
display: None,
backends: wgpu::Backends::PRIMARY,
flags: wgpu::InstanceFlags::default(),
memory_budget_thresholds: wgpu::MemoryBudgetThresholds::default(),
backend_options: wgpu::BackendOptions::default(),
});
let adapter = instance
.request_adapter(&wgpu::RequestAdapterOptions {
power_preference: wgpu::PowerPreference::None,
force_fallback_adapter: false,
compatible_surface: None,
})
.await
.ok()?;
adapter.request_device(&wgpu::DeviceDescriptor::default()).await.ok()
})
}
macro_rules! with_device {
($device:ident, $queue:ident, $body:block) => {
match crate::wgpu::test_util::try_device() {
Some(($device, $queue)) => $body,
None => {
eprintln!("skipping: no wgpu adapter available on this machine");
}
}
};
}
pub(crate) use with_device;