layers:Validate objects for display_timing

Update object_tracker validation for swapchain objects in new functions
for VK_GOOGLE_display_timing extension.
Add in missing Error IDs and update database.
diff --git a/layers/object_tracker.cpp b/layers/object_tracker.cpp
index 541bc5d..21ba151 100644
--- a/layers/object_tracker.cpp
+++ b/layers/object_tracker.cpp
@@ -3310,6 +3310,9 @@
         if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME) == 0) {
             device_data->enables.nvx_device_generated_commands = true;
         }
+        if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME) == 0) {
+            device_data->enables.google_display_timing = true;
+        }
     }
 }
 
@@ -4989,9 +4992,8 @@
     bool skip = false;
     {
         std::unique_lock<std::mutex> lock(global_lock);
-        skip |=
-            ValidateObject(device, device, kVulkanObjectTypeDevice, false, VALIDATION_ERROR_UNDEFINED, VALIDATION_ERROR_UNDEFINED);
-        skip |= ValidateObject(device, swapchain, kVulkanObjectTypeSwapchainKHR, false, VALIDATION_ERROR_UNDEFINED,
+        skip |= ValidateObject(device, device, kVulkanObjectTypeDevice, false, VALIDATION_ERROR_03181, VALIDATION_ERROR_UNDEFINED);
+        skip |= ValidateObject(device, swapchain, kVulkanObjectTypeSwapchainKHR, false, VALIDATION_ERROR_03182,
                                VALIDATION_ERROR_UNDEFINED);
     }
 
@@ -5008,9 +5010,8 @@
     bool skip = false;
     {
         std::unique_lock<std::mutex> lock(global_lock);
-        skip |=
-            ValidateObject(device, device, kVulkanObjectTypeDevice, false, VALIDATION_ERROR_UNDEFINED, VALIDATION_ERROR_UNDEFINED);
-        skip |= ValidateObject(device, swapchain, kVulkanObjectTypeSwapchainKHR, false, VALIDATION_ERROR_UNDEFINED,
+        skip |= ValidateObject(device, device, kVulkanObjectTypeDevice, false, VALIDATION_ERROR_03178, VALIDATION_ERROR_UNDEFINED);
+        skip |= ValidateObject(device, swapchain, kVulkanObjectTypeSwapchainKHR, false, VALIDATION_ERROR_03179,
                                VALIDATION_ERROR_UNDEFINED);
     }
 
@@ -5175,8 +5176,6 @@
 #endif  // VK_USE_PLATFORM_WIN32_KHR
     if (!strcmp(name, "CmdDrawIndirectCountAMD")) return (PFN_vkVoidFunction)CmdDrawIndirectCountAMD;
     if (!strcmp(name, "CmdDrawIndexedIndirectCountAMD")) return (PFN_vkVoidFunction)CmdDrawIndexedIndirectCountAMD;
-    if (!strcmp(name, "GetPastPresentationTimingGOOGLE")) return (PFN_vkVoidFunction)GetPastPresentationTimingGOOGLE;
-    if (!strcmp(name, "GetRefreshCycleDurationGOOGLE")) return (PFN_vkVoidFunction)GetRefreshCycleDurationGOOGLE;
     if (!strcmp(name, "SetHdrMetadataEXT")) return (PFN_vkVoidFunction)SetHdrMetadataEXT;
 
     return NULL;
@@ -5325,6 +5324,10 @@
             if (!strcmp(name, "RegisterObjectsNVX")) return (PFN_vkVoidFunction)RegisterObjectsNVX;
             if (!strcmp(name, "UnregisterObjectsNVX")) return (PFN_vkVoidFunction)UnregisterObjectsNVX;
         }
+        if (device_data->enables.google_display_timing) {
+            if (!strcmp(name, "GetPastPresentationTimingGOOGLE")) return (PFN_vkVoidFunction)GetPastPresentationTimingGOOGLE;
+            if (!strcmp(name, "GetRefreshCycleDurationGOOGLE")) return (PFN_vkVoidFunction)GetRefreshCycleDurationGOOGLE;
+        }
     }
 
     return NULL;
diff --git a/layers/object_tracker.h b/layers/object_tracker.h
index 58ad571..b315ba6 100644
--- a/layers/object_tracker.h
+++ b/layers/object_tracker.h
@@ -105,6 +105,7 @@
     bool ext_discard_rectangles;
     bool nv_clip_space_w_scaling;
     bool nvx_device_generated_commands;
+    bool google_display_timing;
 };
 
 typedef std::unordered_map<uint64_t, OBJTRACK_NODE *> object_map_type;
