layers: Complete support for VK_KHR_Display ext

Fixed using display extension only crash.
Added vkGetDisplayPlaneCapabilitiesKHR.
Fixes, that unique objects works for display extension.

Change-Id: I66727a430b9d55bfa40fdddc884f40c91aa29f11
diff --git a/layers/unique_objects.cpp b/layers/unique_objects.cpp
index 3a0945a..b8564f3 100644
--- a/layers/unique_objects.cpp
+++ b/layers/unique_objects.cpp
@@ -676,6 +676,26 @@
     }
     return result;
 }
+
+VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode,
+                                                              uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR *pCapabilities) {
+    layer_data *dev_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
+    {
+        std::lock_guard<std::mutex> lock(global_lock);
+        auto it = dev_data->unique_id_mapping.find(reinterpret_cast<uint64_t &>(mode));
+        if (it == dev_data->unique_id_mapping.end()) {
+            uint64_t unique_id = global_unique_id++;
+            dev_data->unique_id_mapping[unique_id] = reinterpret_cast<uint64_t &>(mode);
+
+            mode = reinterpret_cast<VkDisplayModeKHR &>(unique_id);
+        } else {
+            mode = reinterpret_cast<VkDisplayModeKHR &>(it->second);
+        }
+    }
+    VkResult result =
+        dev_data->instance_dispatch_table->GetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
+    return result;
+}
 #endif
 
 } // namespace unique_objects