From 68260b5ae0ff207ac128b48b96ae5b883fc2ffd3 Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Fri, 3 Mar 2017 08:40:16 -0700 Subject: layers: Move DescriptorUpdateTemplate functions In unique_objects, moved these functions from being auto-generated to being manually written. Change-Id: Iae7ccac0ad51d57826104bd0532742a098c673ce --- layers/unique_objects.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'layers/unique_objects.cpp') diff --git a/layers/unique_objects.cpp b/layers/unique_objects.cpp index ea02869f..cf7891ab 100644 --- a/layers/unique_objects.cpp +++ b/layers/unique_objects.cpp @@ -605,6 +605,78 @@ VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR(VkDevice device, VkSwapchai return result; } +VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplateKHR(VkDevice device, + const VkDescriptorUpdateTemplateCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkDescriptorUpdateTemplateKHR *pDescriptorUpdateTemplate) { + layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); + safe_VkDescriptorUpdateTemplateCreateInfoKHR *local_pCreateInfo = NULL; + { + std::lock_guard lock(global_lock); + if (pCreateInfo) { + local_pCreateInfo = new safe_VkDescriptorUpdateTemplateCreateInfoKHR(pCreateInfo); + if (pCreateInfo->descriptorSetLayout) { + local_pCreateInfo->descriptorSetLayout = + (VkDescriptorSetLayout) + dev_data->unique_id_mapping[reinterpret_cast(pCreateInfo->descriptorSetLayout)]; + } + if (pCreateInfo->pipelineLayout) { + local_pCreateInfo->pipelineLayout = + (VkPipelineLayout)dev_data->unique_id_mapping[reinterpret_cast(pCreateInfo->pipelineLayout)]; + } + } + } + VkResult result = dev_data->device_dispatch_table->CreateDescriptorUpdateTemplateKHR( + device, (const VkDescriptorUpdateTemplateCreateInfoKHR *)local_pCreateInfo, pAllocator, pDescriptorUpdateTemplate); + if (local_pCreateInfo) delete local_pCreateInfo; + if (VK_SUCCESS == result) { + std::lock_guard lock(global_lock); + uint64_t unique_id = global_unique_id++; + dev_data->unique_id_mapping[unique_id] = reinterpret_cast(*pDescriptorUpdateTemplate); + *pDescriptorUpdateTemplate = reinterpret_cast(unique_id); + } + return result; +} + +VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplateKHR(VkDevice device, + VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, + const VkAllocationCallbacks *pAllocator) { + layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); + std::unique_lock lock(global_lock); + uint64_t descriptorUpdateTemplate_id = reinterpret_cast(descriptorUpdateTemplate); + descriptorUpdateTemplate = (VkDescriptorUpdateTemplateKHR)dev_data->unique_id_mapping[descriptorUpdateTemplate_id]; + dev_data->unique_id_mapping.erase(descriptorUpdateTemplate_id); + lock.unlock(); + dev_data->device_dispatch_table->DestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator); +} + +VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplateKHR(VkDevice device, VkDescriptorSet descriptorSet, + VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, + const void *pData) { + layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map); + { + std::lock_guard lock(global_lock); + descriptorSet = (VkDescriptorSet)dev_data->unique_id_mapping[reinterpret_cast(descriptorSet)]; + descriptorUpdateTemplate = + (VkDescriptorUpdateTemplateKHR)dev_data->unique_id_mapping[reinterpret_cast(descriptorUpdateTemplate)]; + } + dev_data->device_dispatch_table->UpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData); +} + +VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplateKHR(VkCommandBuffer commandBuffer, + VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, + VkPipelineLayout layout, uint32_t set, const void *pData) { + layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map); + { + std::lock_guard lock(global_lock); + descriptorUpdateTemplate = + (VkDescriptorUpdateTemplateKHR)dev_data->unique_id_mapping[reinterpret_cast(descriptorUpdateTemplate)]; + layout = (VkPipelineLayout)dev_data->unique_id_mapping[reinterpret_cast(layout)]; + } + dev_data->device_dispatch_table->CmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, + pData); +} + #ifndef __ANDROID__ VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, VkDisplayPropertiesKHR *pProperties) { -- cgit v1.2.3