diff options
| author | Jean-François Marquis <jfmarquis@gmail.com> | 2017-11-15 17:48:48 -0500 |
|---|---|---|
| committer | jzulauf-lunarg <32470354+jzulauf-lunarg@users.noreply.github.com> | 2017-12-12 13:14:23 -0700 |
| commit | 3486cdc771319cd174cad4548562793172465f92 (patch) | |
| tree | 7fac3d734dbb8b03ca1a478ad7c5aa0bb1bf603d /layers/core_validation.cpp | |
| parent | b061f48707d37a187ed76144f224e3feef19be9d (diff) | |
| download | usermoji-3486cdc771319cd174cad4548562793172465f92.tar.xz | |
layers: Add some missings locks of global_lock
Add locks of global_lock in BindBufferMemory, BindImageMemory
and GetImageSubresourceLayout to have safe access to imageMap
and bufferMap.
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 6f1ffeee..4ebbc780 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -3828,7 +3828,11 @@ static void PostCallRecordBindBufferMemory(layer_data *dev_data, VkBuffer buffer VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memoryOffset) { layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; - auto buffer_state = GetBufferState(dev_data, buffer); + BUFFER_STATE *buffer_state; + { + unique_lock_t lock(global_lock); + buffer_state = GetBufferState(dev_data, buffer); + } bool skip = PreCallValidateBindBufferMemory(dev_data, buffer, buffer_state, mem, memoryOffset); if (!skip) { result = dev_data->dispatch_table.BindBufferMemory(device, buffer, mem, memoryOffset); @@ -6503,9 +6507,11 @@ VKAPI_ATTR void VKAPI_CALL CmdResolveImage(VkCommandBuffer commandBuffer, VkImag VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource *pSubresource, VkSubresourceLayout *pLayout) { layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); + unique_lock_t lock(global_lock); bool skip = PreCallValidateGetImageSubresourceLayout(device_data, image, pSubresource); if (!skip) { + lock.unlock(); device_data->dispatch_table.GetImageSubresourceLayout(device, image, pSubresource, pLayout); } } @@ -8969,7 +8975,11 @@ static void PostCallRecordBindImageMemory(layer_data *dev_data, VkImage image, I VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memoryOffset) { layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; - auto image_state = GetImageState(dev_data, image); + IMAGE_STATE *image_state; + { + unique_lock_t lock(global_lock); + image_state = GetImageState(dev_data, image); + } bool skip = PreCallValidateBindImageMemory(dev_data, image, image_state, mem, memoryOffset); if (!skip) { result = dev_data->dispatch_table.BindImageMemory(device, image, mem, memoryOffset); @@ -11079,7 +11089,7 @@ VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice p } VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(VkDevice device, const VkDebugMarkerObjectNameInfoEXT *pNameInfo) { - std::unique_lock<std::mutex> lock(global_lock); + unique_lock_t lock(global_lock); layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); if (pNameInfo->pObjectName) { device_data->report_data->debugObjectNameMap->insert( |
