15db71995Sopenharmony_ci/*
25db71995Sopenharmony_ci * Copyright (c) 2021-2022 The Khronos Group Inc.
35db71995Sopenharmony_ci * Copyright (c) 2021-2022 Valve Corporation
45db71995Sopenharmony_ci * Copyright (c) 2021-2022 LunarG, Inc.
55db71995Sopenharmony_ci *
65db71995Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a copy
75db71995Sopenharmony_ci * of this software and/or associated documentation files (the "Materials"), to
85db71995Sopenharmony_ci * deal in the Materials without restriction, including without limitation the
95db71995Sopenharmony_ci * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
105db71995Sopenharmony_ci * sell copies of the Materials, and to permit persons to whom the Materials are
115db71995Sopenharmony_ci * furnished to do so, subject to the following conditions:
125db71995Sopenharmony_ci *
135db71995Sopenharmony_ci * The above copyright notice(s) and this permission notice shall be included in
145db71995Sopenharmony_ci * all copies or substantial portions of the Materials.
155db71995Sopenharmony_ci *
165db71995Sopenharmony_ci * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
175db71995Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
185db71995Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
195db71995Sopenharmony_ci *
205db71995Sopenharmony_ci * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
215db71995Sopenharmony_ci * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
225db71995Sopenharmony_ci * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
235db71995Sopenharmony_ci * USE OR OTHER DEALINGS IN THE MATERIALS.
245db71995Sopenharmony_ci *
255db71995Sopenharmony_ci * Author(s): Charles Giessen <charles@lunarg.com>
265db71995Sopenharmony_ci *            Mark Young <marky@lunarg.com>
275db71995Sopenharmony_ci */
285db71995Sopenharmony_ci
295db71995Sopenharmony_ci#include "test_environment.h"
305db71995Sopenharmony_ci
315db71995Sopenharmony_ci// ---- Invalid Instance tests
325db71995Sopenharmony_ci
335db71995Sopenharmony_cistruct BadData {
345db71995Sopenharmony_ci    uint64_t bad_array[3] = {0x123456789AB, 0x23456789AB1, 0x9876543210AB};
355db71995Sopenharmony_ci};
365db71995Sopenharmony_citemplate <typename T>
375db71995Sopenharmony_ciT get_bad_handle() {
385db71995Sopenharmony_ci    static BadData my_bad_data;
395db71995Sopenharmony_ci    return reinterpret_cast<T>(static_cast<void*>(&my_bad_data));
405db71995Sopenharmony_ci}
415db71995Sopenharmony_ci
425db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstEnumPhysDevices) {
435db71995Sopenharmony_ci    FrameworkEnvironment env{};
445db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
455db71995Sopenharmony_ci
465db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
475db71995Sopenharmony_ci    instance.CheckCreate();
485db71995Sopenharmony_ci
495db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
505db71995Sopenharmony_ci    uint32_t returned_physical_count = 0;
515db71995Sopenharmony_ci
525db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkEnumeratePhysicalDevices(bad_instance, &returned_physical_count, nullptr),
535db71995Sopenharmony_ci                 "vkEnumeratePhysicalDevices: Invalid instance \\[VUID-vkEnumeratePhysicalDevices-instance-parameter\\]");
545db71995Sopenharmony_ci}
555db71995Sopenharmony_ci
565db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstGetInstProcAddr) {
575db71995Sopenharmony_ci    FrameworkEnvironment env{};
585db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
595db71995Sopenharmony_ci
605db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
615db71995Sopenharmony_ci    instance.CheckCreate();
625db71995Sopenharmony_ci
635db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
645db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetInstanceProcAddr(bad_instance, "vkGetBufferDeviceAddress"),
655db71995Sopenharmony_ci                 "vkGetInstanceProcAddr: Invalid instance \\[VUID-vkGetInstanceProcAddr-instance-parameter\\]");
665db71995Sopenharmony_ci}
675db71995Sopenharmony_ci
685db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstDestroyInstance) {
695db71995Sopenharmony_ci    FrameworkEnvironment env{};
705db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
715db71995Sopenharmony_ci
725db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
735db71995Sopenharmony_ci    instance.CheckCreate();
745db71995Sopenharmony_ci
755db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
765db71995Sopenharmony_ci
775db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkDestroyInstance(bad_instance, nullptr),
785db71995Sopenharmony_ci                 "vkDestroyInstance: Invalid instance \\[VUID-vkDestroyInstance-instance-parameter\\]");
795db71995Sopenharmony_ci}
805db71995Sopenharmony_ci
815db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstDestroySurface) {
825db71995Sopenharmony_ci    FrameworkEnvironment env{};
835db71995Sopenharmony_ci    Extension first_ext{"VK_KHR_surface"};
845db71995Sopenharmony_ci    Extension second_ext{"VK_EXT_headless_surface"};
855db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
865db71995Sopenharmony_ci        .add_instance_extensions({first_ext, second_ext})
875db71995Sopenharmony_ci        .add_physical_device("physical_device_0");
885db71995Sopenharmony_ci
895db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
905db71995Sopenharmony_ci    instance.create_info.add_extension(first_ext.extensionName.c_str());
915db71995Sopenharmony_ci    instance.CheckCreate();
925db71995Sopenharmony_ci
935db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
945db71995Sopenharmony_ci
955db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkDestroySurfaceKHR(bad_instance, VK_NULL_HANDLE, nullptr),
965db71995Sopenharmony_ci                 "vkDestroySurfaceKHR: Invalid instance \\[VUID-vkDestroySurfaceKHR-instance-parameter\\]");
975db71995Sopenharmony_ci}
985db71995Sopenharmony_ci
995db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateHeadlessSurf) {
1005db71995Sopenharmony_ci    FrameworkEnvironment env{};
1015db71995Sopenharmony_ci    Extension first_ext{"VK_KHR_surface"};
1025db71995Sopenharmony_ci    Extension second_ext{"VK_EXT_headless_surface"};
1035db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
1045db71995Sopenharmony_ci        .add_instance_extensions({first_ext, second_ext})
1055db71995Sopenharmony_ci        .add_physical_device("physical_device_0");
1065db71995Sopenharmony_ci
1075db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
1085db71995Sopenharmony_ci    instance.create_info.add_extensions({first_ext.extensionName.c_str(), second_ext.extensionName.c_str()});
1095db71995Sopenharmony_ci    instance.CheckCreate();
1105db71995Sopenharmony_ci
1115db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
1125db71995Sopenharmony_ci
1135db71995Sopenharmony_ci    VkHeadlessSurfaceCreateInfoEXT surf_create_info = {};
1145db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT;
1155db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
1165db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
1175db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateHeadlessSurfaceEXT(bad_instance, &surf_create_info, nullptr, &created_surface),
1185db71995Sopenharmony_ci                 "vkCreateHeadlessSurfaceEXT: Invalid instance \\[VUID-vkCreateHeadlessSurfaceEXT-instance-parameter\\]");
1195db71995Sopenharmony_ci}
1205db71995Sopenharmony_ci
1215db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateDisplayPlaneSurf) {
1225db71995Sopenharmony_ci    FrameworkEnvironment env{};
1235db71995Sopenharmony_ci    Extension first_ext{"VK_KHR_surface"};
1245db71995Sopenharmony_ci    Extension second_ext{"VK_KHR_display"};
1255db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
1265db71995Sopenharmony_ci        .add_instance_extensions({first_ext, second_ext})
1275db71995Sopenharmony_ci        .add_physical_device("physical_device_0");
1285db71995Sopenharmony_ci
1295db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
1305db71995Sopenharmony_ci    instance.create_info.add_extensions({first_ext.extensionName.c_str(), second_ext.extensionName.c_str()});
1315db71995Sopenharmony_ci    instance.CheckCreate();
1325db71995Sopenharmony_ci
1335db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
1345db71995Sopenharmony_ci
1355db71995Sopenharmony_ci    VkDisplaySurfaceCreateInfoKHR surf_create_info = {};
1365db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR;
1375db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
1385db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
1395db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateDisplayPlaneSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface),
1405db71995Sopenharmony_ci                 "vkCreateDisplayPlaneSurfaceKHR: Invalid instance \\[VUID-vkCreateDisplayPlaneSurfaceKHR-instance-parameter\\]");
1415db71995Sopenharmony_ci}
1425db71995Sopenharmony_ci
1435db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_ANDROID_KHR)
1445db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateAndroidSurf) {
1455db71995Sopenharmony_ci    FrameworkEnvironment env{};
1465db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
1475db71995Sopenharmony_ci
1485db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
1495db71995Sopenharmony_ci    instance.create_info.setup_WSI();
1505db71995Sopenharmony_ci    instance.CheckCreate();
1515db71995Sopenharmony_ci
1525db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
1535db71995Sopenharmony_ci
1545db71995Sopenharmony_ci    VkAndroidSurfaceCreateInfoKHR surf_create_info = {};
1555db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
1565db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
1575db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
1585db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateAndroidSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface),
1595db71995Sopenharmony_ci                 "vkCreateAndroidSurfaceKHR: Invalid instance \\[VUID-vkCreateAndroidSurfaceKHR-instance-parameter\\]");
1605db71995Sopenharmony_ci}
1615db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_ANDROID_KHR
1625db71995Sopenharmony_ci
1635db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_DIRECTFB_EXT)
1645db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateDirectFBSurf) {
1655db71995Sopenharmony_ci    FrameworkEnvironment env{};
1665db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
1675db71995Sopenharmony_ci
1685db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
1695db71995Sopenharmony_ci    instance.create_info.setup_WSI();
1705db71995Sopenharmony_ci    instance.CheckCreate();
1715db71995Sopenharmony_ci
1725db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
1735db71995Sopenharmony_ci
1745db71995Sopenharmony_ci    VkDirectFBSurfaceCreateInfoEXT surf_create_info = {};
1755db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT;
1765db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
1775db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
1785db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateDirectFBSurfaceEXT(bad_instance, &surf_create_info, nullptr, &created_surface),
1795db71995Sopenharmony_ci                 "vkCreateDirectFBSurfaceEXT: Invalid instance \\[VUID-vkCreateDirectFBSurfaceEXT-instance-parameter\\]");
1805db71995Sopenharmony_ci}
1815db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_DIRECTFB_EXT
1825db71995Sopenharmony_ci
1835db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_FUCHSIA)
1845db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateFuchsiaSurf) {
1855db71995Sopenharmony_ci    FrameworkEnvironment env{};
1865db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
1875db71995Sopenharmony_ci
1885db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
1895db71995Sopenharmony_ci    instance.create_info.setup_WSI();
1905db71995Sopenharmony_ci    instance.CheckCreate();
1915db71995Sopenharmony_ci
1925db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
1935db71995Sopenharmony_ci
1945db71995Sopenharmony_ci    VkImagePipeSurfaceCreateInfoFUCHSIA surf_create_info = {};
1955db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA;
1965db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
1975db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
1985db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateImagePipeSurfaceFUCHSIA(bad_instance, &surf_create_info, nullptr, &created_surface),
1995db71995Sopenharmony_ci                 "vkCreateImagePipeSurfaceFUCHSIA: Invalid instance \\[VUID-vkCreateImagePipeSurfaceFUCHSIA-instance-parameter\\]");
2005db71995Sopenharmony_ci}
2015db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_FUCHSIA
2025db71995Sopenharmony_ci
2035db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_GGP)
2045db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateGGPSurf) {
2055db71995Sopenharmony_ci    FrameworkEnvironment env{};
2065db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
2075db71995Sopenharmony_ci
2085db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
2095db71995Sopenharmony_ci    instance.create_info.setup_WSI();
2105db71995Sopenharmony_ci    instance.CheckCreate();
2115db71995Sopenharmony_ci
2125db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
2135db71995Sopenharmony_ci
2145db71995Sopenharmony_ci    VkStreamDescriptorSurfaceCreateInfoGGP surf_create_info = {};
2155db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP;
2165db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
2175db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
2185db71995Sopenharmony_ci    ASSERT_DEATH(
2195db71995Sopenharmony_ci        env.vulkan_functions.vkCreateStreamDescriptorSurfaceGGP(bad_instance, &surf_create_info, nullptr, &created_surface),
2205db71995Sopenharmony_ci        "vkCreateStreamDescriptorSurfaceGGP: Invalid instance \\[VUID-vkCreateStreamDescriptorSurfaceGGP-instance-parameter\\]");
2215db71995Sopenharmony_ci}
2225db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_GGP
2235db71995Sopenharmony_ci
2245db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_IOS_MVK)
2255db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateIOSSurf) {
2265db71995Sopenharmony_ci    FrameworkEnvironment env{};
2275db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
2285db71995Sopenharmony_ci
2295db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
2305db71995Sopenharmony_ci    instance.create_info.setup_WSI();
2315db71995Sopenharmony_ci    instance.CheckCreate();
2325db71995Sopenharmony_ci
2335db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
2345db71995Sopenharmony_ci
2355db71995Sopenharmony_ci    VkIOSSurfaceCreateInfoMVK surf_create_info = {};
2365db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK;
2375db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
2385db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
2395db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateIOSSurfaceMVK(bad_instance, &surf_create_info, nullptr, &created_surface),
2405db71995Sopenharmony_ci                 "vkCreateIOSSurfaceMVK: Invalid instance \\[VUID-vkCreateIOSSurfaceMVK-instance-parameter\\]");
2415db71995Sopenharmony_ci}
2425db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_IOS_MVK
2435db71995Sopenharmony_ci
2445db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_MACOS_MVK)
2455db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateMacOSSurf) {
2465db71995Sopenharmony_ci    FrameworkEnvironment env{};
2475db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
2485db71995Sopenharmony_ci
2495db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
2505db71995Sopenharmony_ci    instance.create_info.setup_WSI();
2515db71995Sopenharmony_ci    instance.CheckCreate();
2525db71995Sopenharmony_ci
2535db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
2545db71995Sopenharmony_ci
2555db71995Sopenharmony_ci    VkMacOSSurfaceCreateInfoMVK surf_create_info = {};
2565db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
2575db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
2585db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
2595db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateMacOSSurfaceMVK(bad_instance, &surf_create_info, nullptr, &created_surface),
2605db71995Sopenharmony_ci                 "vkCreateMacOSSurfaceMVK: Invalid instance \\[VUID-vkCreateMacOSSurfaceMVK-instance-parameter\\]");
2615db71995Sopenharmony_ci}
2625db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_MACOS_MVK
2635db71995Sopenharmony_ci
2645db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_METAL_EXT)
2655db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateMetalSurf) {
2665db71995Sopenharmony_ci    FrameworkEnvironment env{};
2675db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
2685db71995Sopenharmony_ci
2695db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
2705db71995Sopenharmony_ci    instance.create_info.setup_WSI();
2715db71995Sopenharmony_ci    instance.CheckCreate();
2725db71995Sopenharmony_ci
2735db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
2745db71995Sopenharmony_ci
2755db71995Sopenharmony_ci    VkMetalSurfaceCreateInfoEXT surf_create_info = {};
2765db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
2775db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
2785db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
2795db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateMetalSurfaceEXT(bad_instance, &surf_create_info, nullptr, &created_surface),
2805db71995Sopenharmony_ci                 "vkCreateMetalSurfaceEXT: Invalid instance \\[VUID-vkCreateMetalSurfaceEXT-instance-parameter\\]");
2815db71995Sopenharmony_ci}
2825db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_METAL_EXT
2835db71995Sopenharmony_ci
2845db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_SCREEN_QNX)
2855db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateQNXSurf) {
2865db71995Sopenharmony_ci    FrameworkEnvironment env{};
2875db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
2885db71995Sopenharmony_ci
2895db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
2905db71995Sopenharmony_ci    instance.create_info.setup_WSI();
2915db71995Sopenharmony_ci    instance.CheckCreate();
2925db71995Sopenharmony_ci
2935db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
2945db71995Sopenharmony_ci
2955db71995Sopenharmony_ci    VkScreenSurfaceCreateInfoQNX surf_create_info = {};
2965db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX;
2975db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
2985db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
2995db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateScreenSurfaceQNX(bad_instance, &surf_create_info, nullptr, &created_surface),
3005db71995Sopenharmony_ci                 "vkCreateScreenSurfaceQNX: Invalid instance \\[VUID-vkCreateScreenSurfaceQNX-instance-parameter\\]");
3015db71995Sopenharmony_ci    // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown
3025db71995Sopenharmony_ci}
3035db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_SCREEN_QNX
3045db71995Sopenharmony_ci
3055db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_VI_NN)
3065db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateViNNSurf) {
3075db71995Sopenharmony_ci    FrameworkEnvironment env{};
3085db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
3095db71995Sopenharmony_ci
3105db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
3115db71995Sopenharmony_ci    instance.create_info.setup_WSI();
3125db71995Sopenharmony_ci    instance.CheckCreate();
3135db71995Sopenharmony_ci
3145db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
3155db71995Sopenharmony_ci
3165db71995Sopenharmony_ci    VkViSurfaceCreateInfoNN surf_create_info = {};
3175db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN;
3185db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
3195db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
3205db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateViSurfaceNN(bad_instance, &surf_create_info, nullptr, &created_surface),
3215db71995Sopenharmony_ci                 "vkCreateViSurfaceNN: Invalid instance \\[VUID-vkCreateViSurfaceNN-instance-parameter\\]");
3225db71995Sopenharmony_ci    // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown
3235db71995Sopenharmony_ci}
3245db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_VI_NN
3255db71995Sopenharmony_ci
3265db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_WAYLAND_KHR)
3275db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateWaylandSurf) {
3285db71995Sopenharmony_ci    FrameworkEnvironment env{};
3295db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
3305db71995Sopenharmony_ci
3315db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
3325db71995Sopenharmony_ci    instance.create_info.setup_WSI();
3335db71995Sopenharmony_ci    instance.CheckCreate();
3345db71995Sopenharmony_ci
3355db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
3365db71995Sopenharmony_ci
3375db71995Sopenharmony_ci    VkWaylandSurfaceCreateInfoKHR surf_create_info = {};
3385db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR;
3395db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
3405db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
3415db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateWaylandSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface),
3425db71995Sopenharmony_ci                 "vkCreateWaylandSurfaceKHR: Invalid instance \\[VUID-vkCreateWaylandSurfaceKHR-instance-parameter\\]");
3435db71995Sopenharmony_ci    // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown
3445db71995Sopenharmony_ci}
3455db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_WAYLAND_KHR
3465db71995Sopenharmony_ci
3475db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_WIN32_KHR)
3485db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateWin32Surf) {
3495db71995Sopenharmony_ci    FrameworkEnvironment env{};
3505db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
3515db71995Sopenharmony_ci
3525db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
3535db71995Sopenharmony_ci    instance.create_info.setup_WSI();
3545db71995Sopenharmony_ci    instance.CheckCreate();
3555db71995Sopenharmony_ci
3565db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
3575db71995Sopenharmony_ci
3585db71995Sopenharmony_ci    VkWin32SurfaceCreateInfoKHR surf_create_info = {};
3595db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
3605db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
3615db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
3625db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateWin32SurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface),
3635db71995Sopenharmony_ci                 "vkCreateWin32SurfaceKHR: Invalid instance \\[VUID-vkCreateWin32SurfaceKHR-instance-parameter\\]");
3645db71995Sopenharmony_ci    // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown
3655db71995Sopenharmony_ci}
3665db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_WIN32_KHR
3675db71995Sopenharmony_ci
3685db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_XCB_KHR)
3695db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateXCBSurf) {
3705db71995Sopenharmony_ci    FrameworkEnvironment env{};
3715db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
3725db71995Sopenharmony_ci
3735db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
3745db71995Sopenharmony_ci    instance.create_info.setup_WSI();
3755db71995Sopenharmony_ci    instance.CheckCreate();
3765db71995Sopenharmony_ci
3775db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
3785db71995Sopenharmony_ci
3795db71995Sopenharmony_ci    VkXcbSurfaceCreateInfoKHR surf_create_info = {};
3805db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
3815db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
3825db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
3835db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateXcbSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface),
3845db71995Sopenharmony_ci                 "vkCreateXcbSurfaceKHR: Invalid instance \\[VUID-vkCreateXcbSurfaceKHR-instance-parameter\\]");
3855db71995Sopenharmony_ci    // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown
3865db71995Sopenharmony_ci}
3875db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_XCB_KHR
3885db71995Sopenharmony_ci
3895db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_XLIB_KHR)
3905db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadInstCreateXlibSurf) {
3915db71995Sopenharmony_ci    FrameworkEnvironment env{};
3925db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
3935db71995Sopenharmony_ci
3945db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
3955db71995Sopenharmony_ci    instance.create_info.setup_WSI();
3965db71995Sopenharmony_ci    instance.CheckCreate();
3975db71995Sopenharmony_ci
3985db71995Sopenharmony_ci    auto bad_instance = get_bad_handle<VkInstance>();
3995db71995Sopenharmony_ci
4005db71995Sopenharmony_ci    VkXlibSurfaceCreateInfoKHR surf_create_info = {};
4015db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR;
4025db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
4035db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
4045db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateXlibSurfaceKHR(bad_instance, &surf_create_info, nullptr, &created_surface),
4055db71995Sopenharmony_ci                 "vkCreateXlibSurfaceKHR: Invalid instance \\[VUID-vkCreateXlibSurfaceKHR-instance-parameter\\]");
4065db71995Sopenharmony_ci    // TODO: Look for "invalid instance" in stderr log to make sure correct error is thrown
4075db71995Sopenharmony_ci}
4085db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_XLIB_KHR
4095db71995Sopenharmony_ci
4105db71995Sopenharmony_ci// ---- Invalid Physical Device tests
4115db71995Sopenharmony_ci
4125db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFeature) {
4135db71995Sopenharmony_ci    FrameworkEnvironment env{};
4145db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
4155db71995Sopenharmony_ci        .add_physical_device({})
4165db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
4175db71995Sopenharmony_ci
4185db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
4195db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
4205db71995Sopenharmony_ci    instance.CheckCreate();
4215db71995Sopenharmony_ci
4225db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
4235db71995Sopenharmony_ci
4245db71995Sopenharmony_ci    VkPhysicalDeviceFeatures features = {};
4255db71995Sopenharmony_ci    ASSERT_DEATH(
4265db71995Sopenharmony_ci        env.vulkan_functions.vkGetPhysicalDeviceFeatures(bad_physical_dev, &features),
4275db71995Sopenharmony_ci        "vkGetPhysicalDeviceFeatures: Invalid physicalDevice \\[VUID-vkGetPhysicalDeviceFeatures-physicalDevice-parameter\\]");
4285db71995Sopenharmony_ci}
4295db71995Sopenharmony_ci
4305db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFormatProps) {
4315db71995Sopenharmony_ci    FrameworkEnvironment env{};
4325db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
4335db71995Sopenharmony_ci        .add_physical_device({})
4345db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
4355db71995Sopenharmony_ci
4365db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
4375db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
4385db71995Sopenharmony_ci    instance.CheckCreate();
4395db71995Sopenharmony_ci
4405db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
4415db71995Sopenharmony_ci
4425db71995Sopenharmony_ci    VkFormatProperties format_info = {};
4435db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceFormatProperties(bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM, &format_info),
4445db71995Sopenharmony_ci                 "vkGetPhysicalDeviceFormatProperties: Invalid physicalDevice "
4455db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceFormatProperties-physicalDevice-parameter\\]");
4465db71995Sopenharmony_ci}
4475db71995Sopenharmony_ci
4485db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevImgFormatProps) {
4495db71995Sopenharmony_ci    FrameworkEnvironment env{};
4505db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
4515db71995Sopenharmony_ci        .add_physical_device({})
4525db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
4535db71995Sopenharmony_ci
4545db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
4555db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
4565db71995Sopenharmony_ci    instance.CheckCreate();
4575db71995Sopenharmony_ci
4585db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
4595db71995Sopenharmony_ci
4605db71995Sopenharmony_ci    VkImageFormatProperties format_info = {};
4615db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceImageFormatProperties(bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM,
4625db71995Sopenharmony_ci                                                                               VK_IMAGE_TYPE_2D, VK_IMAGE_TILING_LINEAR,
4635db71995Sopenharmony_ci                                                                               VK_IMAGE_USAGE_STORAGE_BIT, 0, &format_info),
4645db71995Sopenharmony_ci                 "vkGetPhysicalDeviceImageFormatProperties: Invalid physicalDevice "
4655db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceImageFormatProperties-physicalDevice-parameter\\]");
4665db71995Sopenharmony_ci}
4675db71995Sopenharmony_ci
4685db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevProps) {
4695db71995Sopenharmony_ci    FrameworkEnvironment env{};
4705db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
4715db71995Sopenharmony_ci        .add_physical_device({})
4725db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
4735db71995Sopenharmony_ci
4745db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
4755db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
4765db71995Sopenharmony_ci    instance.CheckCreate();
4775db71995Sopenharmony_ci
4785db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
4795db71995Sopenharmony_ci
4805db71995Sopenharmony_ci    VkPhysicalDeviceProperties properties = {};
4815db71995Sopenharmony_ci    ASSERT_DEATH(
4825db71995Sopenharmony_ci        env.vulkan_functions.vkGetPhysicalDeviceProperties(bad_physical_dev, &properties),
4835db71995Sopenharmony_ci        "vkGetPhysicalDeviceProperties: Invalid physicalDevice \\[VUID-vkGetPhysicalDeviceProperties-physicalDevice-parameter\\]");
4845db71995Sopenharmony_ci}
4855db71995Sopenharmony_ci
4865db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamProps) {
4875db71995Sopenharmony_ci    FrameworkEnvironment env{};
4885db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
4895db71995Sopenharmony_ci        .add_physical_device({})
4905db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
4915db71995Sopenharmony_ci
4925db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
4935db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
4945db71995Sopenharmony_ci    instance.CheckCreate();
4955db71995Sopenharmony_ci
4965db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
4975db71995Sopenharmony_ci    uint32_t count = 0;
4985db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties(bad_physical_dev, &count, nullptr),
4995db71995Sopenharmony_ci                 "vkGetPhysicalDeviceQueueFamilyProperties: Invalid physicalDevice "
5005db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceQueueFamilyProperties-physicalDevice-parameter\\]");
5015db71995Sopenharmony_ci}
5025db71995Sopenharmony_ci
5035db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDevMemProps) {
5045db71995Sopenharmony_ci    FrameworkEnvironment env{};
5055db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
5065db71995Sopenharmony_ci        .add_physical_device({})
5075db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
5085db71995Sopenharmony_ci
5095db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
5105db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
5115db71995Sopenharmony_ci    instance.CheckCreate();
5125db71995Sopenharmony_ci
5135db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
5145db71995Sopenharmony_ci
5155db71995Sopenharmony_ci    VkPhysicalDeviceMemoryProperties properties = {};
5165db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceMemoryProperties(bad_physical_dev, &properties),
5175db71995Sopenharmony_ci                 "vkGetPhysicalDeviceMemoryProperties: Invalid physicalDevice "
5185db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceMemoryProperties-physicalDevice-parameter\\]");
5195db71995Sopenharmony_ci}
5205db71995Sopenharmony_ci
5215db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevCreateDevice) {
5225db71995Sopenharmony_ci    FrameworkEnvironment env{};
5235db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
5245db71995Sopenharmony_ci        .add_physical_device({})
5255db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
5265db71995Sopenharmony_ci
5275db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
5285db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
5295db71995Sopenharmony_ci    instance.CheckCreate();
5305db71995Sopenharmony_ci
5315db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
5325db71995Sopenharmony_ci
5335db71995Sopenharmony_ci    float queue_priorities[3] = {0.0f, 0.5f, 1.0f};
5345db71995Sopenharmony_ci    VkDeviceQueueCreateInfo dev_queue_create_info = {};
5355db71995Sopenharmony_ci    dev_queue_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
5365db71995Sopenharmony_ci    dev_queue_create_info.pNext = nullptr;
5375db71995Sopenharmony_ci    dev_queue_create_info.flags = 0;
5385db71995Sopenharmony_ci    dev_queue_create_info.queueFamilyIndex = 0;
5395db71995Sopenharmony_ci    dev_queue_create_info.queueCount = 1;
5405db71995Sopenharmony_ci    dev_queue_create_info.pQueuePriorities = queue_priorities;
5415db71995Sopenharmony_ci    VkDeviceCreateInfo dev_create_info = {};
5425db71995Sopenharmony_ci    dev_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
5435db71995Sopenharmony_ci    dev_create_info.pNext = nullptr;
5445db71995Sopenharmony_ci    dev_create_info.flags = 0;
5455db71995Sopenharmony_ci    dev_create_info.queueCreateInfoCount = 1;
5465db71995Sopenharmony_ci    dev_create_info.pQueueCreateInfos = &dev_queue_create_info;
5475db71995Sopenharmony_ci    dev_create_info.enabledLayerCount = 0;
5485db71995Sopenharmony_ci    dev_create_info.ppEnabledLayerNames = nullptr;
5495db71995Sopenharmony_ci    dev_create_info.enabledExtensionCount = 0;
5505db71995Sopenharmony_ci    dev_create_info.ppEnabledExtensionNames = nullptr;
5515db71995Sopenharmony_ci    dev_create_info.pEnabledFeatures = nullptr;
5525db71995Sopenharmony_ci    VkDevice created_dev = VK_NULL_HANDLE;
5535db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkCreateDevice(bad_physical_dev, &dev_create_info, nullptr, &created_dev),
5545db71995Sopenharmony_ci                 "vkCreateDevice: Invalid physicalDevice \\[VUID-vkCreateDevice-physicalDevice-parameter\\]");
5555db71995Sopenharmony_ci}
5565db71995Sopenharmony_ci
5575db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevEnumDevExtProps) {
5585db71995Sopenharmony_ci    FrameworkEnvironment env{};
5595db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
5605db71995Sopenharmony_ci        .add_physical_device({})
5615db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
5625db71995Sopenharmony_ci
5635db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
5645db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
5655db71995Sopenharmony_ci    instance.CheckCreate();
5665db71995Sopenharmony_ci
5675db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
5685db71995Sopenharmony_ci    uint32_t count = 0;
5695db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkEnumerateDeviceExtensionProperties(bad_physical_dev, nullptr, &count, nullptr),
5705db71995Sopenharmony_ci                 "vkEnumerateDeviceExtensionProperties: Invalid physicalDevice "
5715db71995Sopenharmony_ci                 "\\[VUID-vkEnumerateDeviceExtensionProperties-physicalDevice-parameter\\]");
5725db71995Sopenharmony_ci}
5735db71995Sopenharmony_ci
5745db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevEnumDevLayerProps) {
5755db71995Sopenharmony_ci    FrameworkEnvironment env{};
5765db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
5775db71995Sopenharmony_ci        .add_physical_device({})
5785db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
5795db71995Sopenharmony_ci
5805db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
5815db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
5825db71995Sopenharmony_ci    instance.CheckCreate();
5835db71995Sopenharmony_ci
5845db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
5855db71995Sopenharmony_ci    uint32_t count = 0;
5865db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkEnumerateDeviceLayerProperties(bad_physical_dev, &count, nullptr),
5875db71995Sopenharmony_ci                 "vkEnumerateDeviceLayerProperties: Invalid physicalDevice "
5885db71995Sopenharmony_ci                 "\\[VUID-vkEnumerateDeviceLayerProperties-physicalDevice-parameter\\]");
5895db71995Sopenharmony_ci}
5905db71995Sopenharmony_ci
5915db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSparseImgFormatProps) {
5925db71995Sopenharmony_ci    FrameworkEnvironment env{};
5935db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
5945db71995Sopenharmony_ci        .add_physical_device({})
5955db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
5965db71995Sopenharmony_ci
5975db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
5985db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
5995db71995Sopenharmony_ci    instance.CheckCreate();
6005db71995Sopenharmony_ci
6015db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
6025db71995Sopenharmony_ci
6035db71995Sopenharmony_ci    uint32_t count = 0;
6045db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSparseImageFormatProperties(
6055db71995Sopenharmony_ci                     bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_TYPE_2D, VK_SAMPLE_COUNT_1_BIT,
6065db71995Sopenharmony_ci                     VK_IMAGE_USAGE_STORAGE_BIT, VK_IMAGE_TILING_LINEAR, &count, nullptr),
6075db71995Sopenharmony_ci                 "vkGetPhysicalDeviceSparseImageFormatProperties: Invalid physicalDevice "
6085db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceSparseImageFormatProperties-physicalDevice-parameter\\]");
6095db71995Sopenharmony_ci}
6105db71995Sopenharmony_ci
6115db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFeature2) {
6125db71995Sopenharmony_ci    FrameworkEnvironment env{};
6135db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
6145db71995Sopenharmony_ci        .add_physical_device({})
6155db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
6165db71995Sopenharmony_ci
6175db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
6185db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
6195db71995Sopenharmony_ci    instance.CheckCreate();
6205db71995Sopenharmony_ci
6215db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
6225db71995Sopenharmony_ci
6235db71995Sopenharmony_ci    VkPhysicalDeviceFeatures2 features = {};
6245db71995Sopenharmony_ci    features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
6255db71995Sopenharmony_ci    features.pNext = nullptr;
6265db71995Sopenharmony_ci    ASSERT_DEATH(
6275db71995Sopenharmony_ci        env.vulkan_functions.vkGetPhysicalDeviceFeatures2(bad_physical_dev, &features),
6285db71995Sopenharmony_ci        "vkGetPhysicalDeviceFeatures2: Invalid physicalDevice \\[VUID-vkGetPhysicalDeviceFeatures2-physicalDevice-parameter\\]");
6295db71995Sopenharmony_ci}
6305db71995Sopenharmony_ci
6315db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFormatProps2) {
6325db71995Sopenharmony_ci    FrameworkEnvironment env{};
6335db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
6345db71995Sopenharmony_ci        .add_physical_device({})
6355db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
6365db71995Sopenharmony_ci
6375db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
6385db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
6395db71995Sopenharmony_ci    instance.CheckCreate();
6405db71995Sopenharmony_ci
6415db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
6425db71995Sopenharmony_ci
6435db71995Sopenharmony_ci    VkFormatProperties2 properties = {};
6445db71995Sopenharmony_ci    properties.sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2;
6455db71995Sopenharmony_ci    properties.pNext = nullptr;
6465db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceFormatProperties2(bad_physical_dev, VK_FORMAT_R8G8B8A8_UNORM, &properties),
6475db71995Sopenharmony_ci                 "vkGetPhysicalDeviceFormatProperties2: Invalid physicalDevice "
6485db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceFormatProperties2-physicalDevice-parameter\\]");
6495db71995Sopenharmony_ci}
6505db71995Sopenharmony_ci
6515db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevImgFormatProps2) {
6525db71995Sopenharmony_ci    FrameworkEnvironment env{};
6535db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
6545db71995Sopenharmony_ci        .add_physical_device({})
6555db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
6565db71995Sopenharmony_ci
6575db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
6585db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
6595db71995Sopenharmony_ci    instance.CheckCreate();
6605db71995Sopenharmony_ci
6615db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
6625db71995Sopenharmony_ci
6635db71995Sopenharmony_ci    VkPhysicalDeviceImageFormatInfo2 format_info = {};
6645db71995Sopenharmony_ci    format_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2;
6655db71995Sopenharmony_ci    format_info.pNext = nullptr;
6665db71995Sopenharmony_ci    VkImageFormatProperties2 properties = {};
6675db71995Sopenharmony_ci    properties.sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2;
6685db71995Sopenharmony_ci    properties.pNext = nullptr;
6695db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceImageFormatProperties2(bad_physical_dev, &format_info, &properties),
6705db71995Sopenharmony_ci                 "vkGetPhysicalDeviceImageFormatProperties2: Invalid physicalDevice "
6715db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceImageFormatProperties2-physicalDevice-parameter\\]");
6725db71995Sopenharmony_ci}
6735db71995Sopenharmony_ci
6745db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevProps2) {
6755db71995Sopenharmony_ci    FrameworkEnvironment env{};
6765db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
6775db71995Sopenharmony_ci        .add_physical_device({})
6785db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
6795db71995Sopenharmony_ci
6805db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
6815db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
6825db71995Sopenharmony_ci    instance.CheckCreate();
6835db71995Sopenharmony_ci
6845db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
6855db71995Sopenharmony_ci
6865db71995Sopenharmony_ci    VkPhysicalDeviceProperties2 properties = {};
6875db71995Sopenharmony_ci    properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
6885db71995Sopenharmony_ci    properties.pNext = nullptr;
6895db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceProperties2(bad_physical_dev, &properties),
6905db71995Sopenharmony_ci                 "vkGetPhysicalDeviceProperties2: Invalid physicalDevice "
6915db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceProperties2-physicalDevice-parameter\\]");
6925db71995Sopenharmony_ci}
6935db71995Sopenharmony_ci
6945db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamProps2) {
6955db71995Sopenharmony_ci    FrameworkEnvironment env{};
6965db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
6975db71995Sopenharmony_ci        .add_physical_device({})
6985db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
6995db71995Sopenharmony_ci
7005db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
7015db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
7025db71995Sopenharmony_ci    instance.CheckCreate();
7035db71995Sopenharmony_ci
7045db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
7055db71995Sopenharmony_ci    uint32_t count = 0;
7065db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceQueueFamilyProperties2(bad_physical_dev, &count, nullptr),
7075db71995Sopenharmony_ci                 "vkGetPhysicalDeviceQueueFamilyProperties2: Invalid physicalDevice "
7085db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceQueueFamilyProperties2-physicalDevice-parameter\\]");
7095db71995Sopenharmony_ci}
7105db71995Sopenharmony_ci
7115db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDevMemProps2) {
7125db71995Sopenharmony_ci    FrameworkEnvironment env{};
7135db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
7145db71995Sopenharmony_ci        .add_physical_device({})
7155db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
7165db71995Sopenharmony_ci
7175db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
7185db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
7195db71995Sopenharmony_ci    instance.CheckCreate();
7205db71995Sopenharmony_ci
7215db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
7225db71995Sopenharmony_ci
7235db71995Sopenharmony_ci    VkPhysicalDeviceMemoryProperties2 properties = {};
7245db71995Sopenharmony_ci    properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2;
7255db71995Sopenharmony_ci    properties.pNext = nullptr;
7265db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceMemoryProperties2(bad_physical_dev, &properties),
7275db71995Sopenharmony_ci                 "vkGetPhysicalDeviceMemoryProperties2: Invalid physicalDevice "
7285db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceMemoryProperties2-physicalDevice-parameter\\]");
7295db71995Sopenharmony_ci}
7305db71995Sopenharmony_ci
7315db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSparseImgFormatProps2) {
7325db71995Sopenharmony_ci    FrameworkEnvironment env{};
7335db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
7345db71995Sopenharmony_ci        .add_physical_device({})
7355db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
7365db71995Sopenharmony_ci
7375db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
7385db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
7395db71995Sopenharmony_ci    instance.CheckCreate();
7405db71995Sopenharmony_ci
7415db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
7425db71995Sopenharmony_ci
7435db71995Sopenharmony_ci    VkPhysicalDeviceSparseImageFormatInfo2 info = {};
7445db71995Sopenharmony_ci    info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2;
7455db71995Sopenharmony_ci    info.pNext = nullptr;
7465db71995Sopenharmony_ci    uint32_t count = 0;
7475db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSparseImageFormatProperties2(bad_physical_dev, &info, &count, nullptr),
7485db71995Sopenharmony_ci                 "vkGetPhysicalDeviceSparseImageFormatProperties2: Invalid physicalDevice "
7495db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-physicalDevice-parameter\\]");
7505db71995Sopenharmony_ci}
7515db71995Sopenharmony_ci
7525db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternFenceProps) {
7535db71995Sopenharmony_ci    FrameworkEnvironment env{};
7545db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
7555db71995Sopenharmony_ci        .add_physical_device({})
7565db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
7575db71995Sopenharmony_ci
7585db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
7595db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
7605db71995Sopenharmony_ci    instance.CheckCreate();
7615db71995Sopenharmony_ci
7625db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
7635db71995Sopenharmony_ci
7645db71995Sopenharmony_ci    VkPhysicalDeviceExternalFenceInfo info = {};
7655db71995Sopenharmony_ci    info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO;
7665db71995Sopenharmony_ci    info.pNext = nullptr;
7675db71995Sopenharmony_ci    VkExternalFenceProperties props = {};
7685db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceExternalFenceProperties(bad_physical_dev, &info, &props),
7695db71995Sopenharmony_ci                 "vkGetPhysicalDeviceExternalFenceProperties: Invalid physicalDevice "
7705db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceExternalFenceProperties-physicalDevice-parameter\\]");
7715db71995Sopenharmony_ci}
7725db71995Sopenharmony_ci
7735db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternBufferProps) {
7745db71995Sopenharmony_ci    FrameworkEnvironment env{};
7755db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
7765db71995Sopenharmony_ci        .add_physical_device({})
7775db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
7785db71995Sopenharmony_ci
7795db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
7805db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
7815db71995Sopenharmony_ci    instance.CheckCreate();
7825db71995Sopenharmony_ci
7835db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
7845db71995Sopenharmony_ci
7855db71995Sopenharmony_ci    VkPhysicalDeviceExternalBufferInfo info = {};
7865db71995Sopenharmony_ci    info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO;
7875db71995Sopenharmony_ci    info.pNext = nullptr;
7885db71995Sopenharmony_ci    VkExternalBufferProperties props = {};
7895db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceExternalBufferProperties(bad_physical_dev, &info, &props),
7905db71995Sopenharmony_ci                 "vkGetPhysicalDeviceExternalBufferProperties: Invalid physicalDevice "
7915db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceExternalBufferProperties-physicalDevice-parameter\\]");
7925db71995Sopenharmony_ci}
7935db71995Sopenharmony_ci
7945db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternSemaphoreProps) {
7955db71995Sopenharmony_ci    FrameworkEnvironment env{};
7965db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
7975db71995Sopenharmony_ci        .add_physical_device({})
7985db71995Sopenharmony_ci        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
7995db71995Sopenharmony_ci
8005db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
8015db71995Sopenharmony_ci    instance.create_info.set_api_version(1, 1, 0);
8025db71995Sopenharmony_ci    instance.CheckCreate();
8035db71995Sopenharmony_ci
8045db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
8055db71995Sopenharmony_ci
8065db71995Sopenharmony_ci    VkPhysicalDeviceExternalSemaphoreInfo info = {};
8075db71995Sopenharmony_ci    info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO;
8085db71995Sopenharmony_ci    info.pNext = nullptr;
8095db71995Sopenharmony_ci    VkExternalSemaphoreProperties props = {};
8105db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceExternalSemaphoreProperties(bad_physical_dev, &info, &props),
8115db71995Sopenharmony_ci                 "vkGetPhysicalDeviceExternalSemaphoreProperties: Invalid physicalDevice "
8125db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-physicalDevice-parameter\\]");
8135db71995Sopenharmony_ci}
8145db71995Sopenharmony_ci
8155db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceSupportKHR) {
8165db71995Sopenharmony_ci    FrameworkEnvironment env{};
8175db71995Sopenharmony_ci    Extension first_ext{"VK_KHR_surface"};
8185db71995Sopenharmony_ci    Extension second_ext{"VK_KHR_display"};
8195db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
8205db71995Sopenharmony_ci        .add_instance_extensions({first_ext, second_ext})
8215db71995Sopenharmony_ci        .add_physical_device("physical_device_0");
8225db71995Sopenharmony_ci
8235db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
8245db71995Sopenharmony_ci    instance.create_info.add_extension(first_ext.extensionName.c_str());
8255db71995Sopenharmony_ci    instance.CheckCreate();
8265db71995Sopenharmony_ci
8275db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
8285db71995Sopenharmony_ci    VkBool32 supported = VK_FALSE;
8295db71995Sopenharmony_ci
8305db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceSupportKHR(bad_physical_dev, 0, VK_NULL_HANDLE, &supported),
8315db71995Sopenharmony_ci                 "vkGetPhysicalDeviceSurfaceSupportKHR: Invalid physicalDevice "
8325db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceSurfaceSupportKHR-physicalDevice-parameter\\]");
8335db71995Sopenharmony_ci}
8345db71995Sopenharmony_ci
8355db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceCapsKHR) {
8365db71995Sopenharmony_ci    FrameworkEnvironment env{};
8375db71995Sopenharmony_ci    Extension first_ext{"VK_KHR_surface"};
8385db71995Sopenharmony_ci    Extension second_ext{"VK_KHR_display"};
8395db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
8405db71995Sopenharmony_ci        .add_instance_extensions({first_ext, second_ext})
8415db71995Sopenharmony_ci        .add_physical_device("physical_device_0");
8425db71995Sopenharmony_ci
8435db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
8445db71995Sopenharmony_ci    instance.create_info.add_extension(first_ext.extensionName.c_str());
8455db71995Sopenharmony_ci    instance.CheckCreate();
8465db71995Sopenharmony_ci
8475db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
8485db71995Sopenharmony_ci    VkSurfaceCapabilitiesKHR caps = {};
8495db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(bad_physical_dev, VK_NULL_HANDLE, &caps),
8505db71995Sopenharmony_ci                 "vkGetPhysicalDeviceSurfaceCapabilitiesKHR: Invalid physicalDevice "
8515db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-physicalDevice-parameter\\]");
8525db71995Sopenharmony_ci}
8535db71995Sopenharmony_ci
8545db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceFormatsKHR) {
8555db71995Sopenharmony_ci    FrameworkEnvironment env{};
8565db71995Sopenharmony_ci    Extension first_ext{"VK_KHR_surface"};
8575db71995Sopenharmony_ci    Extension second_ext{"VK_KHR_display"};
8585db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
8595db71995Sopenharmony_ci        .add_instance_extensions({first_ext, second_ext})
8605db71995Sopenharmony_ci        .add_physical_device("physical_device_0");
8615db71995Sopenharmony_ci
8625db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
8635db71995Sopenharmony_ci    instance.create_info.add_extension(first_ext.extensionName.c_str());
8645db71995Sopenharmony_ci    instance.CheckCreate();
8655db71995Sopenharmony_ci
8665db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
8675db71995Sopenharmony_ci    uint32_t count = 0;
8685db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceFormatsKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr),
8695db71995Sopenharmony_ci                 "vkGetPhysicalDeviceSurfaceFormatsKHR: Invalid physicalDevice "
8705db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceSurfaceFormatsKHR-physicalDevice-parameter\\]");
8715db71995Sopenharmony_ci}
8725db71995Sopenharmony_ci
8735db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfacePresentModesKHR) {
8745db71995Sopenharmony_ci    FrameworkEnvironment env{};
8755db71995Sopenharmony_ci    Extension first_ext{"VK_KHR_surface"};
8765db71995Sopenharmony_ci    Extension second_ext{"VK_KHR_display"};
8775db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
8785db71995Sopenharmony_ci        .add_instance_extensions({first_ext, second_ext})
8795db71995Sopenharmony_ci        .add_physical_device("physical_device_0");
8805db71995Sopenharmony_ci
8815db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
8825db71995Sopenharmony_ci    instance.create_info.add_extension(first_ext.extensionName.c_str());
8835db71995Sopenharmony_ci    instance.CheckCreate();
8845db71995Sopenharmony_ci
8855db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
8865db71995Sopenharmony_ci    uint32_t count = 0;
8875db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfacePresentModesKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr),
8885db71995Sopenharmony_ci                 "vkGetPhysicalDeviceSurfacePresentModesKHR: Invalid physicalDevice "
8895db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceSurfacePresentModesKHR-physicalDevice-parameter\\]");
8905db71995Sopenharmony_ci}
8915db71995Sopenharmony_ci
8925db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_DIRECTFB_EXT)
8935db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetDirectFBPresentSupportKHR) {
8945db71995Sopenharmony_ci    FrameworkEnvironment env{};
8955db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
8965db71995Sopenharmony_ci
8975db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
8985db71995Sopenharmony_ci    instance.create_info.setup_WSI();
8995db71995Sopenharmony_ci    instance.CheckCreate();
9005db71995Sopenharmony_ci
9015db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
9025db71995Sopenharmony_ci    IDirectFB directfb;
9035db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDirectFBPresentationSupportEXT(bad_physical_dev, 0, &directfb),
9045db71995Sopenharmony_ci                 "vkGetPhysicalDeviceDirectFBPresentationSupportEXT: Invalid physicalDevice "
9055db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceDirectFBPresentationSupportEXT-physicalDevice-parameter\\]");
9065db71995Sopenharmony_ci}
9075db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_DIRECTFB_EXT
9085db71995Sopenharmony_ci
9095db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_SCREEN_QNX)
9105db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetQNXPresentSupportKHR) {
9115db71995Sopenharmony_ci    FrameworkEnvironment env{};
9125db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
9135db71995Sopenharmony_ci
9145db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
9155db71995Sopenharmony_ci    instance.create_info.setup_WSI();
9165db71995Sopenharmony_ci    instance.CheckCreate();
9175db71995Sopenharmony_ci
9185db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
9195db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX(bad_physical_dev, 0, nullptr),
9205db71995Sopenharmony_ci                 "vkGetPhysicalDeviceScreenPresentationSupportQNX: Invalid instance "
9215db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceScreenPresentationSupportQNX-instance-parameter\\]");
9225db71995Sopenharmony_ci}
9235db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_SCREEN_QNX
9245db71995Sopenharmony_ci
9255db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_WAYLAND_KHR)
9265db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevWaylandPresentSupportKHR) {
9275db71995Sopenharmony_ci    FrameworkEnvironment env{};
9285db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
9295db71995Sopenharmony_ci
9305db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
9315db71995Sopenharmony_ci    instance.create_info.setup_WSI();
9325db71995Sopenharmony_ci    instance.CheckCreate();
9335db71995Sopenharmony_ci
9345db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
9355db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceWaylandPresentationSupportKHR(bad_physical_dev, 0, nullptr),
9365db71995Sopenharmony_ci                 "vkGetPhysicalDeviceWaylandPresentationSupportKHR: Invalid physicalDevice "
9375db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-physicalDevice-parameter\\]");
9385db71995Sopenharmony_ci}
9395db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_WAYLAND_KHR
9405db71995Sopenharmony_ci
9415db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_WIN32_KHR)
9425db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevWin32PresentSupportKHR) {
9435db71995Sopenharmony_ci    FrameworkEnvironment env{};
9445db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
9455db71995Sopenharmony_ci
9465db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
9475db71995Sopenharmony_ci    instance.create_info.setup_WSI();
9485db71995Sopenharmony_ci    instance.CheckCreate();
9495db71995Sopenharmony_ci
9505db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
9515db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceWin32PresentationSupportKHR(bad_physical_dev, 0),
9525db71995Sopenharmony_ci                 "vkGetPhysicalDeviceWin32PresentationSupportKHR: Invalid physicalDevice "
9535db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-physicalDevice-parameter\\]");
9545db71995Sopenharmony_ci}
9555db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_WIN32_KHR
9565db71995Sopenharmony_ci
9575db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_XCB_KHR)
9585db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetXCBPresentSupportKHR) {
9595db71995Sopenharmony_ci    FrameworkEnvironment env{};
9605db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
9615db71995Sopenharmony_ci
9625db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
9635db71995Sopenharmony_ci    instance.create_info.setup_WSI();
9645db71995Sopenharmony_ci    instance.CheckCreate();
9655db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
9665db71995Sopenharmony_ci
9675db71995Sopenharmony_ci    xcb_visualid_t visual = 0;
9685db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceXcbPresentationSupportKHR(bad_physical_dev, 0, nullptr, visual),
9695db71995Sopenharmony_ci                 "vkGetPhysicalDeviceXcbPresentationSupportKHR: Invalid physicalDevice "
9705db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-physicalDevice-parameter\\]");
9715db71995Sopenharmony_ci}
9725db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_XCB_KHR
9735db71995Sopenharmony_ci
9745db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_XLIB_KHR)
9755db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetXlibPresentSupportKHR) {
9765db71995Sopenharmony_ci    FrameworkEnvironment env{};
9775db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
9785db71995Sopenharmony_ci
9795db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
9805db71995Sopenharmony_ci    instance.create_info.setup_WSI();
9815db71995Sopenharmony_ci    instance.CheckCreate();
9825db71995Sopenharmony_ci
9835db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
9845db71995Sopenharmony_ci
9855db71995Sopenharmony_ci    VisualID visual = 0;
9865db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceXlibPresentationSupportKHR(bad_physical_dev, 0, nullptr, visual),
9875db71995Sopenharmony_ci                 "vkGetPhysicalDeviceXlibPresentationSupportKHR: Invalid physicalDevice "
9885db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-physicalDevice-parameter\\]");
9895db71995Sopenharmony_ci}
9905db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_XLIB_KHR
9915db71995Sopenharmony_ci
9925db71995Sopenharmony_ciInstWrapper setup_BadPhysDev_env(FrameworkEnvironment& env, std::vector<const char*> exts) {
9935db71995Sopenharmony_ci    std::vector<Extension> ext_modified;
9945db71995Sopenharmony_ci    for (const auto& ext : exts) {
9955db71995Sopenharmony_ci        ext_modified.push_back(Extension{ext});
9965db71995Sopenharmony_ci    }
9975db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
9985db71995Sopenharmony_ci        .add_instance_extensions(ext_modified)
9995db71995Sopenharmony_ci        .setup_WSI()
10005db71995Sopenharmony_ci        .add_physical_device("physical_device_0");
10015db71995Sopenharmony_ci
10025db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
10035db71995Sopenharmony_ci    instance.create_info.add_extensions(exts);
10045db71995Sopenharmony_ci    instance.CheckCreate();
10055db71995Sopenharmony_ci    return instance;
10065db71995Sopenharmony_ci}
10075db71995Sopenharmony_ci
10085db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPropsKHR) {
10095db71995Sopenharmony_ci    FrameworkEnvironment env{};
10105db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
10115db71995Sopenharmony_ci
10125db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
10135db71995Sopenharmony_ci    uint32_t count = 0;
10145db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayPropertiesKHR(bad_physical_dev, &count, nullptr),
10155db71995Sopenharmony_ci                 "vkGetPhysicalDeviceDisplayPropertiesKHR: Invalid physicalDevice "
10165db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceDisplayPropertiesKHR-physicalDevice-parameter\\]");
10175db71995Sopenharmony_ci}
10185db71995Sopenharmony_ci
10195db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPlanePropsKHR) {
10205db71995Sopenharmony_ci    FrameworkEnvironment env{};
10215db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
10225db71995Sopenharmony_ci
10235db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
10245db71995Sopenharmony_ci    uint32_t count = 0;
10255db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayPlanePropertiesKHR(bad_physical_dev, &count, nullptr),
10265db71995Sopenharmony_ci                 "vkGetPhysicalDeviceDisplayPlanePropertiesKHR: Invalid physicalDevice "
10275db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceDisplayPlanePropertiesKHR-physicalDevice-parameter\\]");
10285db71995Sopenharmony_ci}
10295db71995Sopenharmony_ci
10305db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneSupportedDisplaysKHR) {
10315db71995Sopenharmony_ci    FrameworkEnvironment env{};
10325db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
10335db71995Sopenharmony_ci
10345db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
10355db71995Sopenharmony_ci    uint32_t count = 0;
10365db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetDisplayPlaneSupportedDisplaysKHR(bad_physical_dev, 0, &count, nullptr),
10375db71995Sopenharmony_ci                 "vkGetDisplayPlaneSupportedDisplaysKHR: Invalid physicalDevice "
10385db71995Sopenharmony_ci                 "\\[VUID-vkGetDisplayPlaneSupportedDisplaysKHR-physicalDevice-parameter\\]");
10395db71995Sopenharmony_ci}
10405db71995Sopenharmony_ci
10415db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetDisplayModePropsKHR) {
10425db71995Sopenharmony_ci    FrameworkEnvironment env{};
10435db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
10445db71995Sopenharmony_ci
10455db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
10465db71995Sopenharmony_ci    uint32_t count = 0;
10475db71995Sopenharmony_ci    ASSERT_DEATH(
10485db71995Sopenharmony_ci        env.vulkan_functions.vkGetDisplayModePropertiesKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr),
10495db71995Sopenharmony_ci        "vkGetDisplayModePropertiesKHR: Invalid physicalDevice \\[VUID-vkGetDisplayModePropertiesKHR-physicalDevice-parameter\\]");
10505db71995Sopenharmony_ci}
10515db71995Sopenharmony_ci
10525db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevCreateDisplayModeKHR) {
10535db71995Sopenharmony_ci    FrameworkEnvironment env{};
10545db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
10555db71995Sopenharmony_ci
10565db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
10575db71995Sopenharmony_ci    VkDisplayModeCreateInfoKHR create_info = {};
10585db71995Sopenharmony_ci    create_info.sType = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR;
10595db71995Sopenharmony_ci    create_info.pNext = nullptr;
10605db71995Sopenharmony_ci    VkDisplayModeKHR display_mode;
10615db71995Sopenharmony_ci    ASSERT_DEATH(
10625db71995Sopenharmony_ci        env.vulkan_functions.vkCreateDisplayModeKHR(bad_physical_dev, VK_NULL_HANDLE, &create_info, nullptr, &display_mode),
10635db71995Sopenharmony_ci        "vkCreateDisplayModeKHR: Invalid physicalDevice \\[VUID-vkCreateDisplayModeKHR-physicalDevice-parameter\\]");
10645db71995Sopenharmony_ci}
10655db71995Sopenharmony_ci
10665db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneCapsKHR) {
10675db71995Sopenharmony_ci    FrameworkEnvironment env{};
10685db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
10695db71995Sopenharmony_ci
10705db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
10715db71995Sopenharmony_ci    VkDisplayPlaneCapabilitiesKHR caps = {};
10725db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetDisplayPlaneCapabilitiesKHR(bad_physical_dev, VK_NULL_HANDLE, 0, &caps),
10735db71995Sopenharmony_ci                 "vkGetDisplayPlaneCapabilitiesKHR: Invalid physicalDevice "
10745db71995Sopenharmony_ci                 "\\[VUID-vkGetDisplayPlaneCapabilitiesKHR-physicalDevice-parameter\\]");
10755db71995Sopenharmony_ci}
10765db71995Sopenharmony_ci
10775db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevPresentRectsKHR) {
10785db71995Sopenharmony_ci    FrameworkEnvironment env{};
10795db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
10805db71995Sopenharmony_ci
10815db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
10825db71995Sopenharmony_ci    uint32_t count = 0;
10835db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDevicePresentRectanglesKHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr),
10845db71995Sopenharmony_ci                 "vkGetPhysicalDevicePresentRectanglesKHR: Invalid physicalDevice "
10855db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDevicePresentRectanglesKHR-physicalDevice-parameter\\]");
10865db71995Sopenharmony_ci}
10875db71995Sopenharmony_ci
10885db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayProps2KHR) {
10895db71995Sopenharmony_ci    FrameworkEnvironment env{};
10905db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"});
10915db71995Sopenharmony_ci
10925db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
10935db71995Sopenharmony_ci    uint32_t count = 0;
10945db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayProperties2KHR(bad_physical_dev, &count, nullptr),
10955db71995Sopenharmony_ci                 "vkGetPhysicalDeviceDisplayProperties2KHR: Invalid physicalDevice "
10965db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceDisplayProperties2KHR-physicalDevice-parameter\\]");
10975db71995Sopenharmony_ci}
10985db71995Sopenharmony_ci
10995db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPlaneProps2KHR) {
11005db71995Sopenharmony_ci    FrameworkEnvironment env{};
11015db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"});
11025db71995Sopenharmony_ci
11035db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
11045db71995Sopenharmony_ci    uint32_t count = 0;
11055db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceDisplayPlaneProperties2KHR(bad_physical_dev, &count, nullptr),
11065db71995Sopenharmony_ci                 "vkGetPhysicalDeviceDisplayPlaneProperties2KHR: Invalid physicalDevice "
11075db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceDisplayPlaneProperties2KHR-physicalDevice-parameter\\]");
11085db71995Sopenharmony_ci}
11095db71995Sopenharmony_ci
11105db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetDisplayModeProps2KHR) {
11115db71995Sopenharmony_ci    FrameworkEnvironment env{};
11125db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"});
11135db71995Sopenharmony_ci
11145db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
11155db71995Sopenharmony_ci    uint32_t count = 0;
11165db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetDisplayModeProperties2KHR(bad_physical_dev, VK_NULL_HANDLE, &count, nullptr),
11175db71995Sopenharmony_ci                 "vkGetDisplayModeProperties2KHR: Invalid physicalDevice "
11185db71995Sopenharmony_ci                 "\\[VUID-vkGetDisplayModeProperties2KHR-physicalDevice-parameter\\]");
11195db71995Sopenharmony_ci}
11205db71995Sopenharmony_ci
11215db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneCaps2KHR) {
11225db71995Sopenharmony_ci    FrameworkEnvironment env{};
11235db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"});
11245db71995Sopenharmony_ci
11255db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
11265db71995Sopenharmony_ci    VkDisplayPlaneInfo2KHR disp_plane_info = {};
11275db71995Sopenharmony_ci    disp_plane_info.sType = VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR;
11285db71995Sopenharmony_ci    disp_plane_info.pNext = nullptr;
11295db71995Sopenharmony_ci    VkDisplayPlaneCapabilities2KHR caps = {};
11305db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetDisplayPlaneCapabilities2KHR(bad_physical_dev, &disp_plane_info, &caps),
11315db71995Sopenharmony_ci                 "vkGetDisplayPlaneCapabilities2KHR: Invalid physicalDevice "
11325db71995Sopenharmony_ci                 "\\[VUID-vkGetDisplayPlaneCapabilities2KHR-physicalDevice-parameter\\]");
11335db71995Sopenharmony_ci}
11345db71995Sopenharmony_ci
11355db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceCaps2KHR) {
11365db71995Sopenharmony_ci    FrameworkEnvironment env{};
11375db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_surface_capabilities2"});
11385db71995Sopenharmony_ci
11395db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
11405db71995Sopenharmony_ci    VkPhysicalDeviceSurfaceInfo2KHR phys_dev_surf_info = {};
11415db71995Sopenharmony_ci    phys_dev_surf_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR;
11425db71995Sopenharmony_ci    phys_dev_surf_info.pNext = nullptr;
11435db71995Sopenharmony_ci    VkSurfaceCapabilities2KHR caps = {};
11445db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceCapabilities2KHR(bad_physical_dev, &phys_dev_surf_info, &caps),
11455db71995Sopenharmony_ci                 "vkGetPhysicalDeviceSurfaceCapabilities2KHR: Invalid physicalDevice "
11465db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceSurfaceCapabilities2KHR-physicalDevice-parameter\\]");
11475db71995Sopenharmony_ci}
11485db71995Sopenharmony_ci
11495db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceFormats2KHR) {
11505db71995Sopenharmony_ci    FrameworkEnvironment env{};
11515db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_surface_capabilities2"});
11525db71995Sopenharmony_ci
11535db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
11545db71995Sopenharmony_ci    VkPhysicalDeviceSurfaceInfo2KHR phys_dev_surf_info = {};
11555db71995Sopenharmony_ci    phys_dev_surf_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR;
11565db71995Sopenharmony_ci    phys_dev_surf_info.pNext = nullptr;
11575db71995Sopenharmony_ci    uint32_t count = 0;
11585db71995Sopenharmony_ci    ASSERT_DEATH(env.vulkan_functions.vkGetPhysicalDeviceSurfaceFormats2KHR(bad_physical_dev, &phys_dev_surf_info, &count, nullptr),
11595db71995Sopenharmony_ci                 "vkGetPhysicalDeviceSurfaceFormats2KHR: Invalid physicalDevice "
11605db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceSurfaceFormats2KHR-physicalDevice-parameter\\]");
11615db71995Sopenharmony_ci}
11625db71995Sopenharmony_ci
11635db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevEnumPhysDevQueueFamilyPerfQueryCountersKHR) {
11645db71995Sopenharmony_ci    FrameworkEnvironment env{};
11655db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {});
11665db71995Sopenharmony_ci
11675db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
11685db71995Sopenharmony_ci    uint32_t count = 0;
11695db71995Sopenharmony_ci    PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR pfn =
11705db71995Sopenharmony_ci        instance.load("vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR");
11715db71995Sopenharmony_ci    ASSERT_NE(pfn, nullptr);
11725db71995Sopenharmony_ci    ASSERT_DEATH(pfn(bad_physical_dev, 0, &count, nullptr, nullptr),
11735db71995Sopenharmony_ci                 "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR: Invalid physicalDevice "
11745db71995Sopenharmony_ci                 "\\[VUID-vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR-physicalDevice-parameter\\]");
11755db71995Sopenharmony_ci}
11765db71995Sopenharmony_ci
11775db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamilyPerfQueryPassesKHR) {
11785db71995Sopenharmony_ci    FrameworkEnvironment env{};
11795db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {});
11805db71995Sopenharmony_ci
11815db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
11825db71995Sopenharmony_ci    VkQueryPoolPerformanceCreateInfoKHR create_info = {};
11835db71995Sopenharmony_ci    create_info.sType = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR;
11845db71995Sopenharmony_ci    create_info.pNext = nullptr;
11855db71995Sopenharmony_ci    uint32_t count = 0;
11865db71995Sopenharmony_ci    PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR pfn =
11875db71995Sopenharmony_ci        instance.load("vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR");
11885db71995Sopenharmony_ci    ASSERT_NE(pfn, nullptr);
11895db71995Sopenharmony_ci    ASSERT_DEATH(pfn(bad_physical_dev, &create_info, &count),
11905db71995Sopenharmony_ci                 "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR: Invalid physicalDevice "
11915db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR-physicalDevice-parameter\\]");
11925db71995Sopenharmony_ci}
11935db71995Sopenharmony_ci
11945db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFragmentShadingRatesKHR) {
11955db71995Sopenharmony_ci    FrameworkEnvironment env{};
11965db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {});
11975db71995Sopenharmony_ci
11985db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
11995db71995Sopenharmony_ci    uint32_t count = 0;
12005db71995Sopenharmony_ci    PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR pfn = instance.load("vkGetPhysicalDeviceFragmentShadingRatesKHR");
12015db71995Sopenharmony_ci    ASSERT_NE(pfn, nullptr);
12025db71995Sopenharmony_ci    ASSERT_DEATH(pfn(bad_physical_dev, &count, nullptr),
12035db71995Sopenharmony_ci                 "vkGetPhysicalDeviceFragmentShadingRatesKHR: Invalid physicalDevice "
12045db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceFragmentShadingRatesKHR-physicalDevice-parameter\\]");
12055db71995Sopenharmony_ci}
12065db71995Sopenharmony_ci
12075db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevMSPropsEXT) {
12085db71995Sopenharmony_ci    FrameworkEnvironment env{};
12095db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {});
12105db71995Sopenharmony_ci
12115db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
12125db71995Sopenharmony_ci    VkMultisamplePropertiesEXT props = {};
12135db71995Sopenharmony_ci    PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT pfn = instance.load("vkGetPhysicalDeviceMultisamplePropertiesEXT");
12145db71995Sopenharmony_ci    ASSERT_NE(pfn, nullptr);
12155db71995Sopenharmony_ci    ASSERT_DEATH(pfn(bad_physical_dev, VK_SAMPLE_COUNT_1_BIT, &props),
12165db71995Sopenharmony_ci                 "vkGetPhysicalDeviceMultisamplePropertiesEXT: Invalid physicalDevice "
12175db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceMultisamplePropertiesEXT-physicalDevice-parameter\\]");
12185db71995Sopenharmony_ci}
12195db71995Sopenharmony_ci
12205db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevAcquireDrmDisplayEXT) {
12215db71995Sopenharmony_ci    FrameworkEnvironment env{};
12225db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_drm_display"});
12235db71995Sopenharmony_ci
12245db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
12255db71995Sopenharmony_ci    PFN_vkAcquireDrmDisplayEXT pfn = instance.load("vkAcquireDrmDisplayEXT");
12265db71995Sopenharmony_ci    ASSERT_NE(pfn, nullptr);
12275db71995Sopenharmony_ci    ASSERT_DEATH(pfn(bad_physical_dev, 0, VK_NULL_HANDLE),
12285db71995Sopenharmony_ci                 "vkAcquireDrmDisplayEXT: Invalid physicalDevice \\[VUID-vkAcquireDrmDisplayEXT-physicalDevice-parameter\\]");
12295db71995Sopenharmony_ci}
12305db71995Sopenharmony_ci
12315db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetDrmDisplayEXT) {
12325db71995Sopenharmony_ci    FrameworkEnvironment env{};
12335db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_drm_display"});
12345db71995Sopenharmony_ci
12355db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
12365db71995Sopenharmony_ci    PFN_vkGetDrmDisplayEXT pfn = instance.load("vkGetDrmDisplayEXT");
12375db71995Sopenharmony_ci    ASSERT_NE(pfn, nullptr);
12385db71995Sopenharmony_ci    ASSERT_DEATH(pfn(bad_physical_dev, 0, 0, VK_NULL_HANDLE),
12395db71995Sopenharmony_ci                 "vkGetDrmDisplayEXT: Invalid physicalDevice "
12405db71995Sopenharmony_ci                 "\\[VUID-vkGetDrmDisplayEXT-physicalDevice-parameter\\]");
12415db71995Sopenharmony_ci}
12425db71995Sopenharmony_ci
12435db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevReleaseDisplayEXT) {
12445db71995Sopenharmony_ci    FrameworkEnvironment env{};
12455db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_direct_mode_display"});
12465db71995Sopenharmony_ci
12475db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
12485db71995Sopenharmony_ci    PFN_vkReleaseDisplayEXT pfn = instance.load("vkReleaseDisplayEXT");
12495db71995Sopenharmony_ci    ASSERT_NE(pfn, nullptr);
12505db71995Sopenharmony_ci    ASSERT_DEATH(pfn(bad_physical_dev, VK_NULL_HANDLE),
12515db71995Sopenharmony_ci                 "vkReleaseDisplayEXT: Invalid physicalDevice \\[VUID-vkReleaseDisplayEXT-physicalDevice-parameter\\]");
12525db71995Sopenharmony_ci}
12535db71995Sopenharmony_ci
12545db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT)
12555db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevAcquireXlibDisplayEXT) {
12565db71995Sopenharmony_ci    FrameworkEnvironment env{};
12575db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_xlib_display"});
12585db71995Sopenharmony_ci
12595db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
12605db71995Sopenharmony_ci    PFN_vkAcquireXlibDisplayEXT pfn = instance.load("vkAcquireXlibDisplayEXT");
12615db71995Sopenharmony_ci    ASSERT_NE(pfn, nullptr);
12625db71995Sopenharmony_ci    ASSERT_DEATH(pfn(bad_physical_dev, nullptr, VK_NULL_HANDLE),
12635db71995Sopenharmony_ci                 "vkAcquireXlibDisplayEXT: Invalid physicalDevice \\[VUID-vkAcquireXlibDisplayEXT-physicalDevice-parameter\\]");
12645db71995Sopenharmony_ci}
12655db71995Sopenharmony_ci
12665db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetRandROutputDisplayEXT) {
12675db71995Sopenharmony_ci    FrameworkEnvironment env{};
12685db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_xlib_display"});
12695db71995Sopenharmony_ci
12705db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
12715db71995Sopenharmony_ci    RROutput rrout = {};
12725db71995Sopenharmony_ci    VkDisplayKHR disp;
12735db71995Sopenharmony_ci    PFN_vkGetRandROutputDisplayEXT pfn = instance.load("vkGetRandROutputDisplayEXT");
12745db71995Sopenharmony_ci    ASSERT_NE(pfn, nullptr);
12755db71995Sopenharmony_ci    ASSERT_DEATH(
12765db71995Sopenharmony_ci        pfn(bad_physical_dev, nullptr, rrout, &disp),
12775db71995Sopenharmony_ci        "vkGetRandROutputDisplayEXT: Invalid physicalDevice \\[VUID-vkGetRandROutputDisplayEXT-physicalDevice-parameter\\]");
12785db71995Sopenharmony_ci}
12795db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_XLIB_XRANDR_EXT
12805db71995Sopenharmony_ci
12815db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_WIN32_KHR)
12825db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfacePresentModes2EXT) {
12835db71995Sopenharmony_ci    FrameworkEnvironment env{};
12845db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
12855db71995Sopenharmony_ci
12865db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
12875db71995Sopenharmony_ci    instance.CheckCreate();
12885db71995Sopenharmony_ci
12895db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
12905db71995Sopenharmony_ci    VkPhysicalDeviceSurfaceInfo2KHR phys_dev_surf_info = {};
12915db71995Sopenharmony_ci    phys_dev_surf_info.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR;
12925db71995Sopenharmony_ci    phys_dev_surf_info.pNext = nullptr;
12935db71995Sopenharmony_ci    uint32_t count = 0;
12945db71995Sopenharmony_ci    PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT pfn = instance.load("vkGetPhysicalDeviceSurfacePresentModes2EXT");
12955db71995Sopenharmony_ci    ASSERT_NE(pfn, nullptr);
12965db71995Sopenharmony_ci    ASSERT_DEATH(pfn(bad_physical_dev, &phys_dev_surf_info, &count, nullptr),
12975db71995Sopenharmony_ci                 "vkGetPhysicalDeviceSurfacePresentModes2EXT: Invalid physicalDevice "
12985db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceSurfacePresentModes2EXT-physicalDevice-parameter\\]");
12995db71995Sopenharmony_ci}
13005db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_WIN32_KHR
13015db71995Sopenharmony_ci
13025db71995Sopenharmony_ciTEST(LoaderHandleValidTests, BadPhysDevGetPhysDevToolPropertiesEXT) {
13035db71995Sopenharmony_ci    FrameworkEnvironment env{};
13045db71995Sopenharmony_ci    auto instance = setup_BadPhysDev_env(env, {});
13055db71995Sopenharmony_ci
13065db71995Sopenharmony_ci    auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
13075db71995Sopenharmony_ci    PFN_vkGetPhysicalDeviceToolPropertiesEXT pfn = instance.load("vkGetPhysicalDeviceToolPropertiesEXT");
13085db71995Sopenharmony_ci    ASSERT_NE(pfn, nullptr);
13095db71995Sopenharmony_ci    uint32_t count = 0;
13105db71995Sopenharmony_ci    ASSERT_DEATH(pfn(bad_physical_dev, &count, nullptr),
13115db71995Sopenharmony_ci                 "vkGetPhysicalDeviceToolPropertiesEXT: Invalid physicalDevice "
13125db71995Sopenharmony_ci                 "\\[VUID-vkGetPhysicalDeviceToolPropertiesEXT-physicalDevice-parameter\\]");
13135db71995Sopenharmony_ci}
13145db71995Sopenharmony_ci
13155db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_ANDROID_KHR)
13165db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingAndroidSurface) {
13175db71995Sopenharmony_ci    FrameworkEnvironment env{};
13185db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
13195db71995Sopenharmony_ci
13205db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
13215db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
13225db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
13235db71995Sopenharmony_ci                           "wrap_objects_layer.json");
13245db71995Sopenharmony_ci
13255db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
13265db71995Sopenharmony_ci    instance.create_info.setup_WSI();
13275db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
13285db71995Sopenharmony_ci    instance.CheckCreate();
13295db71995Sopenharmony_ci
13305db71995Sopenharmony_ci    VkAndroidSurfaceCreateInfoKHR surf_create_info = {};
13315db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
13325db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
13335db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
13345db71995Sopenharmony_ci    PFN_vkCreateAndroidSurfaceKHR pfn_CreateSurface = instance.load("vkCreateAndroidSurfaceKHR");
13355db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
13365db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
13375db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
13385db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
13395db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
13405db71995Sopenharmony_ci}
13415db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_ANDROID_KHR
13425db71995Sopenharmony_ci
13435db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_DIRECTFB_EXT)
13445db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingDirectFBSurf) {
13455db71995Sopenharmony_ci    FrameworkEnvironment env{};
13465db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
13475db71995Sopenharmony_ci
13485db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
13495db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
13505db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
13515db71995Sopenharmony_ci                           "wrap_objects_layer.json");
13525db71995Sopenharmony_ci
13535db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
13545db71995Sopenharmony_ci    instance.create_info.setup_WSI();
13555db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
13565db71995Sopenharmony_ci    instance.CheckCreate();
13575db71995Sopenharmony_ci
13585db71995Sopenharmony_ci    VkDirectFBSurfaceCreateInfoEXT surf_create_info = {};
13595db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT;
13605db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
13615db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
13625db71995Sopenharmony_ci    PFN_vkCreateDirectFBSurfaceEXT pfn_CreateSurface = instance.load("vkCreateDirectFBSurfaceEXT");
13635db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
13645db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
13655db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
13665db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
13675db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
13685db71995Sopenharmony_ci}
13695db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_DIRECTFB_EXT
13705db71995Sopenharmony_ci
13715db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_FUCHSIA)
13725db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingFuchsiaSurf) {
13735db71995Sopenharmony_ci    FrameworkEnvironment env{};
13745db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
13755db71995Sopenharmony_ci
13765db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
13775db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
13785db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
13795db71995Sopenharmony_ci                           "wrap_objects_layer.json");
13805db71995Sopenharmony_ci
13815db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
13825db71995Sopenharmony_ci    instance.create_info.setup_WSI();
13835db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
13845db71995Sopenharmony_ci    instance.CheckCreate();
13855db71995Sopenharmony_ci
13865db71995Sopenharmony_ci    VkImagePipeSurfaceCreateInfoFUCHSIA surf_create_info = {};
13875db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA;
13885db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
13895db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
13905db71995Sopenharmony_ci    PFN_vkCreateImagePipeSurfaceFUCHSIA pfn_CreateSurface = instance.load("vkCreateImagePipeSurfaceFUCHSIA");
13915db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
13925db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
13935db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
13945db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
13955db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
13965db71995Sopenharmony_ci}
13975db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_FUCHSIA
13985db71995Sopenharmony_ci
13995db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_GGP)
14005db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingGGPSurf) {
14015db71995Sopenharmony_ci    FrameworkEnvironment env{};
14025db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
14035db71995Sopenharmony_ci
14045db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
14055db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
14065db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
14075db71995Sopenharmony_ci                           "wrap_objects_layer.json");
14085db71995Sopenharmony_ci
14095db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
14105db71995Sopenharmony_ci    instance.create_info.setup_WSI();
14115db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
14125db71995Sopenharmony_ci    instance.CheckCreate();
14135db71995Sopenharmony_ci
14145db71995Sopenharmony_ci    VkStreamDescriptorSurfaceCreateInfoGGP surf_create_info = {};
14155db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP;
14165db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
14175db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
14185db71995Sopenharmony_ci    PFN_vkCreateStreamDescriptorSurfaceGGP pfn_CreateSurface = instance.load("vkCreateStreamDescriptorSurfaceGGP");
14195db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
14205db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
14215db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
14225db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
14235db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
14245db71995Sopenharmony_ci}
14255db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_GGP
14265db71995Sopenharmony_ci
14275db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_IOS_MVK)
14285db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingIOSSurf) {
14295db71995Sopenharmony_ci    FrameworkEnvironment env{};
14305db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
14315db71995Sopenharmony_ci
14325db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
14335db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
14345db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
14355db71995Sopenharmony_ci                           "wrap_objects_layer.json");
14365db71995Sopenharmony_ci
14375db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
14385db71995Sopenharmony_ci    instance.create_info.setup_WSI();
14395db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
14405db71995Sopenharmony_ci    instance.CheckCreate();
14415db71995Sopenharmony_ci
14425db71995Sopenharmony_ci    VkIOSSurfaceCreateInfoMVK surf_create_info = {};
14435db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK;
14445db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
14455db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
14465db71995Sopenharmony_ci    PFN_vkCreateIOSSurfaceMVK pfn_CreateSurface = instance.load("vkCreateIOSSurfaceMVK");
14475db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
14485db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
14495db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
14505db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
14515db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
14525db71995Sopenharmony_ci}
14535db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_IOS_MVK
14545db71995Sopenharmony_ci
14555db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_MACOS_MVK)
14565db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingMacOSSurf) {
14575db71995Sopenharmony_ci    FrameworkEnvironment env{};
14585db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_MACOS_MVK");
14595db71995Sopenharmony_ci
14605db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
14615db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
14625db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
14635db71995Sopenharmony_ci                           "wrap_objects_layer.json");
14645db71995Sopenharmony_ci
14655db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
14665db71995Sopenharmony_ci    instance.create_info.setup_WSI("VK_USE_PLATFORM_MACOS_MVK");
14675db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
14685db71995Sopenharmony_ci    instance.CheckCreate();
14695db71995Sopenharmony_ci
14705db71995Sopenharmony_ci    VkMacOSSurfaceCreateInfoMVK surf_create_info = {};
14715db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
14725db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
14735db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
14745db71995Sopenharmony_ci    PFN_vkCreateMacOSSurfaceMVK pfn_CreateSurface = instance.load("vkCreateMacOSSurfaceMVK");
14755db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
14765db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
14775db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
14785db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
14795db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
14805db71995Sopenharmony_ci}
14815db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_MACOS_MVK
14825db71995Sopenharmony_ci
14835db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_METAL_EXT)
14845db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingMetalSurf) {
14855db71995Sopenharmony_ci    FrameworkEnvironment env{};
14865db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_METAL_EXT");
14875db71995Sopenharmony_ci
14885db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
14895db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
14905db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
14915db71995Sopenharmony_ci                           "wrap_objects_layer.json");
14925db71995Sopenharmony_ci
14935db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
14945db71995Sopenharmony_ci    instance.create_info.setup_WSI("VK_USE_PLATFORM_METAL_EXT");
14955db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
14965db71995Sopenharmony_ci    instance.CheckCreate();
14975db71995Sopenharmony_ci
14985db71995Sopenharmony_ci    VkMetalSurfaceCreateInfoEXT surf_create_info = {};
14995db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
15005db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
15015db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
15025db71995Sopenharmony_ci    PFN_vkCreateMetalSurfaceEXT pfn_CreateSurface = instance.load("vkCreateMetalSurfaceEXT");
15035db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
15045db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
15055db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
15065db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
15075db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
15085db71995Sopenharmony_ci}
15095db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_METAL_EXT
15105db71995Sopenharmony_ci
15115db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_SCREEN_QNX)
15125db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingQNXSurf) {
15135db71995Sopenharmony_ci    FrameworkEnvironment env{};
15145db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
15155db71995Sopenharmony_ci
15165db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
15175db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
15185db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
15195db71995Sopenharmony_ci                           "wrap_objects_layer.json");
15205db71995Sopenharmony_ci
15215db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
15225db71995Sopenharmony_ci    instance.create_info.setup_WSI();
15235db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
15245db71995Sopenharmony_ci    instance.CheckCreate();
15255db71995Sopenharmony_ci
15265db71995Sopenharmony_ci    VkScreenSurfaceCreateInfoQNX surf_create_info = {};
15275db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX;
15285db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
15295db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
15305db71995Sopenharmony_ci    PFN_vkCreateScreenSurfaceQNX pfn_CreateSurface = instance.load("vkCreateScreenSurfaceQNX");
15315db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
15325db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
15335db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
15345db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
15355db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
15365db71995Sopenharmony_ci}
15375db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_SCREEN_QNX
15385db71995Sopenharmony_ci
15395db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_VI_NN)
15405db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingViNNSurf) {
15415db71995Sopenharmony_ci    FrameworkEnvironment env{};
15425db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
15435db71995Sopenharmony_ci
15445db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
15455db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
15465db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
15475db71995Sopenharmony_ci                           "wrap_objects_layer.json");
15485db71995Sopenharmony_ci
15495db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
15505db71995Sopenharmony_ci    instance.create_info.setup_WSI();
15515db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
15525db71995Sopenharmony_ci    instance.CheckCreate();
15535db71995Sopenharmony_ci
15545db71995Sopenharmony_ci    VkViSurfaceCreateInfoNN surf_create_info = {};
15555db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN;
15565db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
15575db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
15585db71995Sopenharmony_ci    PFN_vkCreateViSurfaceNN pfn_CreateSurface = instance.load("vkCreateViSurfaceNN");
15595db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
15605db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
15615db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
15625db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
15635db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
15645db71995Sopenharmony_ci}
15655db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_VI_NN
15665db71995Sopenharmony_ci
15675db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_WAYLAND_KHR)
15685db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingWaylandSurf) {
15695db71995Sopenharmony_ci    FrameworkEnvironment env{};
15705db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_WAYLAND_KHR");
15715db71995Sopenharmony_ci
15725db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
15735db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
15745db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
15755db71995Sopenharmony_ci                           "wrap_objects_layer.json");
15765db71995Sopenharmony_ci
15775db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
15785db71995Sopenharmony_ci    instance.create_info.setup_WSI("VK_USE_PLATFORM_WAYLAND_KHR");
15795db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
15805db71995Sopenharmony_ci    instance.CheckCreate();
15815db71995Sopenharmony_ci
15825db71995Sopenharmony_ci    VkWaylandSurfaceCreateInfoKHR surf_create_info = {};
15835db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR;
15845db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
15855db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
15865db71995Sopenharmony_ci    PFN_vkCreateWaylandSurfaceKHR pfn_CreateSurface = instance.load("vkCreateWaylandSurfaceKHR");
15875db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
15885db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
15895db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
15905db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
15915db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
15925db71995Sopenharmony_ci}
15935db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_WAYLAND_KHR
15945db71995Sopenharmony_ci
15955db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_WIN32_KHR)
15965db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingWin32Surf) {
15975db71995Sopenharmony_ci    FrameworkEnvironment env{};
15985db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
15995db71995Sopenharmony_ci
16005db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
16015db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
16025db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
16035db71995Sopenharmony_ci                           "wrap_objects_layer.json");
16045db71995Sopenharmony_ci
16055db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
16065db71995Sopenharmony_ci    instance.create_info.setup_WSI();
16075db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
16085db71995Sopenharmony_ci    instance.CheckCreate();
16095db71995Sopenharmony_ci
16105db71995Sopenharmony_ci    VkWin32SurfaceCreateInfoKHR surf_create_info = {};
16115db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
16125db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
16135db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
16145db71995Sopenharmony_ci    PFN_vkCreateWin32SurfaceKHR pfn_CreateSurface = instance.load("vkCreateWin32SurfaceKHR");
16155db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
16165db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
16175db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
16185db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
16195db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
16205db71995Sopenharmony_ci}
16215db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_WIN32_KHR
16225db71995Sopenharmony_ci
16235db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_XCB_KHR)
16245db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingXCBSurf) {
16255db71995Sopenharmony_ci    FrameworkEnvironment env{};
16265db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
16275db71995Sopenharmony_ci
16285db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
16295db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
16305db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
16315db71995Sopenharmony_ci                           "wrap_objects_layer.json");
16325db71995Sopenharmony_ci
16335db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
16345db71995Sopenharmony_ci    instance.create_info.setup_WSI();
16355db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
16365db71995Sopenharmony_ci    instance.CheckCreate();
16375db71995Sopenharmony_ci
16385db71995Sopenharmony_ci    VkXcbSurfaceCreateInfoKHR surf_create_info = {};
16395db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
16405db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
16415db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
16425db71995Sopenharmony_ci    PFN_vkCreateXcbSurfaceKHR pfn_CreateSurface = instance.load("vkCreateXcbSurfaceKHR");
16435db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
16445db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
16455db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
16465db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
16475db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
16485db71995Sopenharmony_ci}
16495db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_XCB_KHR
16505db71995Sopenharmony_ci
16515db71995Sopenharmony_ci#if defined(VK_USE_PLATFORM_XLIB_KHR)
16525db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingXlibSurf) {
16535db71995Sopenharmony_ci    FrameworkEnvironment env{};
16545db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_XLIB_KHR");
16555db71995Sopenharmony_ci
16565db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
16575db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
16585db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
16595db71995Sopenharmony_ci                           "wrap_objects_layer.json");
16605db71995Sopenharmony_ci
16615db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
16625db71995Sopenharmony_ci    instance.create_info.setup_WSI("VK_USE_PLATFORM_XLIB_KHR");
16635db71995Sopenharmony_ci    //
16645db71995Sopenharmony_ci    for (auto& ext : instance.create_info.enabled_extensions) {
16655db71995Sopenharmony_ci        std::cout << ext << "\n";
16665db71995Sopenharmony_ci    }
16675db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
16685db71995Sopenharmony_ci    instance.CheckCreate();
16695db71995Sopenharmony_ci
16705db71995Sopenharmony_ci    VkXlibSurfaceCreateInfoKHR surf_create_info = {};
16715db71995Sopenharmony_ci    surf_create_info.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR;
16725db71995Sopenharmony_ci    surf_create_info.pNext = nullptr;
16735db71995Sopenharmony_ci    VkSurfaceKHR created_surface = VK_NULL_HANDLE;
16745db71995Sopenharmony_ci    PFN_vkCreateXlibSurfaceKHR pfn_CreateSurface = instance.load("vkCreateXlibSurfaceKHR");
16755db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateSurface, nullptr);
16765db71995Sopenharmony_ci    PFN_vkDestroySurfaceKHR pfn_DestroySurface = instance.load("vkDestroySurfaceKHR");
16775db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroySurface, nullptr);
16785db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateSurface(instance, &surf_create_info, nullptr, &created_surface));
16795db71995Sopenharmony_ci    pfn_DestroySurface(instance, created_surface, nullptr);
16805db71995Sopenharmony_ci}
16815db71995Sopenharmony_ci#endif  // VK_USE_PLATFORM_XLIB_KHR
16825db71995Sopenharmony_ci
16835db71995Sopenharmony_ciVKAPI_ATTR VkBool32 VKAPI_CALL JunkDebugUtilsCallback([[maybe_unused]] VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
16845db71995Sopenharmony_ci                                                      [[maybe_unused]] VkDebugUtilsMessageTypeFlagsEXT messageTypes,
16855db71995Sopenharmony_ci                                                      [[maybe_unused]] const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
16865db71995Sopenharmony_ci                                                      [[maybe_unused]] void* pUserData) {
16875db71995Sopenharmony_ci    // This is just a stub callback in case the loader or any other layer triggers it.
16885db71995Sopenharmony_ci    return VK_FALSE;
16895db71995Sopenharmony_ci}
16905db71995Sopenharmony_ci
16915db71995Sopenharmony_ciTEST(LoaderHandleValidTests, VerifyHandleWrappingDebugUtilsMessenger) {
16925db71995Sopenharmony_ci    FrameworkEnvironment env{};
16935db71995Sopenharmony_ci    Extension ext{"VK_EXT_debug_utils"};
16945db71995Sopenharmony_ci    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_instance_extensions({ext});
16955db71995Sopenharmony_ci
16965db71995Sopenharmony_ci    const char* wrap_objects_name = "WrapObjectsLayer";
16975db71995Sopenharmony_ci    env.add_explicit_layer(ManifestLayer{}.add_layer(
16985db71995Sopenharmony_ci                               ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
16995db71995Sopenharmony_ci                           "wrap_objects_layer.json");
17005db71995Sopenharmony_ci
17015db71995Sopenharmony_ci    InstWrapper instance(env.vulkan_functions);
17025db71995Sopenharmony_ci    instance.create_info.add_extension("VK_EXT_debug_utils");
17035db71995Sopenharmony_ci    instance.create_info.add_layer(wrap_objects_name);
17045db71995Sopenharmony_ci    instance.CheckCreate();
17055db71995Sopenharmony_ci
17065db71995Sopenharmony_ci    VkDebugUtilsMessengerCreateInfoEXT debug_messenger_create_info = {};
17075db71995Sopenharmony_ci    debug_messenger_create_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
17085db71995Sopenharmony_ci    debug_messenger_create_info.pNext = nullptr;
17095db71995Sopenharmony_ci    debug_messenger_create_info.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
17105db71995Sopenharmony_ci    debug_messenger_create_info.messageType =
17115db71995Sopenharmony_ci        VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
17125db71995Sopenharmony_ci    debug_messenger_create_info.pfnUserCallback = reinterpret_cast<PFN_vkDebugUtilsMessengerCallbackEXT>(JunkDebugUtilsCallback);
17135db71995Sopenharmony_ci    VkDebugUtilsMessengerEXT messenger = VK_NULL_HANDLE;
17145db71995Sopenharmony_ci    PFN_vkCreateDebugUtilsMessengerEXT pfn_CreateMessenger = instance.load("vkCreateDebugUtilsMessengerEXT");
17155db71995Sopenharmony_ci    ASSERT_NE(pfn_CreateMessenger, nullptr);
17165db71995Sopenharmony_ci    PFN_vkDestroyDebugUtilsMessengerEXT pfn_DestroyMessenger = instance.load("vkDestroyDebugUtilsMessengerEXT");
17175db71995Sopenharmony_ci    ASSERT_NE(pfn_DestroyMessenger, nullptr);
17185db71995Sopenharmony_ci    ASSERT_EQ(VK_SUCCESS, pfn_CreateMessenger(instance, &debug_messenger_create_info, nullptr, &messenger));
17195db71995Sopenharmony_ci    pfn_DestroyMessenger(instance, messenger, nullptr);
17205db71995Sopenharmony_ci}
1721