diff options
| author | Jon Ashburn <jon@lunarg.com> | 2016-06-28 14:46:12 -0600 |
|---|---|---|
| committer | Jon Ashburn <jon@lunarg.com> | 2016-06-30 11:18:44 -0600 |
| commit | 147f25d8f03692b361a70f024bd8f2d8062eb90f (patch) | |
| tree | 45d53f38e81cff4c3a88765b6b2ef3380906bd19 /layers/unique_objects.h | |
| parent | af7a585b7f0aaad0d205b4b21703a25b93179290 (diff) | |
| download | usermoji-147f25d8f03692b361a70f024bd8f2d8062eb90f.tar.xz | |
layers: Fix GetDisplayModePropertiesKHR unique_objects code
Add the available DisplayModes to the map for use by CreateDisplayPlaneSurfaceKHR
Change-Id: I94754259069a844bb516d3cf9d4e130473dbc2e3
Diffstat (limited to 'layers/unique_objects.h')
| -rw-r--r-- | layers/unique_objects.h | 35 |
1 files changed, 35 insertions, 0 deletions
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<std::mutex> lock(global_lock); + display = (VkDisplayKHR)my_map_data->unique_id_mapping[reinterpret_cast<uint64_t &>(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<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].displayMode); + pProperties[idx0].displayMode = reinterpret_cast<VkDisplayModeKHR&>(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 |
