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}};