diff options
| author | Chris Forbes <chrisforbes@google.com> | 2016-11-03 10:18:35 +1300 |
|---|---|---|
| committer | Chris Forbes <chrisforbes@google.com> | 2016-11-07 15:25:06 +1300 |
| commit | d3b5ffd21f5bcb4c686801968538394efca23f32 (patch) | |
| tree | 96617d92f5edbc46d51606039ca0f04bd0dcb02f | |
| parent | 5629d0b2c928c27ff71b6827c1fb3ef6e1264ce1 (diff) | |
| download | usermoji-d3b5ffd21f5bcb4c686801968538394efca23f32.tar.xz | |
layers: Do extension checks for KHR_display in PV
Signed-off-by: Chris Forbes <chrisforbes@google.com>
| -rw-r--r-- | layers/parameter_validation.cpp | 163 | ||||
| -rw-r--r-- | layers/swapchain.cpp | 133 |
2 files changed, 163 insertions, 133 deletions
diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp index 0440b689..8717ad26 100644 --- a/layers/parameter_validation.cpp +++ b/layers/parameter_validation.cpp @@ -5249,6 +5249,161 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(VkDevice device, uint32 return result; } +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, + 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); + + skip |= require_instance_extension(physicalDevice, &instance_extension_enables::display_enabled, + "vkGetPhysicalDeviceDisplayPropertiesKHR", VK_KHR_DISPLAY_EXTENSION_NAME); + + // No parameter validation function for this call? + + if (!skip) { + result = get_dispatch_table(pc_instance_table_map, physicalDevice) + ->GetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties); + + validate_result(my_data->report_data, "vkGetPhysicalDeviceDisplayPropertiesKHR", result); + } + + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, + 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); + + skip |= require_instance_extension(physicalDevice, &instance_extension_enables::display_enabled, + "vkGetPhysicalDeviceDisplayPlanePropertiesKHR", VK_KHR_DISPLAY_EXTENSION_NAME); + + // No parameter validation function for this call? + + if (!skip) { + result = get_dispatch_table(pc_instance_table_map, physicalDevice) + ->GetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties); + + validate_result(my_data->report_data, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR", result); + } + + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice, uint32_t planeIndex, + 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); + + skip |= require_instance_extension(physicalDevice, &instance_extension_enables::display_enabled, + "vkGetDisplayPlaneSupportedDisplaysKHR", VK_KHR_DISPLAY_EXTENSION_NAME); + + // No parameter validation function for this call? + + if (!skip) { + result = get_dispatch_table(pc_instance_table_map, physicalDevice) + ->GetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays); + + validate_result(my_data->report_data, "vkGetDisplayPlaneSupportedDisplaysKHR", result); + } + + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + 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); + + skip |= require_instance_extension(physicalDevice, &instance_extension_enables::display_enabled, + "vkGetDisplayModePropertiesKHR", VK_KHR_DISPLAY_EXTENSION_NAME); + + // No parameter validation function for this call? + + if (!skip) { + result = get_dispatch_table(pc_instance_table_map, physicalDevice) + ->GetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties); + + validate_result(my_data->report_data, "vkGetDisplayModePropertiesKHR", result); + } + + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + const VkDisplayModeCreateInfoKHR *pCreateInfo, + 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); + + skip |= require_instance_extension(physicalDevice, &instance_extension_enables::display_enabled, + "vkCreateDisplayModeKHR", VK_KHR_DISPLAY_EXTENSION_NAME); + + // No parameter validation function for this call? + + if (!skip) { + result = get_dispatch_table(pc_instance_table_map, physicalDevice) + ->CreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode); + + validate_result(my_data->report_data, "vkCreateDisplayModeKHR", result); + } + + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, + 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); + + skip |= require_instance_extension(physicalDevice, &instance_extension_enables::display_enabled, + "vkGetDisplayPlaneCapabilitiesKHR", VK_KHR_DISPLAY_EXTENSION_NAME); + + // No parameter validation function for this call? + + if (!skip) { + result = get_dispatch_table(pc_instance_table_map, physicalDevice) + ->GetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities); + + validate_result(my_data->report_data, "vkGetDisplayPlaneCapabilitiesKHR", result); + } + + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; + bool skip = false; + layer_data *my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); + assert(my_data != NULL); + + skip |= require_instance_extension(instance, &instance_extension_enables::display_enabled, + "vkCreateDisplayPlaneSurfaceKHR", VK_KHR_DISPLAY_EXTENSION_NAME); + + // No parameter validation function for this call? + + if (!skip) { + result = get_dispatch_table(pc_instance_table_map, instance) + ->CreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); + + validate_result(my_data->report_data, "vkCreateDisplayPlaneSurfaceKHR", result); + } + + return result; +} + // VK_EXT_debug_marker Extension VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(VkDevice device, VkDebugMarkerObjectTagInfoEXT *pTagInfo) { VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; @@ -5620,6 +5775,14 @@ static PFN_vkVoidFunction InterceptWsiEnabledCommand(const char *name, VkInstanc {"vkGetPhysicalDeviceSurfacePresentModesKHR", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfacePresentModesKHR)}, {"vkDestroySurfaceKHR", reinterpret_cast<PFN_vkVoidFunction>(DestroySurfaceKHR)}, + {"vkGetPhysicalDeviceDisplayPropertiesKHR", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceDisplayPropertiesKHR)}, + {"vkGetPhysicalDeviceDisplayPlanePropertiesKHR", + reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceDisplayPlanePropertiesKHR)}, + {"vkGetDisplayPlaneSupportedDisplaysKHR", reinterpret_cast<PFN_vkVoidFunction>(GetDisplayPlaneSupportedDisplaysKHR)}, + {"vkGetDisplayModePropertiesKHR", reinterpret_cast<PFN_vkVoidFunction>(GetDisplayModePropertiesKHR)}, + {"vkCreateDisplayModeKHR", reinterpret_cast<PFN_vkVoidFunction>(CreateDisplayModeKHR)}, + {"vkGetDisplayPlaneCapabilitiesKHR", reinterpret_cast<PFN_vkVoidFunction>(GetDisplayPlaneCapabilitiesKHR)}, + {"vkCreateDisplayPlaneSurfaceKHR", reinterpret_cast<PFN_vkVoidFunction>(CreateDisplayPlaneSurfaceKHR)}, }; for (size_t i = 0; i < ARRAY_SIZE(wsi_instance_commands); i++) { diff --git a/layers/swapchain.cpp b/layers/swapchain.cpp index 02b9c44d..45e00dc3 100644 --- a/layers/swapchain.cpp +++ b/layers/swapchain.cpp @@ -655,36 +655,6 @@ VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXlibPresentationSupportKHR(VkPhy } #endif // VK_USE_PLATFORM_XLIB_KHR -VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, - VkDisplayPropertiesKHR *pProperties) { - VkResult result = VK_SUCCESS; - bool skip_call = false; - layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); - std::unique_lock<std::mutex> lock(global_lock); - SwpPhysicalDevice *pPhysicalDevice = NULL; - { - auto it = my_data->physicalDeviceMap.find(physicalDevice); - pPhysicalDevice = (it == my_data->physicalDeviceMap.end()) ? NULL : &it->second; - } - - if (pPhysicalDevice && pPhysicalDevice->pInstance && !pPhysicalDevice->pInstance->displayExtensionEnabled) { - skip_call |= - log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, - reinterpret_cast<uint64_t>(pPhysicalDevice->pInstance->instance), __LINE__, SWAPCHAIN_EXT_NOT_ENABLED_BUT_USED, - swapchain_layer_name, "vkGetPhysicalDeviceDisplayPropertiesKHR() called even though the %s " - "extension was not enabled for this VkInstance.", - VK_KHR_DISPLAY_EXTENSION_NAME); - } - lock.unlock(); - - if (!skip_call) { - result = - my_data->instance_dispatch_table->GetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties); - return result; - } - return VK_ERROR_VALIDATION_FAILED_EXT; -} - VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, VkDisplayPlanePropertiesKHR *pProperties) { VkResult result = VK_SUCCESS; @@ -696,15 +666,6 @@ VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhys auto it = my_data->physicalDeviceMap.find(physicalDevice); pPhysicalDevice = (it == my_data->physicalDeviceMap.end()) ? NULL : &it->second; } - - if (pPhysicalDevice && pPhysicalDevice->pInstance && !pPhysicalDevice->pInstance->displayExtensionEnabled) { - skip_call |= - log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, - reinterpret_cast<uint64_t>(pPhysicalDevice->pInstance->instance), __LINE__, SWAPCHAIN_EXT_NOT_ENABLED_BUT_USED, - swapchain_layer_name, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR() called even though the %s " - "extension was not enabled for this VkInstance.", - VK_KHR_DISPLAY_EXTENSION_NAME); - } lock.unlock(); if (!skip_call) { @@ -736,15 +697,6 @@ VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDev pPhysicalDevice = (it == my_data->physicalDeviceMap.end()) ? NULL : &it->second; } - if (pPhysicalDevice && pPhysicalDevice->pInstance && !pPhysicalDevice->pInstance->displayExtensionEnabled) { - skip_call |= - log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, - reinterpret_cast<uint64_t>(pPhysicalDevice->pInstance->instance), __LINE__, SWAPCHAIN_EXT_NOT_ENABLED_BUT_USED, - swapchain_layer_name, "vkGetDisplayPlaneSupportedDisplaysKHR() called even though the %s " - "extension was not enabled for this VkInstance.", - VK_KHR_DISPLAY_EXTENSION_NAME); - } - if (!pPhysicalDevice->gotDisplayPlanePropertyCount) { skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, reinterpret_cast<uint64_t>(pPhysicalDevice->pInstance->instance), __LINE__, @@ -774,70 +726,6 @@ VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDev return VK_ERROR_VALIDATION_FAILED_EXT; } -VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, - uint32_t *pPropertyCount, VkDisplayModePropertiesKHR *pProperties) { - VkResult result = VK_SUCCESS; - bool skip_call = false; - layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); - std::unique_lock<std::mutex> lock(global_lock); - SwpPhysicalDevice *pPhysicalDevice = NULL; - { - auto it = my_data->physicalDeviceMap.find(physicalDevice); - pPhysicalDevice = (it == my_data->physicalDeviceMap.end()) ? NULL : &it->second; - } - - if (pPhysicalDevice && pPhysicalDevice->pInstance && !pPhysicalDevice->pInstance->displayExtensionEnabled) { - skip_call |= - log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, - reinterpret_cast<uint64_t>(pPhysicalDevice->pInstance->instance), __LINE__, SWAPCHAIN_EXT_NOT_ENABLED_BUT_USED, - swapchain_layer_name, - "vkGetDisplayModePropertiesKHR() called even though the %s extension was not enabled for this VkInstance.", - VK_KHR_DISPLAY_EXTENSION_NAME); - } - - lock.unlock(); - - if (!skip_call) { - result = - my_data->instance_dispatch_table->GetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties); - return result; - } - // TODO store the displayMode for later checking - return VK_ERROR_VALIDATION_FAILED_EXT; -} - -VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, - const VkDisplayModeCreateInfoKHR *pCreateInfo, - const VkAllocationCallbacks *pAllocator, VkDisplayModeKHR *pMode) { - VkResult result = VK_SUCCESS; - bool skip_call = false; - layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); - std::unique_lock<std::mutex> lock(global_lock); - SwpPhysicalDevice *pPhysicalDevice = NULL; - { - auto it = my_data->physicalDeviceMap.find(physicalDevice); - pPhysicalDevice = (it == my_data->physicalDeviceMap.end()) ? NULL : &it->second; - } - - if (pPhysicalDevice && pPhysicalDevice->pInstance && !pPhysicalDevice->pInstance->displayExtensionEnabled) { - skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, - reinterpret_cast<uint64_t>(pPhysicalDevice->pInstance->instance), __LINE__, - SWAPCHAIN_EXT_NOT_ENABLED_BUT_USED, swapchain_layer_name, - "vkCreateDisplayModeKHR() called even though the %s extension was not enabled for this VkInstance.", - VK_KHR_DISPLAY_EXTENSION_NAME); - } - - lock.unlock(); - - // TODO more validation checks needed - if (!skip_call) { - result = my_data->instance_dispatch_table->CreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode); - return result; - } - - return VK_ERROR_VALIDATION_FAILED_EXT; -} - VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR *pCapabilities) { VkResult result = VK_SUCCESS; @@ -850,15 +738,6 @@ VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice p pPhysicalDevice = (it == my_data->physicalDeviceMap.end()) ? NULL : &it->second; } - if (pPhysicalDevice && pPhysicalDevice->pInstance && !pPhysicalDevice->pInstance->displayExtensionEnabled) { - skip_call |= - log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, - reinterpret_cast<uint64_t>(pPhysicalDevice->pInstance->instance), __LINE__, SWAPCHAIN_EXT_NOT_ENABLED_BUT_USED, - swapchain_layer_name, - "vkGetDisplayPlaneCapabilitiesKHR) called even though the %s extension was not enabled for this VkInstance.", - VK_KHR_DISPLAY_EXTENSION_NAME); - } - if (!pPhysicalDevice->gotDisplayPlanePropertyCount) { skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, reinterpret_cast<uint64_t>(pPhysicalDevice->pInstance->instance), __LINE__, @@ -894,15 +773,6 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(VkInstance instance, std::unique_lock<std::mutex> lock(global_lock); SwpInstance *pInstance = &(my_data->instanceMap[instance]); - // Validate that the platform extension was enabled: - if (pInstance && !pInstance->displayExtensionEnabled) { - skip_call |= - log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, - reinterpret_cast<uint64_t>(instance), __LINE__, SWAPCHAIN_EXT_NOT_ENABLED_BUT_USED, swapchain_layer_name, - "vkCreateDisplayPlaneSurfaceKHR() called even though the %s extension was not enabled for this VkInstance.", - VK_KHR_DISPLAY_EXTENSION_NAME); - } - // TODO more validation checks if (!skip_call) { // Call down the call chain: @@ -2160,12 +2030,9 @@ static PFN_vkVoidFunction intercept_khr_surface_command(const char *name, VkInst {"vkGetPhysicalDeviceSurfaceFormatsKHR", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceFormatsKHR)}, {"vkGetPhysicalDeviceSurfacePresentModesKHR", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfacePresentModesKHR)}, - {"vkGetPhysicalDeviceDisplayPropertiesKHR", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceDisplayPropertiesKHR)}, {"vkGetPhysicalDeviceDisplayPlanePropertiesKHR", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceDisplayPlanePropertiesKHR)}, {"vkGetDisplayPlaneSupportedDisplaysKHR", reinterpret_cast<PFN_vkVoidFunction>(GetDisplayPlaneSupportedDisplaysKHR)}, - {"vkGetDisplayModePropertiesKHR", reinterpret_cast<PFN_vkVoidFunction>(GetDisplayModePropertiesKHR)}, - {"vkCreateDisplayModeKHR", reinterpret_cast<PFN_vkVoidFunction>(CreateDisplayModeKHR)}, {"vkGetDisplayPlaneCapabilitiesKHR", reinterpret_cast<PFN_vkVoidFunction>(GetDisplayPlaneCapabilitiesKHR)}, {"vkCreateDisplayPlaneSurfaceKHR", reinterpret_cast<PFN_vkVoidFunction>(CreateDisplayPlaneSurfaceKHR)}, }; |
