Add test for no drivers and no physical devices
authorCharles Giessen <charles@lunarg.com>
Mon, 6 Dec 2021 21:10:12 +0000 (14:10 -0700)
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>
Sat, 11 Dec 2021 00:08:23 +0000 (17:08 -0700)
tests/loader_regression_tests.cpp

index 225e79c..8ccd548 100644 (file)
@@ -114,6 +114,12 @@ TEST_F(CreateInstance, LayerPresent) {
     inst.CheckCreate();
 }
 
+TEST(NoDrivers, CreateInstance) {
+    FrameworkEnvironment env{};
+    InstWrapper inst{env.vulkan_functions};
+    inst.CheckCreate(VK_ERROR_INCOMPATIBLE_DRIVER);
+}
+
 TEST_F(EnumerateInstanceLayerProperties, UsageChecks) {
     const char* layer_name_1 = "TestLayer1";
     const char* layer_name_2 = "TestLayer1";
@@ -448,6 +454,27 @@ TEST_F(EnumeratePhysicalDevices, TwoCallIncomplete) {
     ASSERT_EQ(physical_count, 1);
 }
 
+TEST_F(EnumeratePhysicalDevices, ZeroPhysicalDevicesAfterCreateInstance) {
+    auto& driver = env->get_test_icd().SetMinICDInterfaceVersion(5);
+    InstWrapper inst{env->vulkan_functions};
+    inst.create_info.set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
+    inst.CheckCreate();
+    driver.physical_devices.clear();
+
+    uint32_t physical_device_count = 1000;  // not zero starting value
+    VkPhysicalDevice physical_device{};
+
+    EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, inst->vkEnumeratePhysicalDevices(inst, &physical_device_count, nullptr));
+    EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, inst->vkEnumeratePhysicalDevices(inst, &physical_device_count, &physical_device));
+
+    uint32_t physical_device_group_count = 1000;  // not zero starting value
+    VkPhysicalDeviceGroupProperties physical_device_group_properties{};
+
+    EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED, inst->vkEnumeratePhysicalDeviceGroups(inst, &physical_device_group_count, nullptr));
+    EXPECT_EQ(VK_ERROR_INITIALIZATION_FAILED,
+              inst->vkEnumeratePhysicalDeviceGroups(inst, &physical_device_group_count, &physical_device_group_properties));
+}
+
 TEST_F(CreateDevice, ExtensionNotPresent) {
     auto& driver = env->get_test_icd();