| /* |
| * Copyright (c) 2021-2022 The Khronos Group Inc. |
| * Copyright (c) 2021-2022 Valve Corporation |
| * Copyright (c) 2021-2022 LunarG, Inc. |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and/or associated documentation files (the "Materials"), to |
| * deal in the Materials without restriction, including without limitation the |
| * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
| * sell copies of the Materials, and to permit persons to whom the Materials are |
| * furnished to do so, subject to the following conditions: |
| * |
| * The above copyright notice(s) and this permission notice shall be included in |
| * all copies or substantial portions of the Materials. |
| * |
| * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| * |
| * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
| * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE |
| * USE OR OTHER DEALINGS IN THE MATERIALS. |
| * |
| * Author(s): Charles Giessen <charles@lunarg.com> |
| * Mark Young <marky@lunarg.com> |
| */ |
| |
| #include "test_environment.h" |
| |
| // ---- Invalid Instance tests |
| |
| struct BadData { |
| uint64_t bad_array[3] = {0x123456789AB, 0x23456789AB1, 0x9876543210AB}; |
| }; |
| template <typename T> |
| T get_bad_handle() { |
| static BadData my_bad_data; |
| return reinterpret_cast<T>(static_cast<void*>(&my_bad_data)); |
| } |
| |
| TEST(LoaderHandleValidTests, BadInstEnumPhysDevices) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| uint32_t returned_physical_count = 0; |
| |
| ASSERT_DEATH(env.vulkan_functions.vkEnumeratePhysicalDevices(bad_instance, &returned_physical_count, nullptr), |
| "vkEnumeratePhysicalDevices: Invalid instance \\[VUID-vkEnumeratePhysicalDevices-instance-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadInstGetInstProcAddr) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| ASSERT_DEATH(env.vulkan_functions.vkGetInstanceProcAddr(bad_instance, "vkGetBufferDeviceAddress"), |
| "vkGetInstanceProcAddr: Invalid instance \\[VUID-vkGetInstanceProcAddr-instance-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadInstDestroyInstance) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| ASSERT_DEATH(env.vulkan_functions.vkDestroyInstance(bad_instance, nullptr), |
| "vkDestroyInstance: Invalid instance \\[VUID-vkDestroyInstance-instance-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadInstDestroySurface) { |
| FrameworkEnvironment env{}; |
| Extension first_ext{"VK_KHR_surface"}; |
| Extension second_ext{"VK_EXT_headless_surface"}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_instance_extensions({first_ext, second_ext}) |
| .add_physical_device("physical_device_0"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.add_extension(first_ext.extensionName.c_str()); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| ASSERT_DEATH(env.vulkan_functions.vkDestroySurfaceKHR(bad_instance, VK_NULL_HANDLE, nullptr), |
| "vkDestroySurfaceKHR: Invalid instance \\[VUID-vkDestroySurfaceKHR-instance-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadInstCreateHeadlessSurf) { |
| FrameworkEnvironment env{}; |
| Extension first_ext{"VK_KHR_surface"}; |
| Extension second_ext{"VK_EXT_headless_surface"}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_instance_extensions({first_ext, second_ext}) |
| .add_physical_device("physical_device_0"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.add_extensions({first_ext.extensionName.c_str(), second_ext.extensionName.c_str()}); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkHeadlessSurfaceCreateInfoEXT surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateHeadlessSurfaceEXT(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateHeadlessSurfaceEXT: Invalid instance \\[VUID-vkCreateHeadlessSurfaceEXT-instance-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadInstCreateDisplayPlaneSurf) { |
| FrameworkEnvironment env{}; |
| Extension first_ext{"VK_KHR_surface"}; |
| Extension second_ext{"VK_KHR_display"}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_instance_extensions({first_ext, second_ext}) |
| .add_physical_device("physical_device_0"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.add_extensions({first_ext.extensionName.c_str(), second_ext.extensionName.c_str()}); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkDisplaySurfaceCreateInfoKHR surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateDisplayPlaneSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateDisplayPlaneSurfaceKHR: Invalid instance \\[VUID-vkCreateDisplayPlaneSurfaceKHR-instance-parameter\\]"); |
| } |
| |
| #if defined(VK_USE_PLATFORM_ANDROID_KHR) |
| TEST(LoaderHandleValidTests, BadInstCreateAndroidSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkAndroidSurfaceCreateInfoKHR surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateAndroidSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateAndroidSurfaceKHR: Invalid instance \\[VUID-vkCreateAndroidSurfaceKHR-instance-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_ANDROID_KHR |
| |
| #if defined(VK_USE_PLATFORM_DIRECTFB_EXT) |
| TEST(LoaderHandleValidTests, BadInstCreateDirectFBSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkDirectFBSurfaceCreateInfoEXT surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateDirectFBSurfaceEXT(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateDirectFBSurfaceEXT: Invalid instance \\[VUID-vkCreateDirectFBSurfaceEXT-instance-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_DIRECTFB_EXT |
| |
| #if defined(VK_USE_PLATFORM_FUCHSIA) |
| TEST(LoaderHandleValidTests, BadInstCreateFuchsiaSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkImagePipeSurfaceCreateInfoFUCHSIA surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateImagePipeSurfaceFUCHSIA(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateImagePipeSurfaceFUCHSIA: Invalid instance \\[VUID-vkCreateImagePipeSurfaceFUCHSIA-instance-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_FUCHSIA |
| |
| #if defined(VK_USE_PLATFORM_GGP) |
| TEST(LoaderHandleValidTests, BadInstCreateGGPSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkStreamDescriptorSurfaceCreateInfoGGP surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH( |
| env.vulkan_functions.vkCreateStreamDescriptorSurfaceGGP(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateStreamDescriptorSurfaceGGP: Invalid instance \\[VUID-vkCreateStreamDescriptorSurfaceGGP-instance-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_GGP |
| |
| #if defined(VK_USE_PLATFORM_IOS_MVK) |
| TEST(LoaderHandleValidTests, BadInstCreateIOSSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkIOSSurfaceCreateInfoMVK surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateIOSSurfaceMVK(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateIOSSurfaceMVK: Invalid instance \\[VUID-vkCreateIOSSurfaceMVK-instance-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_IOS_MVK |
| |
| #if defined(VK_USE_PLATFORM_MACOS_MVK) |
| TEST(LoaderHandleValidTests, BadInstCreateMacOSSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkMacOSSurfaceCreateInfoMVK surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateMacOSSurfaceMVK(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateMacOSSurfaceMVK: Invalid instance \\[VUID-vkCreateMacOSSurfaceMVK-instance-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_MACOS_MVK |
| |
| #if defined(VK_USE_PLATFORM_METAL_EXT) |
| TEST(LoaderHandleValidTests, BadInstCreateMetalSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkMetalSurfaceCreateInfoEXT surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateMetalSurfaceEXT(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateMetalSurfaceEXT: Invalid instance \\[VUID-vkCreateMetalSurfaceEXT-instance-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_METAL_EXT |
| |
| #if defined(VK_USE_PLATFORM_SCREEN_QNX) |
| TEST(LoaderHandleValidTests, BadInstCreateQNXSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkScreenSurfaceCreateInfoQNX surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateScreenSurfaceQNX(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateScreenSurfaceQNX: Invalid instance \\[VUID-vkCreateScreenSurfaceQNX-instance-parameter\\]"); |
| // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown |
| } |
| #endif // VK_USE_PLATFORM_SCREEN_QNX |
| |
| #if defined(VK_USE_PLATFORM_VI_NN) |
| TEST(LoaderHandleValidTests, BadInstCreateViNNSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkViSurfaceCreateInfoNN surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateViSurfaceNN(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateViSurfaceNN: Invalid instance \\[VUID-vkCreateViSurfaceNN-instance-parameter\\]"); |
| // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown |
| } |
| #endif // VK_USE_PLATFORM_VI_NN |
| |
| #if defined(VK_USE_PLATFORM_WAYLAND_KHR) |
| TEST(LoaderHandleValidTests, BadInstCreateWaylandSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkWaylandSurfaceCreateInfoKHR surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateWaylandSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateWaylandSurfaceKHR: Invalid instance \\[VUID-vkCreateWaylandSurfaceKHR-instance-parameter\\]"); |
| // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown |
| } |
| #endif // VK_USE_PLATFORM_WAYLAND_KHR |
| |
| #if defined(VK_USE_PLATFORM_WIN32_KHR) |
| TEST(LoaderHandleValidTests, BadInstCreateWin32Surf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkWin32SurfaceCreateInfoKHR surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateWin32SurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateWin32SurfaceKHR: Invalid instance \\[VUID-vkCreateWin32SurfaceKHR-instance-parameter\\]"); |
| // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown |
| } |
| #endif // VK_USE_PLATFORM_WIN32_KHR |
| |
| #if defined(VK_USE_PLATFORM_XCB_KHR) |
| TEST(LoaderHandleValidTests, BadInstCreateXCBSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkXcbSurfaceCreateInfoKHR surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateXcbSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateXcbSurfaceKHR: Invalid instance \\[VUID-vkCreateXcbSurfaceKHR-instance-parameter\\]"); |
| // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown |
| } |
| #endif // VK_USE_PLATFORM_XCB_KHR |
| |
| #if defined(VK_USE_PLATFORM_XLIB_KHR) |
| TEST(LoaderHandleValidTests, BadInstCreateXlibSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_instance = get_bad_handle<VkInstance>(); |
| |
| VkXlibSurfaceCreateInfoKHR surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateXlibSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface), |
| "vkCreateXlibSurfaceKHR: Invalid instance \\[VUID-vkCreateXlibSurfaceKHR-instance-parameter\\]"); |
| // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown |
| } |
| #endif // VK_USE_PLATFORM_XLIB_KHR |
| |
| // ---- Invalid Physical Device tests |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFeature) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkPhysicalDeviceFeatures features = {}; |
| ASSERT_DEATH( |
| env.vulkan_functions.vkGetPhysicalDeviceFeatures(bad_physical_dev, &features), |
| "vkGetPhysicalDeviceFeatures: Invalid physicalDevice \\[VUID-vkGetPhysicalDeviceFeatures-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFormatProps) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkFormatProperties format_info = {}; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceFormatProperties(bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM, &format_info), |
| "vkGetPhysicalDeviceFormatProperties: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceFormatProperties-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevImgFormatProps) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkImageFormatProperties format_info = {}; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceImageFormatProperties(bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM, |
| VK_IMAGE_TYPE_2D, VK_IMAGE_TILING_LINEAR, |
| VK_IMAGE_USAGE_STORAGE_BIT, 0, &format_info), |
| "vkGetPhysicalDeviceImageFormatProperties: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceImageFormatProperties-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevProps) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkPhysicalDeviceProperties properties = {}; |
| ASSERT_DEATH( |
| env.vulkan_functions.vkGetPhysicalDeviceProperties(bad_physical_dev, &properties), |
| "vkGetPhysicalDeviceProperties: Invalid physicalDevice \\[VUID-vkGetPhysicalDeviceProperties-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamProps) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(bad_physical_dev, &count, nullptr), |
| "vkGetPhysicalDeviceQueueFamilyProperties: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceQueueFamilyProperties-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDevMemProps) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkPhysicalDeviceMemoryProperties properties = {}; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceMemoryProperties(bad_physical_dev, &properties), |
| "vkGetPhysicalDeviceMemoryProperties: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceMemoryProperties-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevCreateDevice) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| float queue_priorities[3] = {0.0f, 0.5f, 1.0f}; |
| VkDeviceQueueCreateInfo dev_queue_create_info = {}; |
| dev_queue_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; |
| dev_queue_create_info.pNext = nullptr; |
| dev_queue_create_info.flags = 0; |
| dev_queue_create_info.queueFamilyIndex = 0; |
| dev_queue_create_info.queueCount = 1; |
| dev_queue_create_info.pQueuePriorities = queue_priorities; |
| VkDeviceCreateInfo dev_create_info = {}; |
| dev_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; |
| dev_create_info.pNext = nullptr; |
| dev_create_info.flags = 0; |
| dev_create_info.queueCreateInfoCount = 1; |
| dev_create_info.pQueueCreateInfos = &dev_queue_create_info; |
| dev_create_info.enabledLayerCount = 0; |
| dev_create_info.ppEnabledLayerNames = nullptr; |
| dev_create_info.enabledExtensionCount = 0; |
| dev_create_info.ppEnabledExtensionNames = nullptr; |
| dev_create_info.pEnabledFeatures = nullptr; |
| VkDevice created_dev = VK_NULL_HANDLE; |
| ASSERT_DEATH(env.vulkan_functions.vkCreateDevice(bad_physical_dev, &dev_create_info, nullptr, &created_dev), |
| "vkCreateDevice: Invalid physicalDevice \\[VUID-vkCreateDevice-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevEnumDevExtProps) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkEnumerateDeviceExtensionProperties(bad_physical_dev, nullptr, &count, nullptr), |
| "vkEnumerateDeviceExtensionProperties: Invalid physicalDevice " |
| "\\[VUID-vkEnumerateDeviceExtensionProperties-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevEnumDevLayerProps) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkEnumerateDeviceLayerProperties(bad_physical_dev, &count, nullptr), |
| "vkEnumerateDeviceLayerProperties: Invalid physicalDevice " |
| "\\[VUID-vkEnumerateDeviceLayerProperties-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSparseImgFormatProps) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSparseImageFormatProperties( |
| bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_TYPE_2D, VK_SAMPLE_COUNT_1_BIT, |
| VK_IMAGE_USAGE_STORAGE_BIT, VK_IMAGE_TILING_LINEAR, &count, nullptr), |
| "vkGetPhysicalDeviceSparseImageFormatProperties: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceSparseImageFormatProperties-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFeature2) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkPhysicalDeviceFeatures2 features = {}; |
| features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; |
| features.pNext = nullptr; |
| ASSERT_DEATH( |
| env.vulkan_functions.vkGetPhysicalDeviceFeatures2(bad_physical_dev, &features), |
| "vkGetPhysicalDeviceFeatures2: Invalid physicalDevice \\[VUID-vkGetPhysicalDeviceFeatures2-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFormatProps2) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkFormatProperties2 properties = {}; |
| properties.sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; |
| properties.pNext = nullptr; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceFormatProperties2(bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM, &properties), |
| "vkGetPhysicalDeviceFormatProperties2: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceFormatProperties2-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevImgFormatProps2) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkPhysicalDeviceImageFormatInfo2 format_info = {}; |
| format_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2; |
| format_info.pNext = nullptr; |
| VkImageFormatProperties2 properties = {}; |
| properties.sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2; |
| properties.pNext = nullptr; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceImageFormatProperties2(bad_physical_dev, &format_info, &properties), |
| "vkGetPhysicalDeviceImageFormatProperties2: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceImageFormatProperties2-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevProps2) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkPhysicalDeviceProperties2 properties = {}; |
| properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; |
| properties.pNext = nullptr; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceProperties2(bad_physical_dev, &properties), |
| "vkGetPhysicalDeviceProperties2: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceProperties2-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamProps2) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties2(bad_physical_dev, &count, nullptr), |
| "vkGetPhysicalDeviceQueueFamilyProperties2: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceQueueFamilyProperties2-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDevMemProps2) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkPhysicalDeviceMemoryProperties2 properties = {}; |
| properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2; |
| properties.pNext = nullptr; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceMemoryProperties2(bad_physical_dev, &properties), |
| "vkGetPhysicalDeviceMemoryProperties2: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceMemoryProperties2-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSparseImgFormatProps2) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkPhysicalDeviceSparseImageFormatInfo2 info = {}; |
| info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2; |
| info.pNext = nullptr; |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSparseImageFormatProperties2(bad_physical_dev, &info, &count, nullptr), |
| "vkGetPhysicalDeviceSparseImageFormatProperties2: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternFenceProps) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkPhysicalDeviceExternalFenceInfo info = {}; |
| info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO; |
| info.pNext = nullptr; |
| VkExternalFenceProperties props = {}; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceExternalFenceProperties(bad_physical_dev, &info, &props), |
| "vkGetPhysicalDeviceExternalFenceProperties: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceExternalFenceProperties-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternBufferProps) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkPhysicalDeviceExternalBufferInfo info = {}; |
| info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO; |
| info.pNext = nullptr; |
| VkExternalBufferProperties props = {}; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceExternalBufferProperties(bad_physical_dev, &info, &props), |
| "vkGetPhysicalDeviceExternalBufferProperties: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceExternalBufferProperties-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternSemaphoreProps) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_physical_device({}) |
| .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0)); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.set_api_version(1, 1, 0); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VkPhysicalDeviceExternalSemaphoreInfo info = {}; |
| info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO; |
| info.pNext = nullptr; |
| VkExternalSemaphoreProperties props = {}; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceExternalSemaphoreProperties(bad_physical_dev, &info, &props), |
| "vkGetPhysicalDeviceExternalSemaphoreProperties: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceSupportKHR) { |
| FrameworkEnvironment env{}; |
| Extension first_ext{"VK_KHR_surface"}; |
| Extension second_ext{"VK_KHR_display"}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_instance_extensions({first_ext, second_ext}) |
| .add_physical_device("physical_device_0"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.add_extension(first_ext.extensionName.c_str()); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| VkBool32 supported = VK_FALSE; |
| |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceSupportKHR(bad_physical_dev, 0, VK_NULL_HANDLE, &supported), |
| "vkGetPhysicalDeviceSurfaceSupportKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceSurfaceSupportKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceCapsKHR) { |
| FrameworkEnvironment env{}; |
| Extension first_ext{"VK_KHR_surface"}; |
| Extension second_ext{"VK_KHR_display"}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_instance_extensions({first_ext, second_ext}) |
| .add_physical_device("physical_device_0"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.add_extension(first_ext.extensionName.c_str()); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| VkSurfaceCapabilitiesKHR caps = {}; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(bad_physical_dev, VK_NULL_HANDLE, &caps), |
| "vkGetPhysicalDeviceSurfaceCapabilitiesKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceFormatsKHR) { |
| FrameworkEnvironment env{}; |
| Extension first_ext{"VK_KHR_surface"}; |
| Extension second_ext{"VK_KHR_display"}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_instance_extensions({first_ext, second_ext}) |
| .add_physical_device("physical_device_0"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.add_extension(first_ext.extensionName.c_str()); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceFormatsKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr), |
| "vkGetPhysicalDeviceSurfaceFormatsKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfacePresentModesKHR) { |
| FrameworkEnvironment env{}; |
| Extension first_ext{"VK_KHR_surface"}; |
| Extension second_ext{"VK_KHR_display"}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_instance_extensions({first_ext, second_ext}) |
| .add_physical_device("physical_device_0"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.add_extension(first_ext.extensionName.c_str()); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfacePresentModesKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr), |
| "vkGetPhysicalDeviceSurfacePresentModesKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-physicalDevice-parameter\\]"); |
| } |
| |
| #if defined(VK_USE_PLATFORM_DIRECTFB_EXT) |
| TEST(LoaderHandleValidTests, BadPhysDevGetDirectFBPresentSupportKHR) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| IDirectFB directfb; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDirectFBPresentationSupportEXT(bad_physical_dev, 0, &directfb), |
| "vkGetPhysicalDeviceDirectFBPresentationSupportEXT: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-physicalDevice-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_DIRECTFB_EXT |
| |
| #if defined(VK_USE_PLATFORM_SCREEN_QNX) |
| TEST(LoaderHandleValidTests, BadPhysDevGetQNXPresentSupportKHR) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| ASSERT_DEATH(env.vulkan_functions.PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX(bad_physical_dev, 0, nullptr), |
| "vkGetPhysicalDeviceScreenPresentationSupportQNX: Invalid instance " |
| "\\[VUID-vkGetPhysicalDeviceScreenPresentationSupportQNX-instance-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_SCREEN_QNX |
| |
| #if defined(VK_USE_PLATFORM_WAYLAND_KHR) |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevWaylandPresentSupportKHR) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceWaylandPresentationSupportKHR(bad_physical_dev, 0, nullptr), |
| "vkGetPhysicalDeviceWaylandPresentationSupportKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-physicalDevice-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_WAYLAND_KHR |
| |
| #if defined(VK_USE_PLATFORM_WIN32_KHR) |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevWin32PresentSupportKHR) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceWin32PresentationSupportKHR(bad_physical_dev, 0), |
| "vkGetPhysicalDeviceWin32PresentationSupportKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-physicalDevice-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_WIN32_KHR |
| |
| #if defined(VK_USE_PLATFORM_XCB_KHR) |
| TEST(LoaderHandleValidTests, BadPhysDevGetXCBPresentSupportKHR) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| xcb_visualid_t visual = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceXcbPresentationSupportKHR(bad_physical_dev, 0, nullptr, visual), |
| "vkGetPhysicalDeviceXcbPresentationSupportKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-physicalDevice-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_XCB_KHR |
| |
| #if defined(VK_USE_PLATFORM_XLIB_KHR) |
| TEST(LoaderHandleValidTests, BadPhysDevGetXlibPresentSupportKHR) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| |
| VisualID visual = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceXlibPresentationSupportKHR(bad_physical_dev, 0, nullptr, visual), |
| "vkGetPhysicalDeviceXlibPresentationSupportKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-physicalDevice-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_XLIB_KHR |
| |
| InstWrapper setup_BadPhysDev_env(FrameworkEnvironment& env, std::vector<const char*> exts) { |
| std::vector<Extension> ext_modified; |
| for (const auto& ext : exts) { |
| ext_modified.push_back(Extension{ext}); |
| } |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)) |
| .add_instance_extensions(ext_modified) |
| .setup_WSI() |
| .add_physical_device("physical_device_0"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.add_extensions(exts); |
| instance.CheckCreate(); |
| return instance; |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPropsKHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayPropertiesKHR(bad_physical_dev, &count, nullptr), |
| "vkGetPhysicalDeviceDisplayPropertiesKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPlanePropsKHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayPlanePropertiesKHR(bad_physical_dev, &count, nullptr), |
| "vkGetPhysicalDeviceDisplayPlanePropertiesKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneSupportedDisplaysKHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetDisplayPlaneSupportedDisplaysKHR(bad_physical_dev, 0, &count, nullptr), |
| "vkGetDisplayPlaneSupportedDisplaysKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetDisplayPlaneSupportedDisplaysKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetDisplayModePropsKHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH( |
| env.vulkan_functions.vkGetDisplayModePropertiesKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr), |
| "vkGetDisplayModePropertiesKHR: Invalid physicalDevice \\[VUID-vkGetDisplayModePropertiesKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevCreateDisplayModeKHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| VkDisplayModeCreateInfoKHR create_info = {}; |
| create_info.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR; |
| create_info.pNext = nullptr; |
| VkDisplayModeKHR display_mode; |
| ASSERT_DEATH( |
| env.vulkan_functions.vkCreateDisplayModeKHR(bad_physical_dev, VK_NULL_HANDLE, &create_info, nullptr, &display_mode), |
| "vkCreateDisplayModeKHR: Invalid physicalDevice \\[VUID-vkCreateDisplayModeKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneCapsKHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| VkDisplayPlaneCapabilitiesKHR caps = {}; |
| ASSERT_DEATH(env.vulkan_functions.vkGetDisplayPlaneCapabilitiesKHR(bad_physical_dev, VK_NULL_HANDLE, 0, &caps), |
| "vkGetDisplayPlaneCapabilitiesKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetDisplayPlaneCapabilitiesKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevPresentRectsKHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDevicePresentRectanglesKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr), |
| "vkGetPhysicalDevicePresentRectanglesKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDevicePresentRectanglesKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayProps2KHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayProperties2KHR(bad_physical_dev, &count, nullptr), |
| "vkGetPhysicalDeviceDisplayProperties2KHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceDisplayProperties2KHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPlaneProps2KHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayPlaneProperties2KHR(bad_physical_dev, &count, nullptr), |
| "vkGetPhysicalDeviceDisplayPlaneProperties2KHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetDisplayModeProps2KHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetDisplayModeProperties2KHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr), |
| "vkGetDisplayModeProperties2KHR: Invalid physicalDevice " |
| "\\[VUID-vkGetDisplayModeProperties2KHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneCaps2KHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| VkDisplayPlaneInfo2KHR disp_plane_info = {}; |
| disp_plane_info.sType = VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR; |
| disp_plane_info.pNext = nullptr; |
| VkDisplayPlaneCapabilities2KHR caps = {}; |
| ASSERT_DEATH(env.vulkan_functions.vkGetDisplayPlaneCapabilities2KHR(bad_physical_dev, &disp_plane_info, &caps), |
| "vkGetDisplayPlaneCapabilities2KHR: Invalid physicalDevice " |
| "\\[VUID-vkGetDisplayPlaneCapabilities2KHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceCaps2KHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_surface_capabilities2"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| VkPhysicalDeviceSurfaceInfo2KHR phys_dev_surf_info = {}; |
| phys_dev_surf_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR; |
| phys_dev_surf_info.pNext = nullptr; |
| VkSurfaceCapabilities2KHR caps = {}; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceCapabilities2KHR(bad_physical_dev, &phys_dev_surf_info, &caps), |
| "vkGetPhysicalDeviceSurfaceCapabilities2KHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceFormats2KHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_surface_capabilities2"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| VkPhysicalDeviceSurfaceInfo2KHR phys_dev_surf_info = {}; |
| phys_dev_surf_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR; |
| phys_dev_surf_info.pNext = nullptr; |
| uint32_t count = 0; |
| ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceFormats2KHR(bad_physical_dev, &phys_dev_surf_info, &count, nullptr), |
| "vkGetPhysicalDeviceSurfaceFormats2KHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevEnumPhysDevQueueFamilyPerfQueryCountersKHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR pfn = |
| instance.load("vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"); |
| ASSERT_NE(pfn, nullptr); |
| ASSERT_DEATH(pfn(bad_physical_dev, 0, &count, nullptr, nullptr), |
| "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR: Invalid physicalDevice " |
| "\\[VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamilyPerfQueryPassesKHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| VkQueryPoolPerformanceCreateInfoKHR create_info = {}; |
| create_info.sType = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR; |
| create_info.pNext = nullptr; |
| uint32_t count = 0; |
| PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR pfn = |
| instance.load("vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"); |
| ASSERT_NE(pfn, nullptr); |
| ASSERT_DEATH(pfn(bad_physical_dev, &create_info, &count), |
| "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFragmentShadingRatesKHR) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| uint32_t count = 0; |
| PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR pfn = instance.load("vkGetPhysicalDeviceFragmentShadingRatesKHR"); |
| ASSERT_NE(pfn, nullptr); |
| ASSERT_DEATH(pfn(bad_physical_dev, &count, nullptr), |
| "vkGetPhysicalDeviceFragmentShadingRatesKHR: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceFragmentShadingRatesKHR-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevMSPropsEXT) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| VkMultisamplePropertiesEXT props = {}; |
| PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT pfn = instance.load("vkGetPhysicalDeviceMultisamplePropertiesEXT"); |
| ASSERT_NE(pfn, nullptr); |
| ASSERT_DEATH(pfn(bad_physical_dev, VK_SAMPLE_COUNT_1_BIT, &props), |
| "vkGetPhysicalDeviceMultisamplePropertiesEXT: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevAcquireDrmDisplayEXT) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_drm_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| PFN_vkAcquireDrmDisplayEXT pfn = instance.load("vkAcquireDrmDisplayEXT"); |
| ASSERT_NE(pfn, nullptr); |
| ASSERT_DEATH(pfn(bad_physical_dev, 0, VK_NULL_HANDLE), |
| "vkAcquireDrmDisplayEXT: Invalid physicalDevice \\[VUID-vkAcquireDrmDisplayEXT-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetDrmDisplayEXT) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_drm_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| PFN_vkGetDrmDisplayEXT pfn = instance.load("vkGetDrmDisplayEXT"); |
| ASSERT_NE(pfn, nullptr); |
| ASSERT_DEATH(pfn(bad_physical_dev, 0, 0, VK_NULL_HANDLE), |
| "vkGetDrmDisplayEXT: Invalid physicalDevice " |
| "\\[VUID-vkGetDrmDisplayEXT-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevReleaseDisplayEXT) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_direct_mode_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| PFN_vkReleaseDisplayEXT pfn = instance.load("vkReleaseDisplayEXT"); |
| ASSERT_NE(pfn, nullptr); |
| ASSERT_DEATH(pfn(bad_physical_dev, VK_NULL_HANDLE), |
| "vkReleaseDisplayEXT: Invalid physicalDevice \\[VUID-vkReleaseDisplayEXT-physicalDevice-parameter\\]"); |
| } |
| |
| #if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT) |
| TEST(LoaderHandleValidTests, BadPhysDevAcquireXlibDisplayEXT) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_xlib_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| PFN_vkAcquireXlibDisplayEXT pfn = instance.load("vkAcquireXlibDisplayEXT"); |
| ASSERT_NE(pfn, nullptr); |
| ASSERT_DEATH(pfn(bad_physical_dev, nullptr, VK_NULL_HANDLE), |
| "vkAcquireXlibDisplayEXT: Invalid physicalDevice \\[VUID-vkAcquireXlibDisplayEXT-physicalDevice-parameter\\]"); |
| } |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetRandROutputDisplayEXT) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_xlib_display"}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| RROutput rrout = {}; |
| VkDisplayKHR disp; |
| PFN_vkGetRandROutputDisplayEXT pfn = instance.load("vkGetRandROutputDisplayEXT"); |
| ASSERT_NE(pfn, nullptr); |
| ASSERT_DEATH( |
| pfn(bad_physical_dev, nullptr, rrout, &disp), |
| "vkGetRandROutputDisplayEXT: Invalid physicalDevice \\[VUID-vkGetRandROutputDisplayEXT-physicalDevice-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT |
| |
| #if defined(VK_USE_PLATFORM_WIN32_KHR) |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfacePresentModes2EXT) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.CheckCreate(); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| VkPhysicalDeviceSurfaceInfo2KHR phys_dev_surf_info = {}; |
| phys_dev_surf_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR; |
| phys_dev_surf_info.pNext = nullptr; |
| uint32_t count = 0; |
| PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT pfn = instance.load("vkGetPhysicalDeviceSurfacePresentModes2EXT"); |
| ASSERT_NE(pfn, nullptr); |
| ASSERT_DEATH(pfn(bad_physical_dev, &phys_dev_surf_info, &count, nullptr), |
| "vkGetPhysicalDeviceSurfacePresentModes2EXT: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-physicalDevice-parameter\\]"); |
| } |
| #endif // VK_USE_PLATFORM_WIN32_KHR |
| |
| TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevToolPropertiesEXT) { |
| FrameworkEnvironment env{}; |
| auto instance = setup_BadPhysDev_env(env, {}); |
| |
| auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>(); |
| PFN_vkGetPhysicalDeviceToolPropertiesEXT pfn = instance.load("vkGetPhysicalDeviceToolPropertiesEXT"); |
| ASSERT_NE(pfn, nullptr); |
| uint32_t count = 0; |
| ASSERT_DEATH(pfn(bad_physical_dev, &count, nullptr), |
| "vkGetPhysicalDeviceToolPropertiesEXT: Invalid physicalDevice " |
| "\\[VUID-vkGetPhysicalDeviceToolPropertiesEXT-physicalDevice-parameter\\]"); |
| } |
| |
| #if defined(VK_USE_PLATFORM_ANDROID_KHR) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingAndroidSurface) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkAndroidSurfaceCreateInfoKHR surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateAndroidSurfaceKHR pfn_CreateSurface = instance.load("vkCreateAndroidSurfaceKHR"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_ANDROID_KHR |
| |
| #if defined(VK_USE_PLATFORM_DIRECTFB_EXT) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingDirectFBSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkDirectFBSurfaceCreateInfoEXT surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateDirectFBSurfaceEXT pfn_CreateSurface = instance.load("vkCreateDirectFBSurfaceEXT"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_DIRECTFB_EXT |
| |
| #if defined(VK_USE_PLATFORM_FUCHSIA) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingFuchsiaSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkImagePipeSurfaceCreateInfoFUCHSIA surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateImagePipeSurfaceFUCHSIA pfn_CreateSurface = instance.load("vkCreateImagePipeSurfaceFUCHSIA"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_FUCHSIA |
| |
| #if defined(VK_USE_PLATFORM_GGP) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingGGPSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkStreamDescriptorSurfaceCreateInfoGGP surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateStreamDescriptorSurfaceGGP pfn_CreateSurface = instance.load("vkCreateStreamDescriptorSurfaceGGP"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_GGP |
| |
| #if defined(VK_USE_PLATFORM_IOS_MVK) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingIOSSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkIOSSurfaceCreateInfoMVK surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateIOSSurfaceMVK pfn_CreateSurface = instance.load("vkCreateIOSSurfaceMVK"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_IOS_MVK |
| |
| #if defined(VK_USE_PLATFORM_MACOS_MVK) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingMacOSSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_MACOS_MVK"); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI("VK_USE_PLATFORM_MACOS_MVK"); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkMacOSSurfaceCreateInfoMVK surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateMacOSSurfaceMVK pfn_CreateSurface = instance.load("vkCreateMacOSSurfaceMVK"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_MACOS_MVK |
| |
| #if defined(VK_USE_PLATFORM_METAL_EXT) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingMetalSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_METAL_EXT"); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI("VK_USE_PLATFORM_METAL_EXT"); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkMetalSurfaceCreateInfoEXT surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateMetalSurfaceEXT pfn_CreateSurface = instance.load("vkCreateMetalSurfaceEXT"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_METAL_EXT |
| |
| #if defined(VK_USE_PLATFORM_SCREEN_QNX) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingQNXSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkScreenSurfaceCreateInfoQNX surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateScreenSurfaceQNX pfn_CreateSurface = instance.load("vkCreateScreenSurfaceQNX"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_SCREEN_QNX |
| |
| #if defined(VK_USE_PLATFORM_VI_NN) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingViNNSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkViSurfaceCreateInfoNN surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateViSurfaceNN pfn_CreateSurface = instance.load("vkCreateViSurfaceNN"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_VI_NN |
| |
| #if defined(VK_USE_PLATFORM_WAYLAND_KHR) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingWaylandSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_WAYLAND_KHR"); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI("VK_USE_PLATFORM_WAYLAND_KHR"); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkWaylandSurfaceCreateInfoKHR surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateWaylandSurfaceKHR pfn_CreateSurface = instance.load("vkCreateWaylandSurfaceKHR"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_WAYLAND_KHR |
| |
| #if defined(VK_USE_PLATFORM_WIN32_KHR) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingWin32Surf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkWin32SurfaceCreateInfoKHR surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateWin32SurfaceKHR pfn_CreateSurface = instance.load("vkCreateWin32SurfaceKHR"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_WIN32_KHR |
| |
| #if defined(VK_USE_PLATFORM_XCB_KHR) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingXCBSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI(); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI(); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkXcbSurfaceCreateInfoKHR surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateXcbSurfaceKHR pfn_CreateSurface = instance.load("vkCreateXcbSurfaceKHR"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_XCB_KHR |
| |
| #if defined(VK_USE_PLATFORM_XLIB_KHR) |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingXlibSurf) { |
| FrameworkEnvironment env{}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_XLIB_KHR"); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.setup_WSI("VK_USE_PLATFORM_XLIB_KHR"); |
| // |
| for (auto& ext : instance.create_info.enabled_extensions) { |
| std::cout << ext << "\n"; |
| } |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkXlibSurfaceCreateInfoKHR surf_create_info = {}; |
| surf_create_info.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR; |
| surf_create_info.pNext = nullptr; |
| VkSurfaceKHR created_surface = VK_NULL_HANDLE; |
| PFN_vkCreateXlibSurfaceKHR pfn_CreateSurface = instance.load("vkCreateXlibSurfaceKHR"); |
| ASSERT_NE(pfn_CreateSurface, nullptr); |
| PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR"); |
| ASSERT_NE(pfn_DestroySurface, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface)); |
| pfn_DestroySurface(instance, created_surface, nullptr); |
| } |
| #endif // VK_USE_PLATFORM_XLIB_KHR |
| |
| VKAPI_ATTR VkBool32 VKAPI_CALL JunkDebugUtilsCallback([[maybe_unused]] VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, |
| [[maybe_unused]] VkDebugUtilsMessageTypeFlagsEXT messageTypes, |
| [[maybe_unused]] const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, |
| [[maybe_unused]] void* pUserData) { |
| // This is just a stub callback in case the loader or any other layer triggers it. |
| return VK_FALSE; |
| } |
| |
| TEST(LoaderHandleValidTests, VerifyHandleWrappingDebugUtilsMessenger) { |
| FrameworkEnvironment env{}; |
| Extension ext{"VK_EXT_debug_utils"}; |
| env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_instance_extensions({ext}); |
| |
| const char* wrap_objects_name = "WrapObjectsLayer"; |
| env.add_explicit_layer(ManifestLayer{}.add_layer( |
| ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)), |
| "wrap_objects_layer.json"); |
| |
| InstWrapper instance(env.vulkan_functions); |
| instance.create_info.add_extension("VK_EXT_debug_utils"); |
| instance.create_info.add_layer(wrap_objects_name); |
| instance.CheckCreate(); |
| |
| VkDebugUtilsMessengerCreateInfoEXT debug_messenger_create_info = {}; |
| debug_messenger_create_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; |
| debug_messenger_create_info.pNext = nullptr; |
| debug_messenger_create_info.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; |
| debug_messenger_create_info.messageType = |
| VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT; |
| debug_messenger_create_info.pfnUserCallback = reinterpret_cast<PFN_vkDebugUtilsMessengerCallbackEXT>(JunkDebugUtilsCallback); |
| VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE; |
| PFN_vkCreateDebugUtilsMessengerEXT pfn_CreateMessenger = instance.load("vkCreateDebugUtilsMessengerEXT"); |
| ASSERT_NE(pfn_CreateMessenger, nullptr); |
| PFN_vkDestroyDebugUtilsMessengerEXT pfn_DestroyMessenger = instance.load("vkDestroyDebugUtilsMessengerEXT"); |
| ASSERT_NE(pfn_DestroyMessenger, nullptr); |
| ASSERT_EQ(VK_SUCCESS, pfn_CreateMessenger(instance, &debug_messenger_create_info, nullptr, &messenger)); |
| pfn_DestroyMessenger(instance, messenger, nullptr); |
| } |