Function wgpu_async::wrap

source ·
pub fn wrap(device: Arc<Device>, queue: Arc<Queue>) -> (AsyncDevice, AsyncQueue)
Expand description

Takes a regular wgpu::Device and wgpu::Queue and gives you the corresponding smart pointers, AsyncDevice and AsyncQueue.

§Usage

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 {
            required_features: wgpu::Features::empty(),
            required_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!