/* * 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 * Mark Young */ #include "test_environment.h" // ---- Invalid Instance tests struct BadData { uint64_t bad_array[3] = {0x123456789AB, 0x23456789AB1, 0x9876543210AB}; }; template T get_bad_handle() { static BadData my_bad_data; return reinterpret_cast(static_cast(&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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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 exts) { std::vector 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(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); }