aboutsummaryrefslogtreecommitdiff
path: root/layers/image.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layers/image.cpp')
-rw-r--r--layers/image.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/layers/image.cpp b/layers/image.cpp
index 9d7f6cdb..fe0f4bb6 100644
--- a/layers/image.cpp
+++ b/layers/image.cpp
@@ -69,10 +69,17 @@ struct layer_data {
};
static unordered_map<void *, layer_data *> layer_data_map;
+static int globalLockInitialized = 0;
+static loader_platform_thread_mutex globalLock;
static void init_image(layer_data *my_data, const VkAllocationCallbacks *pAllocator) {
layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "lunarg_image");
+
+ if (!globalLockInitialized) {
+ loader_platform_thread_create_mutex(&globalLock);
+ globalLockInitialized = 1;
+ }
}
VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
@@ -346,14 +353,18 @@ vkCreateImage(VkDevice device, const VkImageCreateInfo *pCreateInfo, const VkAll
result = device_data->device_dispatch_table->CreateImage(device, pCreateInfo, pAllocator, pImage);
}
if (result == VK_SUCCESS) {
+ loader_platform_thread_lock_mutex(&globalLock);
device_data->imageMap[*pImage] = IMAGE_STATE(pCreateInfo);
+ loader_platform_thread_unlock_mutex(&globalLock);
}
return result;
}
VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks *pAllocator) {
layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
+ loader_platform_thread_lock_mutex(&globalLock);
device_data->imageMap.erase(image);
+ loader_platform_thread_unlock_mutex(&globalLock);
device_data->device_dispatch_table->DestroyImage(device, image, pAllocator);
}