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); } } }