layers: Use resolved range to avoid long loops
authorKarl Schultz <karl@lunarg.com>
Fri, 9 Dec 2016 23:34:16 +0000 (16:34 -0700)
committerKarl Schultz <karl@lunarg.com>
Mon, 12 Dec 2016 16:29:43 +0000 (09:29 -0700)
Fixes #1251.
Use the resolvedRange instead of the raw range, which
could include VK_REMAINING_MIP_LEVELS and/or
VK_REMAINING_ARRAY_LAYERS, which are really big numbers.

This fixes a near-infinite loop issue when running the
input_attachment sample with validation.

Change-Id: I250118db74a6faaecd2b3cd4cb43f44c07ae436d

layers/core_validation.cpp

index 647e209..4ebdf12 100644 (file)
@@ -8272,11 +8272,11 @@ static bool VerifyClearImageLayout(layer_data *dev_data, GLOBAL_CB_NODE *cb_node
         }
     }
 
-    for (uint32_t levelIdx = 0; levelIdx < range.levelCount; ++levelIdx) {
-        uint32_t level = levelIdx + range.baseMipLevel;
-        for (uint32_t layerIdx = 0; layerIdx < range.layerCount; ++layerIdx) {
-            uint32_t layer = layerIdx + range.baseArrayLayer;
-            VkImageSubresource sub = {range.aspectMask, level, layer};
+    for (uint32_t levelIdx = 0; levelIdx < resolvedRange.levelCount; ++levelIdx) {
+        uint32_t level = levelIdx + resolvedRange.baseMipLevel;
+        for (uint32_t layerIdx = 0; layerIdx < resolvedRange.layerCount; ++layerIdx) {
+            uint32_t layer = layerIdx + resolvedRange.baseArrayLayer;
+            VkImageSubresource sub = {resolvedRange.aspectMask, level, layer};
             IMAGE_CMD_BUF_LAYOUT_NODE node;
             if (!FindLayout(cb_node, image, sub, node)) {
                 SetLayout(cb_node, image, sub, IMAGE_CMD_BUF_LAYOUT_NODE(dest_image_layout, dest_image_layout));