Skip to content

Commit 242c49f

Browse files
andyleisersonteoxoy
authored andcommitted
Fix get_mapped_range duplication
1 parent 41dc177 commit 242c49f

File tree

1 file changed

+2
-62
lines changed

1 file changed

+2
-62
lines changed

wgpu-core/src/device/global.rs

Lines changed: 2 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2021,69 +2021,9 @@ impl Global {
20212021

20222022
let buffer = hub.buffers.get(buffer_id).get()?;
20232023

2024-
{
2025-
let snatch_guard = buffer.device.snatchable_lock.read();
2026-
buffer.check_destroyed(&snatch_guard)?;
2027-
}
2028-
2029-
let range_size = if let Some(size) = size {
2030-
size
2031-
} else {
2032-
buffer.size.saturating_sub(offset)
2033-
};
2034-
2035-
if offset % wgt::MAP_ALIGNMENT != 0 {
2036-
return Err(BufferAccessError::UnalignedOffset { offset });
2037-
}
2038-
if range_size % wgt::COPY_BUFFER_ALIGNMENT != 0 {
2039-
return Err(BufferAccessError::UnalignedRangeSize { range_size });
2040-
}
2041-
let map_state = &*buffer.map_state.lock();
2042-
match *map_state {
2043-
resource::BufferMapState::Init { ref staging_buffer } => {
2044-
// offset (u64) can not be < 0, so no need to validate the lower bound
2045-
if offset + range_size > buffer.size {
2046-
return Err(BufferAccessError::OutOfBoundsOverrun {
2047-
index: offset + range_size - 1,
2048-
max: buffer.size,
2049-
});
2050-
}
2051-
let ptr = unsafe { staging_buffer.ptr() };
2052-
let ptr = unsafe { NonNull::new_unchecked(ptr.as_ptr().offset(offset as isize)) };
2053-
Ok((ptr, range_size))
2054-
}
2055-
resource::BufferMapState::Active {
2056-
ref mapping,
2057-
ref range,
2058-
..
2059-
} => {
2060-
if offset < range.start {
2061-
return Err(BufferAccessError::OutOfBoundsUnderrun {
2062-
index: offset,
2063-
min: range.start,
2064-
});
2065-
}
2066-
if offset + range_size > range.end {
2067-
return Err(BufferAccessError::OutOfBoundsOverrun {
2068-
index: offset + range_size - 1,
2069-
max: range.end,
2070-
});
2071-
}
2072-
// ptr points to the beginning of the range we mapped in map_async
2073-
// rather than the beginning of the buffer.
2074-
let relative_offset = (offset - range.start) as isize;
2075-
unsafe {
2076-
Ok((
2077-
NonNull::new_unchecked(mapping.ptr.as_ptr().offset(relative_offset)),
2078-
range_size,
2079-
))
2080-
}
2081-
}
2082-
resource::BufferMapState::Idle | resource::BufferMapState::Waiting(_) => {
2083-
Err(BufferAccessError::NotMapped)
2084-
}
2085-
}
2024+
buffer.get_mapped_range(offset, size)
20862025
}
2026+
20872027
pub fn buffer_unmap(&self, buffer_id: id::BufferId) -> BufferAccessResult {
20882028
profiling::scope!("unmap", "Buffer");
20892029
api_log!("Buffer::unmap {buffer_id:?}");

0 commit comments

Comments
 (0)