diff --git a/src/Veldrid/Vk/VkGraphicsDevice.cs b/src/Veldrid/Vk/VkGraphicsDevice.cs index 407d188a4..a041101ee 100644 --- a/src/Veldrid/Vk/VkGraphicsDevice.cs +++ b/src/Veldrid/Vk/VkGraphicsDevice.cs @@ -851,18 +851,20 @@ protected override void UpdateBufferCore(DeviceBuffer buffer, uint bufferOffsetI VkBuffer vkBuffer = Util.AssertSubtype(buffer); VkBuffer copySrcVkBuffer = null; IntPtr mappedPtr; + byte* destPtr; bool isPersistentMapped = vkBuffer.Memory.IsPersistentMapped; if (isPersistentMapped) { mappedPtr = (IntPtr)vkBuffer.Memory.BlockMappedPointer; + destPtr = (byte*)mappedPtr + bufferOffsetInBytes; } else { copySrcVkBuffer = GetFreeStagingBuffer(sizeInBytes); mappedPtr = (IntPtr)copySrcVkBuffer.Memory.BlockMappedPointer; + destPtr = (byte*)mappedPtr; } - byte* destPtr = (byte*)mappedPtr + bufferOffsetInBytes; Unsafe.CopyBlock(destPtr, source.ToPointer(), sizeInBytes); if (!isPersistentMapped) @@ -870,7 +872,11 @@ protected override void UpdateBufferCore(DeviceBuffer buffer, uint bufferOffsetI SharedCommandPool pool = GetFreeCommandPool(); VkCommandBuffer cb = pool.BeginNewCommandBuffer(); - VkBufferCopy copyRegion = new VkBufferCopy { size = vkBuffer.BufferMemoryRequirements.size }; + VkBufferCopy copyRegion = new VkBufferCopy + { + dstOffset = bufferOffsetInBytes, + size = sizeInBytes + }; vkCmdCopyBuffer(cb, copySrcVkBuffer.DeviceBuffer, vkBuffer.DeviceBuffer, 1, ref copyRegion); pool.EndAndSubmit(cb);