mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-12-08 21:26:17 +00:00
[core] fix invalid read in Queue::write_texture (#7893)
This commit is contained in:
parent
1da2177547
commit
13d0cd4d58
@ -860,7 +860,6 @@ impl Queue {
|
|||||||
wgt::BufferSize::new(stage_bytes_per_row as u64 * block_rows_in_copy as u64)
|
wgt::BufferSize::new(stage_bytes_per_row as u64 * block_rows_in_copy as u64)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let mut staging_buffer = StagingBuffer::new(&self.device, stage_size)?;
|
let mut staging_buffer = StagingBuffer::new(&self.device, stage_size)?;
|
||||||
let copy_bytes_per_row = stage_bytes_per_row.min(bytes_per_row) as usize;
|
|
||||||
for layer in 0..size.depth_or_array_layers {
|
for layer in 0..size.depth_or_array_layers {
|
||||||
let rows_offset = layer * rows_per_image;
|
let rows_offset = layer * rows_per_image;
|
||||||
for row in rows_offset..rows_offset + height_in_blocks {
|
for row in rows_offset..rows_offset + height_in_blocks {
|
||||||
@ -871,7 +870,7 @@ impl Queue {
|
|||||||
data,
|
data,
|
||||||
src_offset as isize,
|
src_offset as isize,
|
||||||
dst_offset as isize,
|
dst_offset as isize,
|
||||||
copy_bytes_per_row,
|
bytes_in_last_row as usize,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1076,6 +1076,13 @@ impl StagingBuffer {
|
|||||||
size: usize,
|
size: usize,
|
||||||
) {
|
) {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
debug_assert!(
|
||||||
|
(src_offset + size as isize) as usize <= data.len(),
|
||||||
|
"src_offset + size must be in-bounds: src_offset = {}, size = {}, data.len() = {}",
|
||||||
|
src_offset,
|
||||||
|
size,
|
||||||
|
data.len()
|
||||||
|
);
|
||||||
core::ptr::copy_nonoverlapping(
|
core::ptr::copy_nonoverlapping(
|
||||||
data.as_ptr().offset(src_offset),
|
data.as_ptr().offset(src_offset),
|
||||||
self.ptr.as_ptr().offset(dst_offset),
|
self.ptr.as_ptr().offset(dst_offset),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user