The change log above contains most of the details about what has changed about WGPU and therefore the tutorial. I will make a special mention about how to use `map_async()` as that has changed. Previously `map_async` returned a promise that you had to await before you could access a buffers contents. It now expects a `'static` callback that takes the `Result` of the mapping attempt as a parameter. This means that if we want to save a buffers context to an image instead of doing the following:
```rust
{
let buffer_slice = output_buffer.slice(..);
let mapping = buffer_slice.map_async(wgpu::MapMode::Read);
Another thing to note is that presentation modes need to match what the surface supports. You can get a list of supported modes from [Surface::get_surface_modes()](https://docs.rs/wgpu/latest/wgpu/struct.Surface.html#method.get_supported_modes).
As always, let me know if I missed anything in the migration process. You can open an issue/submit a PR on the [Learn Wgpu repo](https://github.com/sotrh/learn-wgpu)!