Fixed 3D image copy
3D subregions were not properly supported in Image::copyTo()
Bug: b/144353295
Change-Id: I445881b37be310401b38cffcb6003a1e4461bed8
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/38471
Presubmit-Ready: Alexis Hétu <sugoi@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/Vulkan/VkImage.cpp b/src/Vulkan/VkImage.cpp
index 7379839..6caa670 100644
--- a/src/Vulkan/VkImage.cpp
+++ b/src/Vulkan/VkImage.cpp
@@ -314,13 +314,15 @@
{
size_t copySize = copyExtent.width * srcBytesPerBlock;
- for(uint32_t z = 0; z < copyExtent.depth; z++)
+ for(uint32_t z = 0; z < copyExtent.depth; z++, dstMem += dstSlicePitchBytes, srcMem += srcSlicePitchBytes)
{
- for(uint32_t y = 0; y < copyExtent.height; y++, dstMem += dstRowPitchBytes, srcMem += srcRowPitchBytes)
+ const uint8_t* srcSlice = srcMem;
+ uint8_t* dstSlice = dstMem;
+ for(uint32_t y = 0; y < copyExtent.height; y++, dstSlice += dstRowPitchBytes, srcSlice += srcRowPitchBytes)
{
- ASSERT((srcMem + copySize) < end());
- ASSERT((dstMem + copySize) < dstImage->end());
- memcpy(dstMem, srcMem, copySize);
+ ASSERT((srcSlice + copySize) < end());
+ ASSERT((dstSlice + copySize) < dstImage->end());
+ memcpy(dstSlice, srcSlice, copySize);
}
}
}