From 6a2474ef0c04699021bcb7108571a79af1f59e1a Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Tue, 2 May 2017 17:36:57 -0700 Subject: layers: Fix UO GetPhysicalDeviceDisplayPlanePropertiesKHR This was doing odd things. pProperties is an output-only array. Its contents are undefined before the call, so we shouldn't be trying to unwrap the handles in there. We don't even need the safe_* here. --- layers/unique_objects.cpp | 34 ++++------------------------------ 1 file changed, 4 insertions(+), 30 deletions(-) (limited to 'layers/unique_objects.cpp') diff --git a/layers/unique_objects.cpp b/layers/unique_objects.cpp index 50b6c7fc..a6c09817 100644 --- a/layers/unique_objects.cpp +++ b/layers/unique_objects.cpp @@ -722,41 +722,15 @@ VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplateKHR(VkCommandBuffer c VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, VkDisplayPropertiesKHR *pProperties) { instance_layer_data *my_map_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), instance_layer_data_map); - safe_VkDisplayPropertiesKHR *local_pProperties = NULL; - { - std::lock_guard lock(global_lock); - if (pProperties) { - local_pProperties = new safe_VkDisplayPropertiesKHR[*pPropertyCount]; - for (uint32_t idx0 = 0; idx0 < *pPropertyCount; ++idx0) { - local_pProperties[idx0].initialize(&pProperties[idx0]); - if (pProperties[idx0].display) { - local_pProperties[idx0].display = - (VkDisplayKHR)my_map_data->unique_id_mapping[reinterpret_cast(pProperties[idx0].display)]; - } - } - } - } VkResult result = my_map_data->dispatch_table.GetPhysicalDeviceDisplayPropertiesKHR( - physicalDevice, pPropertyCount, (VkDisplayPropertiesKHR *)local_pProperties); - if (result == VK_SUCCESS && pProperties) { + physicalDevice, pPropertyCount, pProperties); + if ((result == VK_SUCCESS || result == VK_INCOMPLETE) && pProperties) { + std::lock_guard lock(global_lock); for (uint32_t idx0 = 0; idx0 < *pPropertyCount; ++idx0) { - std::lock_guard lock(global_lock); - - uint64_t unique_id = global_unique_id++; - my_map_data->unique_id_mapping[unique_id] = reinterpret_cast(local_pProperties[idx0].display); - pProperties[idx0].display = reinterpret_cast(unique_id); - pProperties[idx0].displayName = local_pProperties[idx0].displayName; - pProperties[idx0].physicalDimensions = local_pProperties[idx0].physicalDimensions; - pProperties[idx0].physicalResolution = local_pProperties[idx0].physicalResolution; - pProperties[idx0].supportedTransforms = local_pProperties[idx0].supportedTransforms; - pProperties[idx0].planeReorderPossible = local_pProperties[idx0].planeReorderPossible; - pProperties[idx0].persistentContent = local_pProperties[idx0].persistentContent; + pProperties[idx0].display = WrapNew(my_map_data, pProperties[idx0].display); } } - if (local_pProperties) { - delete[] local_pProperties; - } return result; } -- cgit v1.2.3