diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-03-03 08:40:16 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-03-07 14:59:59 -0700 |
| commit | 68260b5ae0ff207ac128b48b96ae5b883fc2ffd3 (patch) | |
| tree | 36ef4daac28dee6c2aec0fb27e6d7144bc96c1a8 /layers/unique_objects.cpp | |
| parent | 99a84ff51900bed5b20063080e3d5415659eb1b1 (diff) | |
| download | usermoji-68260b5ae0ff207ac128b48b96ae5b883fc2ffd3.tar.xz | |
layers: Move DescriptorUpdateTemplate functions
In unique_objects, moved these functions from being auto-generated to
being manually written.
Change-Id: Iae7ccac0ad51d57826104bd0532742a098c673ce
Diffstat (limited to 'layers/unique_objects.cpp')
| -rw-r--r-- | layers/unique_objects.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
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<std::mutex> 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<const uint64_t &>(pCreateInfo->descriptorSetLayout)]; + } + if (pCreateInfo->pipelineLayout) { + local_pCreateInfo->pipelineLayout = + (VkPipelineLayout)dev_data->unique_id_mapping[reinterpret_cast<const uint64_t &>(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<std::mutex> lock(global_lock); + uint64_t unique_id = global_unique_id++; + dev_data->unique_id_mapping[unique_id] = reinterpret_cast<uint64_t &>(*pDescriptorUpdateTemplate); + *pDescriptorUpdateTemplate = reinterpret_cast<VkDescriptorUpdateTemplateKHR &>(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<std::mutex> lock(global_lock); + uint64_t descriptorUpdateTemplate_id = reinterpret_cast<uint64_t &>(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<std::mutex> lock(global_lock); + descriptorSet = (VkDescriptorSet)dev_data->unique_id_mapping[reinterpret_cast<uint64_t &>(descriptorSet)]; + descriptorUpdateTemplate = + (VkDescriptorUpdateTemplateKHR)dev_data->unique_id_mapping[reinterpret_cast<uint64_t &>(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<std::mutex> lock(global_lock); + descriptorUpdateTemplate = + (VkDescriptorUpdateTemplateKHR)dev_data->unique_id_mapping[reinterpret_cast<uint64_t &>(descriptorUpdateTemplate)]; + layout = (VkPipelineLayout)dev_data->unique_id_mapping[reinterpret_cast<uint64_t &>(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) { |
