From 147f25d8f03692b361a70f024bd8f2d8062eb90f Mon Sep 17 00:00:00 2001 From: Jon Ashburn Date: Tue, 28 Jun 2016 14:46:12 -0600 Subject: layers: Fix GetDisplayModePropertiesKHR unique_objects code Add the available DisplayModes to the map for use by CreateDisplayPlaneSurfaceKHR Change-Id: I94754259069a844bb516d3cf9d4e130473dbc2e3 --- layers/unique_objects.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'layers/unique_objects.h') diff --git a/layers/unique_objects.h b/layers/unique_objects.h index 53230063..c9226811 100644 --- a/layers/unique_objects.h +++ b/layers/unique_objects.h @@ -435,4 +435,39 @@ VkResult explicit_GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalD } return result; } + + +VkResult explicit_GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties) +{ + layer_data *my_map_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); + safe_VkDisplayModePropertiesKHR* local_pProperties = NULL; + { + std::lock_guard lock(global_lock); + display = (VkDisplayKHR)my_map_data->unique_id_mapping[reinterpret_cast(display)]; + if (pProperties) { + local_pProperties = new safe_VkDisplayModePropertiesKHR[*pPropertyCount]; + for (uint32_t idx0=0; idx0<*pPropertyCount; ++idx0) { + local_pProperties[idx0].initialize(&pProperties[idx0]); + } + } + } + + VkResult result = get_dispatch_table(unique_objects_instance_table_map, physicalDevice)->GetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, ( VkDisplayModePropertiesKHR*)local_pProperties); + if (result == VK_SUCCESS && pProperties) + { + 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].displayMode); + pProperties[idx0].displayMode = reinterpret_cast(unique_id); + pProperties[idx0].parameters.visibleRegion.width = local_pProperties[idx0].parameters.visibleRegion.width; + pProperties[idx0].parameters.visibleRegion.height = local_pProperties[idx0].parameters.visibleRegion.height; + pProperties[idx0].parameters.refreshRate = local_pProperties[idx0].parameters.refreshRate; + } + } + if (local_pProperties) + delete[] local_pProperties; + return result; +} } // namespace unique_objects -- cgit v1.2.3