diff options
| author | Chris Forbes <chrisforbes@google.com> | 2017-05-02 17:36:57 -0700 |
|---|---|---|
| committer | Chris Forbes <chrisf@ijw.co.nz> | 2017-05-03 11:38:06 -0700 |
| commit | 6a2474ef0c04699021bcb7108571a79af1f59e1a (patch) | |
| tree | 508d13c24669609ece3e60f6e7e1088a26df4c42 /layers/unique_objects.cpp | |
| parent | 71a4abd2102444a3ee2fd402205ef12130862fb2 (diff) | |
| download | usermoji-6a2474ef0c04699021bcb7108571a79af1f59e1a.tar.xz | |
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.
Diffstat (limited to 'layers/unique_objects.cpp')
| -rw-r--r-- | layers/unique_objects.cpp | 34 |
1 files changed, 4 insertions, 30 deletions
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<std::mutex> 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<const uint64_t &>(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<std::mutex> lock(global_lock); for (uint32_t idx0 = 0; idx0 < *pPropertyCount; ++idx0) { - std::lock_guard<std::mutex> lock(global_lock); - - uint64_t unique_id = global_unique_id++; - my_map_data->unique_id_mapping[unique_id] = reinterpret_cast<uint64_t &>(local_pProperties[idx0].display); - pProperties[idx0].display = reinterpret_cast<VkDisplayKHR &>(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; } |
