Fix buffer offsets not taken into account in copy_buffers

This commit is contained in:
Pierre Krieger 2017-06-24 10:03:54 +02:00
parent 55fbe708b2
commit 32c8fea107

View File

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