layers: LX160, Validate Descriptor Set Image Aspects

Validated that Descriptor Sets do not have both the STENCIL and
DEPTH aspect bits set in their imageViews.
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
old mode 100644
new mode 100755
index 63cf634..368493e
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -869,6 +869,31 @@
     (*pNewNode)->pNext = NULL;
     return skipCall;
 }
+
+static VkBool32 validateDescriptorSetImageView(VkDevice device, uint32_t writeDsCount, const VkWriteDescriptorSet *pWDS)
+{
+    VkBool32    skipCall = VK_FALSE;
+    layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
+
+    // Check ImageAspects of each descriptorSet in each writeDescriptorSet array
+    for (uint32_t i = 0; i < writeDsCount; i++) {
+        for (uint32_t j = 0; j < pWDS[i].count; j++) {
+            const VkDescriptorInfo *dInfo = &pWDS[i].pDescriptors[j];
+            auto imageViewItem = dev_data->imageViewMap.find(dInfo->imageView.handle);
+            if (imageViewItem != dev_data->imageViewMap.end()) {
+                VkImageAspectFlags flags = ((*imageViewItem).second)->subresourceRange.aspectMask;
+                if ((flags & VK_IMAGE_ASPECT_DEPTH_BIT) &&
+                    (flags & VK_IMAGE_ASPECT_STENCIL_BIT)) {
+                    skipCall |= log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_IMAGE_VIEW, dInfo->imageView.handle, 0,
+                        DRAWSTATE_INVALID_IMAGE_ASPECT, "DS", "vkUpdateDescriptorSets: DesriptorSet[%d] in WriteDesriptorSet[%d] "
+                        "has ImageView with both STENCIL and DEPTH aspects set", i, j);
+                }
+            }
+        }
+    }
+    return skipCall;
+}
+
 // update DS mappings based on ppUpdateArray
 static VkBool32 dsUpdate(layer_data* my_data, VkDevice device, VkStructureType type, uint32_t updateCount, const void* pUpdateArray)
 {
@@ -876,10 +901,12 @@
     const VkCopyDescriptorSet *pCDS = NULL;
     VkBool32 skipCall = VK_FALSE;
 
-    if (type == VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
-        pWDS = (const VkWriteDescriptorSet *) pUpdateArray;
-    else
-        pCDS = (const VkCopyDescriptorSet *) pUpdateArray;
+    if (type == VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET) {
+        pWDS = (const VkWriteDescriptorSet *)pUpdateArray;
+        skipCall |= validateDescriptorSetImageView(device, updateCount, pWDS);
+    } else {
+        pCDS = (const VkCopyDescriptorSet *)pUpdateArray;
+    }
 
     loader_platform_thread_lock_mutex(&globalLock);
     LAYOUT_NODE* pLayout = NULL;