1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
#![deny(missing_docs)]
#![warn(clippy::cast_lossless)]
#![deny(clippy::cast_possible_truncation)]
#![deny(clippy::cast_possible_wrap)]
#![deny(clippy::cast_sign_loss)]
#![warn(clippy::cast_precision_loss)]
#![deny(clippy::as_underscore)]
#![deny(clippy::cast_ptr_alignment)]
#![warn(clippy::checked_conversions)]
#![warn(clippy::clone_on_ref_ptr)]
#![warn(clippy::cloned_instead_of_copied)]
#![warn(clippy::get_unwrap)]
#![deny(clippy::fallible_impl_from)]
#![warn(clippy::significant_drop_in_scrutinee)]
#![deny(clippy::unwrap_used)]
#![deny(clippy::as_ptr_cast_mut)]
#![warn(clippy::case_sensitive_file_extension_comparisons)]
#![doc=include_str!( "../README.md")]
mod async_buffer;
mod async_device;
mod async_queue;
mod wgpu_future;
use std::sync::Arc;
pub use async_buffer::AsyncBuffer;
pub use async_buffer::AsyncBufferSlice;
pub use async_device::AsyncDevice;
pub use async_queue::AsyncQueue;
pub use wgpu_future::WgpuFuture;
/// Takes a regular `wgpu::Device` and `wgpu::Queue` and gives you the corresponding smart
/// pointers, [`AsyncDevice`] and [`AsyncQueue`].
///
/// # Usage
///
/// ```
/// # use std::sync::Arc;
/// # pollster::block_on(async {
/// let instance = wgpu::Instance::new(wgpu::InstanceDescriptor::default());
/// let adapter = instance
/// .request_adapter(&wgpu::RequestAdapterOptions {
/// power_preference: wgpu::PowerPreference::HighPerformance,
/// compatible_surface: None,
/// force_fallback_adapter: true,
/// })
/// .await
/// .expect("missing adapter");
/// let (device, queue) = adapter
/// .request_device(
/// &wgpu::DeviceDescriptor {
/// features: wgpu::Features::empty(),
/// limits: adapter.limits(),
/// label: None,
/// },
/// None,
/// )
/// .await
/// .expect("missing device");
///
/// let (device, queue) = (Arc::new(device), Arc::new(queue));
///
/// let (async_device, async_queue) = wgpu_async::wrap(
/// Arc::clone(&device),
/// Arc::clone(&queue)
/// );
///
/// // Then we can do some async-enabled things:
/// let async_buffer = async_device.create_buffer(&wgpu::BufferDescriptor {
/// label: None,
/// size: 8192,
/// usage: wgpu::BufferUsages::MAP_READ,
/// mapped_at_creation: false,
/// });
/// async_buffer.slice(..).map_async(wgpu::MapMode::Read).await; // New await functionality!
/// # })
/// ```
pub fn wrap(device: Arc<wgpu::Device>, queue: Arc<wgpu::Queue>) -> (AsyncDevice, AsyncQueue) {
let device = AsyncDevice::new(device);
let queue = AsyncQueue::new(device.clone(), queue);
return (device, queue);
}