layers: Fill out OT validation for vk_display_KHR
Change-Id: I633fae1ba3bc076022eea6c4e599f617d0296534
diff --git a/layers/object_tracker.cpp b/layers/object_tracker.cpp
index 8ccaa27..0f2a2d6 100644
--- a/layers/object_tracker.cpp
+++ b/layers/object_tracker.cpp
@@ -2757,27 +2757,6 @@
return result;
}
-VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR *pCreateInfo,
- const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) {
- bool skip_call = false;
- {
- std::lock_guard<std::mutex> lock(global_lock);
- skip_call |= ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false, VALIDATION_ERROR_01878);
- }
- if (skip_call) {
- return VK_ERROR_VALIDATION_FAILED_EXT;
- }
- VkResult result = get_dispatch_table(ot_instance_table_map, instance)
- ->CreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
- {
- std::lock_guard<std::mutex> lock(global_lock);
- if (result == VK_SUCCESS) {
- CreateObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator);
- }
- }
- return result;
-}
-
#ifdef VK_USE_PLATFORM_WIN32_KHR
VKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo,
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) {
@@ -3103,6 +3082,9 @@
return debug_report_get_instance_proc_addr(instance_data->report_data, name);
}
+VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR *pCreateInfo,
+ const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
+
static inline PFN_vkVoidFunction InterceptWsiEnabledCommand(const char *name, VkInstance instance) {
VkLayerInstanceDispatchTable *pTable = get_dispatch_table(ot_instance_table_map, instance);
if (instanceExtMap.size() == 0 || !instanceExtMap[pTable].wsi_enabled)
@@ -3820,12 +3802,15 @@
VkDisplayPropertiesKHR *pProperties) {
VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
bool skip = false;
- layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
- assert(my_data != NULL);
-
- result = get_dispatch_table(ot_instance_table_map, physicalDevice)
- ->GetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties);
-
+ {
+ std::unique_lock<std::mutex> lock(global_lock);
+ skip |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false,
+ VALIDATION_ERROR_01851);
+ }
+ if (!skip) {
+ result = get_dispatch_table(ot_instance_table_map, physicalDevice)
+ ->GetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties);
+ }
return result;
}
@@ -3833,12 +3818,15 @@
VkDisplayPlanePropertiesKHR *pProperties) {
VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
bool skip = false;
- layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
- assert(my_data != NULL);
-
- result = get_dispatch_table(ot_instance_table_map, physicalDevice)
- ->GetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties);
-
+ {
+ std::unique_lock<std::mutex> lock(global_lock);
+ skip |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false,
+ VALIDATION_ERROR_01854);
+ }
+ if (!skip) {
+ result = get_dispatch_table(ot_instance_table_map, physicalDevice)
+ ->GetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties);
+ }
return result;
}
@@ -3846,12 +3834,19 @@
uint32_t *pDisplayCount, VkDisplayKHR *pDisplays) {
VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
bool skip = false;
- layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
- assert(my_data != NULL);
-
+ {
+ std::unique_lock<std::mutex> lock(global_lock);
+ skip |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false,
+ VALIDATION_ERROR_01858);
+ }
result = get_dispatch_table(ot_instance_table_map, physicalDevice)
->GetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays);
-
+ if (((result == VK_SUCCESS) || (result == VK_INCOMPLETE)) && (pDisplays != NULL)) {
+ std::lock_guard<std::mutex> lock(global_lock);
+ for (uint32_t displays = 0; displays < *pDisplayCount; displays++) {
+ CreateObject(physicalDevice, pDisplays[displays], VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT, nullptr);
+ }
+ }
return result;
}
@@ -3859,9 +3854,13 @@
uint32_t *pPropertyCount, VkDisplayModePropertiesKHR *pProperties) {
VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
bool skip = false;
- layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
- assert(my_data != NULL);
-
+ {
+ std::unique_lock<std::mutex> lock(global_lock);
+ skip |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false,
+ VALIDATION_ERROR_01861);
+ skip |= ValidateObject(physicalDevice, display, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT, false,
+ VALIDATION_ERROR_01862);
+ }
result = get_dispatch_table(ot_instance_table_map, physicalDevice)
->GetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties);
@@ -3873,12 +3872,21 @@
const VkAllocationCallbacks *pAllocator, VkDisplayModeKHR *pMode) {
VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
bool skip = false;
- layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
- assert(my_data != NULL);
-
+ {
+ std::unique_lock<std::mutex> lock(global_lock);
+ skip |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false,
+ VALIDATION_ERROR_01865);
+ skip |= ValidateObject(physicalDevice, display, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT, false,
+ VALIDATION_ERROR_01866);
+ }
result = get_dispatch_table(ot_instance_table_map, physicalDevice)
->CreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode);
-
+ {
+ std::lock_guard<std::mutex> lock(global_lock);
+ if (result == VK_SUCCESS) {
+ CreateObject(physicalDevice, *pMode, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT, pAllocator);
+ }
+ }
return result;
}
@@ -3886,15 +3894,40 @@
uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR *pCapabilities) {
VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
bool skip = false;
- layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
- assert(my_data != NULL);
-
+ {
+ std::unique_lock<std::mutex> lock(global_lock);
+ skip |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false,
+ VALIDATION_ERROR_01875);
+ skip |= ValidateObject(physicalDevice, mode, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT, false,
+ VALIDATION_ERROR_01876);
+ }
result = get_dispatch_table(ot_instance_table_map, physicalDevice)
->GetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
return result;
}
+VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR *pCreateInfo,
+ const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) {
+ bool skip_call = false;
+ {
+ std::lock_guard<std::mutex> lock(global_lock);
+ skip_call |= ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false, VALIDATION_ERROR_01878);
+ }
+ if (skip_call) {
+ return VK_ERROR_VALIDATION_FAILED_EXT;
+ }
+ VkResult result = get_dispatch_table(ot_instance_table_map, instance)
+ ->CreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
+ {
+ std::lock_guard<std::mutex> lock(global_lock);
+ if (result == VK_SUCCESS) {
+ CreateObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator);
+ }
+ }
+ return result;
+}
+
#ifdef VK_USE_PLATFORM_WIN32_KHR
// VK_NV_external_memory_win32 Extension
VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(VkDevice device, VkDeviceMemory memory,