layers: PR1381, Fix vkCmdCopyImage intersection check
authorAlex Smith <asmith@feralinteractive.com>
Tue, 17 Jan 2017 11:13:23 +0000 (11:13 +0000)
committerMark Lobodzinski <mark@lunarg.com>
Tue, 17 Jan 2017 15:03:23 +0000 (08:03 -0700)
RegionIntersects would return true if the source and destination array
layers and mip level did *not* overlap, resulting in a spurious
validation error when trying to copy between different array layers or
mip levels of the same image.

Change-Id: I2e5675f703a4f5e2e7cbfd1d038bd38c7d7dafe0

layers/image.cpp

index 45786f8f578935845277925b90fbc7d5b4412af4..fd4e133874e2df50247c474784aec3779e94d3ef 100644 (file)
@@ -526,11 +526,11 @@ static bool RangesIntersect(int32_t start, uint32_t start_offset, int32_t end, u
 
 // Returns true if two VkImageCopy structures overlap
 static bool RegionIntersects(const VkImageCopy *src, const VkImageCopy *dst, VkImageType type) {
-    bool result = true;
+    bool result = false;
     if ((src->srcSubresource.mipLevel == dst->dstSubresource.mipLevel) &&
         (RangesIntersect(src->srcSubresource.baseArrayLayer, src->srcSubresource.layerCount, dst->dstSubresource.baseArrayLayer,
                          dst->dstSubresource.layerCount))) {
-
+        result = true;
         switch (type) {
         case VK_IMAGE_TYPE_3D:
             result &= RangesIntersect(src->srcOffset.z, src->extent.depth, dst->dstOffset.z, dst->extent.depth);