Use count rather than size in map_read/write_async

Fixes #124
This commit is contained in:
Cormac O'Brien
2019-11-20 04:29:09 -06:00
parent c176e5d6e4
commit 05e697831a
3 changed files with 8 additions and 4 deletions

View File

@@ -87,7 +87,7 @@ fn main() {
// Write the buffer as a PNG
output_buffer.map_read_async(
0,
(size * size) as u64 * size_of::<u32>() as u64,
(size * size) as usize * size_of::<u32>(),
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);

View File

@@ -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);
}

View File

@@ -906,7 +906,7 @@ where
}
impl Buffer {
pub fn map_read_async<T, F>(&self, start: BufferAddress, size: BufferAddress, callback: F)
pub fn map_read_async<T, F>(&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::<T>()) as BufferAddress;
let user_data = Box::new(BufferMapReadAsyncUserData {
size,
callback,
@@ -951,7 +953,7 @@ impl Buffer {
);
}
pub fn map_write_async<T, F>(&self, start: BufferAddress, size: BufferAddress, callback: F)
pub fn map_write_async<T, F>(&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::<T>()) as BufferAddress;
let user_data = Box::new(BufferMapWriteAsyncUserData {
size,
callback,