aboutsummaryrefslogtreecommitdiff
path: root/layers/unique_objects.cpp
diff options
context:
space:
mode:
authorChris Forbes <chrisforbes@google.com>2017-05-02 17:36:57 -0700
committerChris Forbes <chrisf@ijw.co.nz>2017-05-03 11:38:06 -0700
commit6a2474ef0c04699021bcb7108571a79af1f59e1a (patch)
tree508d13c24669609ece3e60f6e7e1088a26df4c42 /layers/unique_objects.cpp
parent71a4abd2102444a3ee2fd402205ef12130862fb2 (diff)
downloadusermoji-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.cpp34
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;
}