layers: Special-case threading GetSwapchainImages

This API is a special-case for the code-gen in that it sometimes
returns an array of images. These do not need to be counted by
start/finishReadObject and so were moved into the non-generated
part of the layer source.

Change-Id: Iaaab9143abadbf025b5f3c118aa26dae3c6f1bec
diff --git a/layers/threading.cpp b/layers/threading.cpp
index 0c46ef0..5984c4c 100644
--- a/layers/threading.cpp
+++ b/layers/threading.cpp
@@ -171,6 +171,27 @@
     layer_data_map.erase(key);
 }
 
+VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t *pSwapchainImageCount,
+                                                     VkImage *pSwapchainImages) {
+    dispatch_key key = get_dispatch_key(device);
+    layer_data *my_data = GetLayerDataPtr(key, layer_data_map);
+    VkLayerDispatchTable *pTable = my_data->device_dispatch_table;
+    VkResult result;
+    bool threadChecks = startMultiThread();
+    if (threadChecks) {
+        startReadObject(my_data, device);
+        startReadObject(my_data, swapchain);
+    }
+    result = pTable->GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
+    if (threadChecks) {
+        finishReadObject(my_data, device);
+        finishReadObject(my_data, swapchain);
+    } else {
+        finishMultiThread();
+    }
+    return result;
+}
+
 static const VkExtensionProperties threading_extensions[] = {
     {VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION}};