aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Ashburn <jon@lunarg.com>2016-06-28 14:46:12 -0600
committerJon Ashburn <jon@lunarg.com>2016-06-30 11:18:44 -0600
commit147f25d8f03692b361a70f024bd8f2d8062eb90f (patch)
tree45d53f38e81cff4c3a88765b6b2ef3380906bd19
parentaf7a585b7f0aaad0d205b4b21703a25b93179290 (diff)
downloadusermoji-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.h35
-rwxr-xr-xvk-layer-generate.py3
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',