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 | |
| 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
| -rw-r--r-- | layers/unique_objects.h | 35 | ||||
| -rwxr-xr-x | vk-layer-generate.py | 3 |
2 files changed, 37 insertions, 1 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 diff --git a/vk-layer-generate.py b/vk-layer-generate.py index 13a0d1a5..0e459dd5 100755 --- a/vk-layer-generate.py +++ b/vk-layer-generate.py @@ -1554,7 +1554,8 @@ class UniqueObjectsSubcommand(Subcommand): 'DestroyDevice', 'CreateComputePipelines', 'CreateGraphicsPipelines', - 'GetDisplayPlaneSupportedDisplaysKHR' + 'GetDisplayPlaneSupportedDisplaysKHR', + 'GetDisplayModePropertiesKHR' ] # TODO : This is hacky, need to make this a more general-purpose solution for all layers ifdef_dict = {'CreateXcbSurfaceKHR': 'VK_USE_PLATFORM_XCB_KHR', |
