From 555c6318c9b08b6d88f70c0db431bee8a03dd65f Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Mon, 13 Nov 2017 09:42:58 -0700 Subject: layers: Move BuildTemplate call inside global lock Helper routine was being called outside of the lock causing freezes in Dota2 Change-Id: I45ab0b23c6ff3ed4ec16dca15107ce16f205599f --- layers/unique_objects.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'layers/unique_objects.cpp') diff --git a/layers/unique_objects.cpp b/layers/unique_objects.cpp index d324ce49..8515a645 100644 --- a/layers/unique_objects.cpp +++ b/layers/unique_objects.cpp @@ -608,12 +608,13 @@ VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplateKHR(VkDevice device, V const void *pData) { layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); uint64_t template_handle = reinterpret_cast(descriptorUpdateTemplate); + void *unwrapped_buffer = nullptr; { std::lock_guard lock(global_lock); descriptorSet = Unwrap(dev_data, descriptorSet); descriptorUpdateTemplate = (VkDescriptorUpdateTemplateKHR)dev_data->unique_id_mapping[template_handle]; + unwrapped_buffer = BuildUnwrappedUpdateTemplateBuffer(dev_data, template_handle, pData); } - void *unwrapped_buffer = BuildUnwrappedUpdateTemplateBuffer(dev_data, template_handle, pData); dev_data->dispatch_table.UpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, unwrapped_buffer); free(unwrapped_buffer); @@ -624,12 +625,13 @@ VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplateKHR(VkCommandBuffer c VkPipelineLayout layout, uint32_t set, const void *pData) { layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map); uint64_t template_handle = reinterpret_cast(descriptorUpdateTemplate); + void *unwrapped_buffer = nullptr; { std::lock_guard lock(global_lock); descriptorUpdateTemplate = Unwrap(dev_data, descriptorUpdateTemplate); layout = Unwrap(dev_data, layout); + unwrapped_buffer = BuildUnwrappedUpdateTemplateBuffer(dev_data, template_handle, pData); } - void *unwrapped_buffer = BuildUnwrappedUpdateTemplateBuffer(dev_data, template_handle, pData); dev_data->dispatch_table.CmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, unwrapped_buffer); free(unwrapped_buffer); -- cgit v1.2.3