Headless wgpu device for tests. Uses the default noop/fallback backend if available so tests run in CI without a GPU. Returns None on environments where no adapter is available — tests that need a device are skipped gracefully.
()
| 280 | /// None on environments where no adapter is available — tests that |
| 281 | /// need a device are skipped gracefully. |
| 282 | fn try_create_device() -> Option<(wgpu::Device, wgpu::Queue)> { |
| 283 | let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { |
| 284 | backends: wgpu::Backends::all(), |
| 285 | ..wgpu::InstanceDescriptor::new_without_display_handle() |
| 286 | }); |
| 287 | let adapter = pollster::block_on(instance.request_adapter(&wgpu::RequestAdapterOptions { |
| 288 | power_preference: wgpu::PowerPreference::LowPower, |
| 289 | compatible_surface: None, |
| 290 | force_fallback_adapter: true, |
| 291 | })).ok()?; |
| 292 | let (device, queue) = pollster::block_on(adapter.request_device( |
| 293 | &wgpu::DeviceDescriptor { |
| 294 | label: Some("transient-test-device"), |
| 295 | required_features: wgpu::Features::empty(), |
| 296 | required_limits: wgpu::Limits::downlevel_defaults(), |
| 297 | ..Default::default() |
| 298 | }, |
| 299 | )).ok()?; |
| 300 | Some((device, queue)) |
| 301 | } |
| 302 | |
| 303 | #[test] |
| 304 | fn size_policy_resolves() { |
no outgoing calls