From 05e697831a9dbb4450c5463dc1a73e9519b43524 Mon Sep 17 00:00:00 2001 From: Cormac O'Brien Date: Wed, 20 Nov 2019 04:29:09 -0600 Subject: [PATCH] Use count rather than size in map_read/write_async Fixes #124 --- examples/capture/main.rs | 2 +- examples/hello-compute/main.rs | 2 +- src/lib.rs | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/examples/capture/main.rs b/examples/capture/main.rs index 96bd1d7ff8..d0757c0c64 100644 --- a/examples/capture/main.rs +++ b/examples/capture/main.rs @@ -87,7 +87,7 @@ fn main() { // Write the buffer as a PNG output_buffer.map_read_async( 0, - (size * size) as u64 * size_of::() as u64, + (size * size) as usize * size_of::(), move |result: wgpu::BufferMapAsyncResult<&[u8]>| { let mut png_encoder = png::Encoder::new(File::create("red.png").unwrap(), size, size); png_encoder.set_depth(png::BitDepth::Eight); diff --git a/examples/hello-compute/main.rs b/examples/hello-compute/main.rs index 7657a910a5..d3bdf388a1 100644 --- a/examples/hello-compute/main.rs +++ b/examples/hello-compute/main.rs @@ -92,7 +92,7 @@ fn main() { queue.submit(&[encoder.finish()]); - staging_buffer.map_read_async(0, size, |result: wgpu::BufferMapAsyncResult<&[u32]>| { + staging_buffer.map_read_async(0, numbers.len(), |result: wgpu::BufferMapAsyncResult<&[u32]>| { if let Ok(mapping) = result { println!("Times: {:?}", mapping.data); } diff --git a/src/lib.rs b/src/lib.rs index be4e10eea0..70526d034f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -906,7 +906,7 @@ where } impl Buffer { - pub fn map_read_async(&self, start: BufferAddress, size: BufferAddress, callback: F) + pub fn map_read_async(&self, start: BufferAddress, count: usize, callback: F) where T: 'static + FromBytes, F: FnOnce(BufferMapAsyncResult<&[T]>) + 'static, @@ -936,6 +936,8 @@ impl Buffer { } } + let size = (count * std::mem::size_of::()) as BufferAddress; + let user_data = Box::new(BufferMapReadAsyncUserData { size, callback, @@ -951,7 +953,7 @@ impl Buffer { ); } - pub fn map_write_async(&self, start: BufferAddress, size: BufferAddress, callback: F) + pub fn map_write_async(&self, start: BufferAddress, count: usize, callback: F) where T: 'static + AsBytes + FromBytes, F: FnOnce(BufferMapAsyncResult<&mut [T]>) + 'static, @@ -981,6 +983,8 @@ impl Buffer { } } + let size = (count * std::mem::size_of::()) as BufferAddress; + let user_data = Box::new(BufferMapWriteAsyncUserData { size, callback,