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