Replace TextureCopyView::arrayLayer -> origin.z in backends

Also fix a misuse of VkBufferImageCopy that caused some Swiftshader
failures.

Bug: dawn:22
Change-Id: Ie812a590d70c7561dfcf2f78ce6c530187610e65
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/23200
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
diff --git a/src/dawn_native/vulkan/UtilsVulkan.cpp b/src/dawn_native/vulkan/UtilsVulkan.cpp
index 4ce513f..74e825b 100644
--- a/src/dawn_native/vulkan/UtilsVulkan.cpp
+++ b/src/dawn_native/vulkan/UtilsVulkan.cpp
@@ -81,19 +81,27 @@
 
         region.imageSubresource.aspectMask = texture->GetVkAspectMask();
         region.imageSubresource.mipLevel = textureCopy.mipLevel;
-        region.imageSubresource.baseArrayLayer = textureCopy.arrayLayer;
 
-        region.imageOffset.x = textureCopy.origin.x;
-        region.imageOffset.y = textureCopy.origin.y;
-        region.imageOffset.z = textureCopy.origin.z;
+        switch (textureCopy.texture->GetDimension()) {
+            case wgpu::TextureDimension::e2D: {
+                region.imageOffset.x = textureCopy.origin.x;
+                region.imageOffset.y = textureCopy.origin.y;
+                region.imageOffset.z = 0;
 
-        Extent3D imageExtent = ComputeTextureCopyExtent(textureCopy, copySize);
-        region.imageExtent.width = imageExtent.width;
-        region.imageExtent.height = imageExtent.height;
+                region.imageSubresource.baseArrayLayer = textureCopy.origin.z;
+                region.imageSubresource.layerCount = copySize.depth;
 
-        ASSERT(texture->GetDimension() == wgpu::TextureDimension::e2D);
-        region.imageSubresource.layerCount = copySize.depth;
-        region.imageExtent.depth = 1;
+                Extent3D imageExtent = ComputeTextureCopyExtent(textureCopy, copySize);
+                region.imageExtent.width = imageExtent.width;
+                region.imageExtent.height = imageExtent.height;
+                region.imageExtent.depth = 1;
+                break;
+            }
+
+            default:
+                UNREACHABLE();
+                break;
+        }
 
         return region;
     }