diff --git a/layers/vk_validation_error_database.txt b/layers/vk_validation_error_database.txt
index a837540..be85119 100644
--- a/layers/vk_validation_error_database.txt
+++ b/layers/vk_validation_error_database.txt
@@ -2998,11 +2998,11 @@
 VALIDATION_ERROR_03175~^~N~^~Unknown~^~vkGetPhysicalDevicePresentRectanglesKHX~^~For more information refer to Vulkan Spec Section '30.6. Device Group Queries' which states 'surface must be a valid VkSurfaceKHR handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetPhysicalDevicePresentRectanglesKHX)~^~implicit
 VALIDATION_ERROR_03176~^~N~^~Unknown~^~vkGetPhysicalDevicePresentRectanglesKHX~^~For more information refer to Vulkan Spec Section '30.6. Device Group Queries' which states 'pRectCount must be a pointer to a uint32_t value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetPhysicalDevicePresentRectanglesKHX)~^~implicit
 VALIDATION_ERROR_03177~^~N~^~Unknown~^~vkGetPhysicalDevicePresentRectanglesKHX~^~For more information refer to Vulkan Spec Section '30.6. Device Group Queries' which states 'If the value referenced by pRectCount is not 0, and pRects is not NULL, pRects must be a pointer to an array of pRectCount VkRect2D structures' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetPhysicalDevicePresentRectanglesKHX)~^~implicit
-VALIDATION_ERROR_03178~^~N~^~Unknown~^~vkGetRefreshCycleDurationGOOGLE~^~For more information refer to Vulkan Spec Section '30.7. Display Timing Queries' which states 'device must be a valid VkDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetRefreshCycleDurationGOOGLE)~^~implicit
-VALIDATION_ERROR_03179~^~N~^~Unknown~^~vkGetRefreshCycleDurationGOOGLE~^~For more information refer to Vulkan Spec Section '30.7. Display Timing Queries' which states 'swapchain must be a valid VkSwapchainKHR handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetRefreshCycleDurationGOOGLE)~^~implicit
+VALIDATION_ERROR_03178~^~Y~^~Unknown~^~vkGetRefreshCycleDurationGOOGLE~^~For more information refer to Vulkan Spec Section '30.7. Display Timing Queries' which states 'device must be a valid VkDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetRefreshCycleDurationGOOGLE)~^~implicit
+VALIDATION_ERROR_03179~^~Y~^~Unknown~^~vkGetRefreshCycleDurationGOOGLE~^~For more information refer to Vulkan Spec Section '30.7. Display Timing Queries' which states 'swapchain must be a valid VkSwapchainKHR handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetRefreshCycleDurationGOOGLE)~^~implicit
 VALIDATION_ERROR_03180~^~N~^~Unknown~^~vkGetRefreshCycleDurationGOOGLE~^~For more information refer to Vulkan Spec Section '30.7. Display Timing Queries' which states 'pDisplayTimingProperties must be a pointer to a VkRefreshCycleDurationGOOGLE structure' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetRefreshCycleDurationGOOGLE)~^~implicit
-VALIDATION_ERROR_03181~^~N~^~Unknown~^~vkGetPastPresentationTimingGOOGLE~^~For more information refer to Vulkan Spec Section '30.7. Display Timing Queries' which states 'device must be a valid VkDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetPastPresentationTimingGOOGLE)~^~implicit
-VALIDATION_ERROR_03182~^~N~^~Unknown~^~vkGetPastPresentationTimingGOOGLE~^~For more information refer to Vulkan Spec Section '30.7. Display Timing Queries' which states 'swapchain must be a valid VkSwapchainKHR handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetPastPresentationTimingGOOGLE)~^~implicit
+VALIDATION_ERROR_03181~^~Y~^~Unknown~^~vkGetPastPresentationTimingGOOGLE~^~For more information refer to Vulkan Spec Section '30.7. Display Timing Queries' which states 'device must be a valid VkDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetPastPresentationTimingGOOGLE)~^~implicit
+VALIDATION_ERROR_03182~^~Y~^~Unknown~^~vkGetPastPresentationTimingGOOGLE~^~For more information refer to Vulkan Spec Section '30.7. Display Timing Queries' which states 'swapchain must be a valid VkSwapchainKHR handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetPastPresentationTimingGOOGLE)~^~implicit
 VALIDATION_ERROR_03183~^~N~^~Unknown~^~vkGetPastPresentationTimingGOOGLE~^~For more information refer to Vulkan Spec Section '30.7. Display Timing Queries' which states 'pPresentationTimingCount must be a pointer to a uint32_t value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetPastPresentationTimingGOOGLE)~^~implicit
 VALIDATION_ERROR_03184~^~N~^~Unknown~^~vkGetPastPresentationTimingGOOGLE~^~For more information refer to Vulkan Spec Section '30.7. Display Timing Queries' which states 'If the value referenced by pPresentationTimingCount is not 0, and pPresentationTimings is not NULL, pPresentationTimings must be a pointer to an array of pPresentationTimingCount VkPastPresentationTimingGOOGLE structures' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkGetPastPresentationTimingGOOGLE)~^~implicit
 VALIDATION_ERROR_03185~^~N~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.8. WSI Swapchain' which states 'pNext must be NULL or a pointer to a valid instance of VkDeviceGroupSwapchainCreateInfoKHX' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkSwapchainCreateFlagBitsKHR)~^~implicit