From 32c8fea10703c61c44b171f0b3d3048f76162af5 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Sat, 24 Jun 2017 10:03:54 +0200 Subject: [PATCH] Fix buffer offsets not taken into account in copy_buffers --- vulkano/src/command_buffer/sys.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/vulkano/src/command_buffer/sys.rs b/vulkano/src/command_buffer/sys.rs index 111a90ada..7392fe585 100644 --- a/vulkano/src/command_buffer/sys.rs +++ b/vulkano/src/command_buffer/sys.rs @@ -485,18 +485,6 @@ impl

UnsafeCommandBufferBuilder

{ D: ?Sized + BufferAccess, R: Iterator { - 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

UnsafeCommandBufferBuilder

{ 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

UnsafeCommandBufferBuilder

{ 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 {