mirror of
https://github.com/vulkano-rs/vulkano.git
synced 2025-02-27 14:32:42 +00:00
Fix buffer offsets not taken into account in copy_buffers
This commit is contained in:
parent
55fbe708b2
commit
32c8fea107
@ -485,18 +485,6 @@ impl<P> UnsafeCommandBufferBuilder<P> {
|
||||
D: ?Sized + BufferAccess,
|
||||
R: Iterator<Item = (usize, usize, usize)>
|
||||
{
|
||||
let regions: SmallVec<[_; 8]> = regions.map(|(sr, de, sz)| {
|
||||
vk::BufferCopy {
|
||||
srcOffset: sr as vk::DeviceSize,
|
||||
dstOffset: de as vk::DeviceSize,
|
||||
size: sz as vk::DeviceSize,
|
||||
}
|
||||
}).collect();
|
||||
|
||||
if regions.is_empty() {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: debug assert that there's no overlap in the destinations?
|
||||
|
||||
let source = source.inner();
|
||||
@ -507,6 +495,18 @@ impl<P> UnsafeCommandBufferBuilder<P> {
|
||||
debug_assert!(destination.offset < destination.buffer.size());
|
||||
debug_assert!(destination.buffer.usage_transfer_dest());
|
||||
|
||||
let regions: SmallVec<[_; 8]> = regions.map(|(sr, de, sz)| {
|
||||
vk::BufferCopy {
|
||||
srcOffset: (sr + source.offset) as vk::DeviceSize,
|
||||
dstOffset: (de + destination.offset) as vk::DeviceSize,
|
||||
size: sz as vk::DeviceSize,
|
||||
}
|
||||
}).collect();
|
||||
|
||||
if regions.is_empty() {
|
||||
return;
|
||||
}
|
||||
|
||||
let vk = self.device().pointers();
|
||||
let cmd = self.internal_object();
|
||||
vk.CmdCopyBuffer(cmd, source.buffer.internal_object(), destination.buffer.internal_object(),
|
||||
@ -530,7 +530,7 @@ impl<P> UnsafeCommandBufferBuilder<P> {
|
||||
|
||||
let regions: SmallVec<[_; 8]> = regions.map(|copy| {
|
||||
vk::BufferImageCopy {
|
||||
bufferOffset: source.offset as vk::DeviceSize + copy.buffer_offset as vk::DeviceSize,
|
||||
bufferOffset: (source.offset + copy.buffer_offset) as vk::DeviceSize,
|
||||
bufferRowLength: copy.buffer_row_length,
|
||||
bufferImageHeight: copy.buffer_image_height,
|
||||
imageSubresource: vk::ImageSubresourceLayers {
|
||||
|
Loading…
Reference in New Issue
Block a user