Refactor return value of env.add_icd()
authorCharles Giessen <charles@lunarg.com>
Mon, 19 Jun 2023 03:47:51 +0000 (21:47 -0600)
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>
Tue, 20 Jun 2023 19:49:58 +0000 (13:49 -0600)
Make it return the driver that was just added rather than the ICD that
holds the driver, allowing for more concise code. This is because most
tests which modify the driver in some fashion do it in one go, and by
using the builder pattern, can be done all in a single statement.

16 files changed:
tests/framework/icd/physical_device.h
tests/framework/icd/test_icd.h
tests/framework/test_environment.cpp
tests/framework/test_environment.h
tests/loader_alloc_callback_tests.cpp
tests/loader_debug_ext_tests.cpp
tests/loader_envvar_tests.cpp
tests/loader_get_proc_addr_tests.cpp
tests/loader_handle_validation_tests.cpp
tests/loader_layer_tests.cpp
tests/loader_regression_tests.cpp
tests/loader_settings_tests.cpp
tests/loader_threading_tests.cpp
tests/loader_unknown_ext_tests.cpp
tests/loader_version_tests.cpp
tests/loader_wsi_tests.cpp

index f69e98ee01de4a80b6bbf0ac135159879f88fb21..b4b17f7e4e195bf5fcc90173d3826f6370b6b76d 100644 (file)
@@ -63,6 +63,13 @@ struct PhysicalDevice {
     BUILDER_VALUE(PhysicalDevice, VkDisplayModeKHR, display_mode, {})
     BUILDER_VALUE(PhysicalDevice, VkDisplayPlaneCapabilitiesKHR, display_plane_capabilities, {})
 
+    PhysicalDevice& set_api_version(uint32_t version) {
+        properties.apiVersion = version;
+        return *this;
+    }
+
+    PhysicalDevice&& finish() { return std::move(*this); }
+
     // Objects created from this physical device
     std::vector<VkDevice> device_handles;
     std::vector<DeviceCreateInfo> device_create_infos;
index 0075f8e8dab80e56d3c0db3ec999fcf097c08d06..bb0ad8343c89cdad4bb9cf63f66ffd7f47e8f4da 100644 (file)
@@ -131,7 +131,7 @@ struct TestICD {
     BUILDER_VALUE(TestICD, bool, supports_tooling_info_ext, false);
     BUILDER_VALUE(TestICD, bool, supports_tooling_info_core, false);
     // List of tooling properties that this driver 'supports'
-    std::vector<VkPhysicalDeviceToolPropertiesEXT> tooling_properties;
+    BUILDER_VECTOR(TestICD, VkPhysicalDeviceToolPropertiesEXT, tooling_properties, tooling_property)
     std::vector<DispatchableHandle<VkCommandBuffer>> allocated_command_buffers;
 
     VkInstanceCreateFlags passed_in_instance_create_flags{};
index ef83e89752a4d4847b31f9fd56e2910104c307c1..bfd0f536d2d5e61afba708567b8be20e672ab992 100644 (file)
@@ -440,7 +440,7 @@ FrameworkEnvironment::~FrameworkEnvironment() {
     platform_shim->is_during_destruction = true;
 }
 
-TestICDHandle& FrameworkEnvironment::add_icd(TestICDDetails icd_details) noexcept {
+TestICD& FrameworkEnvironment::add_icd(TestICDDetails icd_details) noexcept {
     size_t cur_icd_index = icds.size();
     fs::FolderManager* folder = &get_folder(ManifestLocation::driver);
     if (icd_details.discovery_type == ManifestDiscoveryType::env_var ||
@@ -522,7 +522,7 @@ TestICDHandle& FrameworkEnvironment::add_icd(TestICDDetails icd_details) noexcep
 #endif
         }
     }
-    return icds.back();
+    return icds.back().get_test_icd();
 }
 
 void FrameworkEnvironment::add_implicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept {
index a41a5494c18cbf7003f703a1996d444fd148769a..5ac61636523c0f27d89152795d08b36328ac5ea0 100644 (file)
@@ -572,7 +572,7 @@ struct FrameworkEnvironment {
     FrameworkEnvironment(const FrameworkEnvironment&) = delete;
     FrameworkEnvironment& operator=(const FrameworkEnvironment&) = delete;
 
-    TestICDHandle& add_icd(TestICDDetails icd_details) noexcept;
+    TestICD& add_icd(TestICDDetails icd_details) noexcept;
     void add_implicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept;
     void add_implicit_layer(TestLayerDetails layer_details) noexcept;
     void add_explicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept;
index a66edaf63ff17703b3293f130bc7fdf2ec5d283f..45376f291b14ccfa22ed5abe9b23f26bd89729d3 100644 (file)
@@ -212,11 +212,9 @@ TEST(Allocation, GetInstanceProcAddr) {
 // a vkEnumeratePhysicalDevices call pair.
 TEST(Allocation, EnumeratePhysicalDevices) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     MemoryTracker tracker;
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
     {
         InstWrapper inst{env.vulkan_functions, tracker.get()};
         ASSERT_NO_FATAL_FAILURE(inst.CheckCreate());
@@ -237,12 +235,12 @@ TEST(Allocation, EnumeratePhysicalDevices) {
 // allocators used on both the instance and device.
 TEST(Allocation, InstanceAndDevice) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device(PhysicalDevice{"physical_device_0"}
+                                 .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false})
+                                 .finish());
 
     MemoryTracker tracker;
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-    driver.physical_devices[0].add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
     {
         InstWrapper inst{env.vulkan_functions, tracker.get()};
         ASSERT_NO_FATAL_FAILURE(inst.CheckCreate());
@@ -286,14 +284,13 @@ TEST(Allocation, InstanceAndDevice) {
 // allocators used on only the instance and not the device.
 TEST(Allocation, InstanceButNotDevice) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device(PhysicalDevice{"physical_device_0"}
+                                 .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false})
+                                 .finish());
 
     MemoryTracker tracker;
     {
-        auto& driver = env.get_test_icd();
-        driver.physical_devices.emplace_back("physical_device_0");
-        driver.physical_devices[0].add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
-
         InstWrapper inst{env.vulkan_functions, tracker.get()};
         ASSERT_NO_FATAL_FAILURE(inst.CheckCreate());
 
@@ -336,7 +333,10 @@ TEST(Allocation, InstanceButNotDevice) {
 // allocators used on only the device and not the instance.
 TEST(Allocation, DeviceButNotInstance) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device(PhysicalDevice{"physical_device_0"}
+                                 .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false})
+                                 .finish());
 
     const char* layer_name = "VkLayerImplicit0";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -348,10 +348,6 @@ TEST(Allocation, DeviceButNotInstance) {
 
     MemoryTracker tracker;
     {
-        auto& driver = env.get_test_icd();
-        driver.physical_devices.emplace_back("physical_device_0");
-        driver.physical_devices[0].add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
-
         InstWrapper inst{env.vulkan_functions};
         ASSERT_NO_FATAL_FAILURE(inst.CheckCreate());
 
@@ -424,8 +420,7 @@ TEST(Allocation, CreateInstanceIntentionalAllocFail) {
 // one of the out-of-memory conditions trigger.
 TEST(Allocation, CreateSurfaceIntentionalAllocFail) {
     FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().setup_WSI();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     const char* layer_name = "VkLayerImplicit0";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -507,8 +502,7 @@ TEST(Allocation, CreateInstanceIntentionalAllocFailWithSettingsFilePresent) {
 // one of the out-of-memory conditions trigger.
 TEST(Allocation, CreateSurfaceIntentionalAllocFailWithSettingsFilePresent) {
     FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().setup_WSI();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     const char* layer_name = "VkLayerImplicit0";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -592,13 +586,13 @@ TEST(Allocation, DriverEnvVarIntentionalAllocFail) {
 // may fail.
 TEST(Allocation, CreateDeviceIntentionalAllocFail) {
     FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("error,warn")};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-    driver.physical_devices[0].add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
-    driver.physical_devices.emplace_back("physical_device_1");
-    driver.physical_devices[1].add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device(PhysicalDevice{"physical_device_0"}
+                                 .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false})
+                                 .finish())
+        .add_physical_device(PhysicalDevice{"physical_device_1"}
+                                 .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false})
+                                 .finish());
 
     const char* layer_name = "VK_LAYER_VkLayerImplicit0";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -664,22 +658,22 @@ TEST(Allocation, CreateInstanceDeviceIntentionalAllocFail) {
     for (uint32_t i = 0; i < num_physical_devices; i++) {
         env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)
                         .icd_manifest.set_is_portability_driver(false)
-                        .set_library_arch(sizeof(void*) == 8 ? "64" : "32"));
-        auto& driver = env.get_test_icd(i);
-        driver.set_icd_api_version(VK_API_VERSION_1_1);
-        driver.add_instance_extension("VK_KHR_get_physical_device_properties2");
-        driver.physical_devices.emplace_back("physical_device_0");
-        driver.physical_devices[0].add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
-        driver.physical_devices[0].add_extensions({"VK_EXT_one", "VK_EXT_two", "VK_EXT_three", "VK_EXT_four", "VK_EXT_five"});
+                        .set_library_arch(sizeof(void*) == 8 ? "64" : "32"))
+            .set_icd_api_version(VK_API_VERSION_1_1)
+            .add_instance_extension("VK_KHR_get_physical_device_properties2")
+            .add_physical_device("physical_device_0")
+            .physical_devices.at(0)
+            .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false})
+            .add_extensions({"VK_EXT_one", "VK_EXT_two", "VK_EXT_three", "VK_EXT_four", "VK_EXT_five"});
     }
 
     env.add_icd(TestICDDetails(CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE).set_is_fake(true));
 
-    auto& direct_driver_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none));
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none));
 
     VkDirectDriverLoadingInfoLUNARG ddl_info{};
     ddl_info.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG;
-    ddl_info.pfnGetInstanceProcAddr = direct_driver_icd.icd_library.get_symbol("vk_icdGetInstanceProcAddr");
+    ddl_info.pfnGetInstanceProcAddr = env.icds.back().icd_library.get_symbol("vk_icdGetInstanceProcAddr");
 
     VkDirectDriverLoadingListLUNARG ddl_list{};
     ddl_list.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG;
@@ -838,8 +832,8 @@ TEST(Allocation, EnumeratePhysicalDevicesIntentionalAllocFail) {
         auto& driver = env.reset_icd();
 
         for (uint32_t i = 0; i < physical_dev_count; i++) {
-            driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i));
-            driver.physical_devices[i].add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
+            driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i))
+                .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
         }
         MemoryTracker tracker{{false, 0, true, fail_index}};
         InstanceCreateInfo inst_create_info;
@@ -860,8 +854,8 @@ TEST(Allocation, EnumeratePhysicalDevicesIntentionalAllocFail) {
         ASSERT_EQ(physical_dev_count, returned_physical_count);
 
         for (uint32_t i = 0; i < 2; i++) {
-            driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(physical_dev_count));
-            driver.physical_devices.back().add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
+            driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(physical_dev_count))
+                .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
             physical_dev_count += 1;
         }
 
@@ -934,8 +928,8 @@ TEST(Allocation, CreateInstanceDeviceWithDXGIDriverIntentionalAllocFail) {
 
     for (uint32_t i = 0; i < 2; i++) {
         auto& driver = env.get_test_icd(i);
-        driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i));
-        driver.physical_devices[0].add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
+        driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i))
+            .add_queue_family_properties({{VK_QUEUE_GRAPHICS_BIT, 1, 0, {1, 1, 1}}, false});
     }
 
     const char* layer_name = "VkLayerImplicit0";
@@ -951,7 +945,7 @@ TEST(Allocation, CreateInstanceDeviceWithDXGIDriverIntentionalAllocFail) {
     desc1.VendorId = known_driver.vendor_id;
     desc1.AdapterLuid = _LUID{10, 1000};
     env.platform_shim->add_dxgi_adapter(GpuType::discrete, desc1);
-    env.get_test_icd().set_adapterLUID(desc1.AdapterLuid);
+    env.get_test_icd(0).set_adapterLUID(desc1.AdapterLuid);
 
     env.platform_shim->add_d3dkmt_adapter(D3DKMT_Adapter{0, _LUID{10, 1000}}.add_driver_manifest_path(env.get_icd_manifest_path()));
 
index 448fdb869ac5673f54486387d1180760351b07fc..4a4f778ea8bca0a939fc768ea444c7b2fd906288 100644 (file)
@@ -1049,10 +1049,9 @@ void CheckDeviceFunctions(FrameworkEnvironment& env, bool use_GIPA, bool enable_
 
 TEST(GetDeviceProcAddr, DebugFuncsWithTerminator) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().setup_WSI();
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
-    env.get_test_icd().physical_devices.at(0).add_extensions({"VK_KHR_swapchain"});
+    auto& driver =
+        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).setup_WSI().add_physical_device("physical_device_0");
+    driver.physical_devices.at(0).add_extensions({"VK_KHR_swapchain"});
     // Hardware doesn't support the debug extensions
 
     // Use getDeviceProcAddr & vary enabling the debug extensions
@@ -1064,8 +1063,8 @@ TEST(GetDeviceProcAddr, DebugFuncsWithTerminator) {
     ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, true, true));
 
     // Now set the hardware to support the extensions and run the situations again
-    env.get_test_icd().physical_devices.at(0).add_extensions({"VK_EXT_debug_marker"});
-    env.get_test_icd().add_instance_extension("VK_EXT_debug_utils");
+    driver.add_instance_extension("VK_EXT_debug_utils");
+    driver.physical_devices.at(0).add_extensions({"VK_EXT_debug_marker"});
 
     // Use getDeviceProcAddr & vary enabling the debug extensions
     ASSERT_NO_FATAL_FAILURE(CheckDeviceFunctions(env, false, false));
index 1f8f29f3b4309d67215f81b382b85aebbc95251b..e1ce7275fee3c3c9a3206329a46a0ef666accd4b 100644 (file)
@@ -92,7 +92,7 @@ TEST(EnvVarICDOverrideSetup, version_2_negotiate_interface_version_and_icd_gipa_
 TEST(EnvVarICDOverrideSetup, TestOnlyDriverEnvVar) {
     FrameworkEnvironment env{};
     env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::env_var));
-    env.get_test_icd(0).physical_devices.emplace_back("pd0");
+    env.get_test_icd(0).add_physical_device("pd0");
 
     InstWrapper inst1{env.vulkan_functions};
     FillDebugUtilsCreateDetails(inst1.create_info, env.debug_log);
@@ -106,9 +106,9 @@ TEST(EnvVarICDOverrideSetup, TestOnlyDriverEnvVar) {
     ASSERT_EQ(phys_dev_count, 1U);
 
     for (uint32_t add = 0; add < 2; ++add) {
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::env_var));
-        env.get_test_icd(add + 1).physical_devices.emplace_back("pd" + std::to_string(add) + "0");
-        env.get_test_icd(add + 1).physical_devices.emplace_back("pd" + std::to_string(add) + "1");
+        env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::env_var))
+            .add_physical_device("pd" + std::to_string(add) + "0")
+            .add_physical_device("pd" + std::to_string(add) + "1");
     }
 
     env.debug_log.clear();
@@ -138,8 +138,7 @@ TEST(EnvVarICDOverrideSetup, TestOnlyDriverEnvVar) {
 // Make sure the loader reports the correct message based on if LOADER_USE_UNSAFE_FILE_SEARCH is set or not
 TEST(EnvVarICDOverrideSetup, NonSecureEnvVarLookup) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0");
 
     DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT};
     InstWrapper inst{env.vulkan_functions};
@@ -166,8 +165,7 @@ TEST(EnvVarICDOverrideSetup, XDG) {
     EnvVarWrapper xdg_data_home_env_var{"XDG_DATA_HOME", "::::/tmp/goober3:/tmp/goober4/with spaces:::"};
 
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0");
 
     InstWrapper inst{env.vulkan_functions};
     FillDebugUtilsCreateDetails(inst.create_info, env.debug_log);
@@ -191,8 +189,7 @@ TEST(EnvVarICDOverrideSetup, XDGContainsJsonFile) {
     EnvVarWrapper xdg_config_dirs_env_var{"XDG_CONFIG_DIRS", "bad_file.json"};
 
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0");
 
     InstWrapper inst{env.vulkan_functions};
     FillDebugUtilsCreateDetails(inst.create_info, env.debug_log);
@@ -232,11 +229,10 @@ TEST(EnvVarICDOverrideSetup, TestBothDriverEnvVars) {
 
     // Add a driver that isn't enabled with the environment variable
     env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::env_var));
-    env.get_test_icd(0).physical_devices.emplace_back("pd0");
-    env.get_test_icd(0).physical_devices.emplace_back("pd1");
+    env.get_test_icd(0).add_physical_device("pd0").add_physical_device("pd1");
 
     env.add_icd(TestICDDetails(TEST_ICD_PATH_EXPORT_NONE).set_discovery_type(ManifestDiscoveryType::add_env_var));
-    env.get_test_icd(0).physical_devices.emplace_back("pd2");
+    env.get_test_icd(0).add_physical_device("pd2");
 
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
@@ -252,8 +248,7 @@ TEST(EnvVarICDOverrideSetup, TestBothDriverEnvVars) {
 // Test VK_LAYER_PATH environment variable
 TEST(EnvVarICDOverrideSetup, TestOnlyLayerEnvVar) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0");
     env.platform_shim->redirect_path("/tmp/carol", env.get_folder(ManifestLocation::explicit_layer_env_var).location());
 
     const char* layer_name = "TestLayer";
@@ -298,8 +293,7 @@ TEST(EnvVarICDOverrideSetup, TestOnlyLayerEnvVar) {
 // Test VK_ADD_LAYER_PATH environment variable
 TEST(EnvVarICDOverrideSetup, TestOnlyAddLayerEnvVar) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0");
     env.platform_shim->redirect_path("/tmp/carol", env.get_folder(ManifestLocation::explicit_layer_add_env_var).location());
 
     const char* layer_name = "TestLayer";
index 115b2fc00b4284267cad6b6bd89c6581bca54e71..9ccf8e5fa6c2d3f7888677b29424a7c3364b4b6f 100644 (file)
@@ -30,8 +30,7 @@
 // Verify that the various ways to get vkGetInstanceProcAddr return the same value
 TEST(GetProcAddr, VerifyGetInstanceProcAddr) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0");
     {
         InstWrapper inst{env.vulkan_functions};
         inst.create_info.set_api_version(VK_API_VERSION_1_1);
@@ -62,8 +61,7 @@ TEST(GetProcAddr, VerifyGetInstanceProcAddr) {
 // Verify that the various ways to get vkGetDeviceProcAddr return the same value
 TEST(GetProcAddr, VerifyGetDeviceProcAddr) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0");
 
     InstWrapper inst{env.vulkan_functions};
     inst.create_info.set_api_version(VK_API_VERSION_1_1);
@@ -87,8 +85,7 @@ TEST(GetProcAddr, VerifyGetDeviceProcAddr) {
 // Call the function to make sure it is callable, don't care about what is returned.
 TEST(GetProcAddr, GlobalFunctions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0");
 
     auto& gipa = env.vulkan_functions.vkGetInstanceProcAddr;
     // global entry points with NULL instance handle
@@ -186,9 +183,8 @@ TEST(GetProcAddr, GlobalFunctions) {
 // and return VK_SUCCESS to maintain previous behavior.
 TEST(GetDeviceProcAddr, SwapchainFuncsWithTerminator) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().setup_WSI();
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    auto& driver =
+        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).setup_WSI().add_physical_device("physical_device_0");
 
     InstWrapper inst(env.vulkan_functions);
     inst.create_info.add_extension("VK_EXT_debug_utils");
@@ -241,10 +237,8 @@ TEST(GetDeviceProcAddr, SwapchainFuncsWithTerminator) {
 
         if (CreateSharedSwapchainsKHR) CreateSharedSwapchainsKHR(dev.dev, 1, &info, nullptr, &swapchain);
     }
+    driver.physical_devices.at(0).add_extensions({"VK_KHR_swapchain", "VK_KHR_display_swapchain", "VK_EXT_debug_marker"});
     {
-        env.get_test_icd().physical_devices.at(0).add_extensions(
-            {"VK_KHR_swapchain", "VK_KHR_display_swapchain", "VK_EXT_debug_marker"});
-
         DeviceWrapper dev{inst};
         dev.create_info.add_extensions({"VK_KHR_swapchain", "VK_KHR_display_swapchain", "VK_EXT_debug_marker"});
         ASSERT_NO_FATAL_FAILURE(dev.CheckCreate(phys_dev));
@@ -289,8 +283,7 @@ TEST(GetDeviceProcAddr, SwapchainFuncsWithTerminator) {
 // Verify that the various ways to get vkGetDeviceProcAddr return the same value
 TEST(GetProcAddr, PreserveLayerGettingVkCreateDeviceWithNullInstance) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0");
 
     env.add_implicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
                                                                           .set_name("VK_LAYER_technically_buggy_layer")
index 84709f191c3d0df5f89a0b1ff18fbacf1de3ba55..24cb303bef2aebee1f150aa3e7d4b44367cf721c 100644 (file)
@@ -41,9 +41,7 @@ T get_bad_handle() {
 
 TEST(LoaderHandleValidTests, BadInstEnumPhysDevices) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     InstWrapper instance(env.vulkan_functions);
     instance.CheckCreate();
@@ -57,9 +55,7 @@ TEST(LoaderHandleValidTests, BadInstEnumPhysDevices) {
 
 TEST(LoaderHandleValidTests, BadInstGetInstProcAddr) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     InstWrapper instance(env.vulkan_functions);
     instance.CheckCreate();
@@ -71,9 +67,7 @@ TEST(LoaderHandleValidTests, BadInstGetInstProcAddr) {
 
 TEST(LoaderHandleValidTests, BadInstDestroyInstance) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     InstWrapper instance(env.vulkan_functions);
     instance.CheckCreate();
@@ -86,15 +80,14 @@ TEST(LoaderHandleValidTests, BadInstDestroyInstance) {
 
 TEST(LoaderHandleValidTests, BadInstDestroySurface) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
     Extension first_ext{"VK_KHR_surface"};
     Extension second_ext{"VK_EXT_headless_surface"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_instance_extensions({first_ext, second_ext})
+        .add_physical_device("physical_device_0");
 
     InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
+    instance.create_info.add_extension(first_ext.extensionName.c_str());
     instance.CheckCreate();
 
     auto bad_instance = get_bad_handle<VkInstance>();
@@ -105,16 +98,14 @@ TEST(LoaderHandleValidTests, BadInstDestroySurface) {
 
 TEST(LoaderHandleValidTests, BadInstCreateHeadlessSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
     Extension first_ext{"VK_KHR_surface"};
     Extension second_ext{"VK_EXT_headless_surface"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_instance_extensions({first_ext, second_ext})
+        .add_physical_device("physical_device_0");
 
     InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_EXT_headless_surface");
+    instance.create_info.add_extensions({first_ext.extensionName.c_str(), second_ext.extensionName.c_str()});
     instance.CheckCreate();
 
     auto bad_instance = get_bad_handle<VkInstance>();
@@ -129,16 +120,14 @@ TEST(LoaderHandleValidTests, BadInstCreateHeadlessSurf) {
 
 TEST(LoaderHandleValidTests, BadInstCreateDisplayPlaneSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
     Extension first_ext{"VK_KHR_surface"};
     Extension second_ext{"VK_KHR_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_instance_extensions({first_ext, second_ext})
+        .add_physical_device("physical_device_0");
 
     InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_display");
+    instance.create_info.add_extensions({first_ext.extensionName.c_str(), second_ext.extensionName.c_str()});
     instance.CheckCreate();
 
     auto bad_instance = get_bad_handle<VkInstance>();
@@ -154,10 +143,7 @@ TEST(LoaderHandleValidTests, BadInstCreateDisplayPlaneSurf) {
 #if defined(VK_USE_PLATFORM_ANDROID_KHR)
 TEST(LoaderHandleValidTests, BadInstCreateAndroidSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -177,10 +163,7 @@ TEST(LoaderHandleValidTests, BadInstCreateAndroidSurf) {
 #if defined(VK_USE_PLATFORM_DIRECTFB_EXT)
 TEST(LoaderHandleValidTests, BadInstCreateDirectFBSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -200,10 +183,7 @@ TEST(LoaderHandleValidTests, BadInstCreateDirectFBSurf) {
 #if defined(VK_USE_PLATFORM_FUCHSIA)
 TEST(LoaderHandleValidTests, BadInstCreateFuchsiaSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -223,10 +203,7 @@ TEST(LoaderHandleValidTests, BadInstCreateFuchsiaSurf) {
 #if defined(VK_USE_PLATFORM_GGP)
 TEST(LoaderHandleValidTests, BadInstCreateGGPSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -247,10 +224,7 @@ TEST(LoaderHandleValidTests, BadInstCreateGGPSurf) {
 #if defined(VK_USE_PLATFORM_IOS_MVK)
 TEST(LoaderHandleValidTests, BadInstCreateIOSSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -270,10 +244,7 @@ TEST(LoaderHandleValidTests, BadInstCreateIOSSurf) {
 #if defined(VK_USE_PLATFORM_MACOS_MVK)
 TEST(LoaderHandleValidTests, BadInstCreateMacOSSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -293,10 +264,7 @@ TEST(LoaderHandleValidTests, BadInstCreateMacOSSurf) {
 #if defined(VK_USE_PLATFORM_METAL_EXT)
 TEST(LoaderHandleValidTests, BadInstCreateMetalSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -316,10 +284,7 @@ TEST(LoaderHandleValidTests, BadInstCreateMetalSurf) {
 #if defined(VK_USE_PLATFORM_SCREEN_QNX)
 TEST(LoaderHandleValidTests, BadInstCreateQNXSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -340,10 +305,7 @@ TEST(LoaderHandleValidTests, BadInstCreateQNXSurf) {
 #if defined(VK_USE_PLATFORM_VI_NN)
 TEST(LoaderHandleValidTests, BadInstCreateViNNSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -364,10 +326,7 @@ TEST(LoaderHandleValidTests, BadInstCreateViNNSurf) {
 #if defined(VK_USE_PLATFORM_WAYLAND_KHR)
 TEST(LoaderHandleValidTests, BadInstCreateWaylandSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -388,10 +347,7 @@ TEST(LoaderHandleValidTests, BadInstCreateWaylandSurf) {
 #if defined(VK_USE_PLATFORM_WIN32_KHR)
 TEST(LoaderHandleValidTests, BadInstCreateWin32Surf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -412,10 +368,7 @@ TEST(LoaderHandleValidTests, BadInstCreateWin32Surf) {
 #if defined(VK_USE_PLATFORM_XCB_KHR)
 TEST(LoaderHandleValidTests, BadInstCreateXCBSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -436,10 +389,7 @@ TEST(LoaderHandleValidTests, BadInstCreateXCBSurf) {
 #if defined(VK_USE_PLATFORM_XLIB_KHR)
 TEST(LoaderHandleValidTests, BadInstCreateXlibSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -461,9 +411,9 @@ TEST(LoaderHandleValidTests, BadInstCreateXlibSurf) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFeature) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -479,9 +429,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFeature) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFormatProps) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -497,9 +447,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFormatProps) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevImgFormatProps) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -517,9 +467,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevImgFormatProps) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevProps) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -535,9 +485,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevProps) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamProps) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -552,9 +502,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamProps) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDevMemProps) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -570,9 +520,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDevMemProps) {
 
 TEST(LoaderHandleValidTests, BadPhysDevCreateDevice) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -606,9 +556,9 @@ TEST(LoaderHandleValidTests, BadPhysDevCreateDevice) {
 
 TEST(LoaderHandleValidTests, BadPhysDevEnumDevExtProps) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -623,9 +573,9 @@ TEST(LoaderHandleValidTests, BadPhysDevEnumDevExtProps) {
 
 TEST(LoaderHandleValidTests, BadPhysDevEnumDevLayerProps) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -640,9 +590,9 @@ TEST(LoaderHandleValidTests, BadPhysDevEnumDevLayerProps) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSparseImgFormatProps) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -660,9 +610,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSparseImgFormatProps) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFeature2) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -680,9 +630,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFeature2) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFormatProps2) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -700,9 +650,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFormatProps2) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevImgFormatProps2) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -723,9 +673,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevImgFormatProps2) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevProps2) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -743,9 +693,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevProps2) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamProps2) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -760,9 +710,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamProps2) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDevMemProps2) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -780,9 +730,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDevMemProps2) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSparseImgFormatProps2) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -801,9 +751,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSparseImgFormatProps2) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternFenceProps) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -822,9 +772,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternFenceProps) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternBufferProps) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -843,9 +793,9 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternBufferProps) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternSemaphoreProps) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.set_api_version(1, 1, 0);
@@ -864,15 +814,14 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevExternSemaphoreProps) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceSupportKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
     Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_EXT_headless_surface"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
+    Extension second_ext{"VK_KHR_display"};
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_instance_extensions({first_ext, second_ext})
+        .add_physical_device("physical_device_0");
 
     InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
+    instance.create_info.add_extension(first_ext.extensionName.c_str());
     instance.CheckCreate();
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
@@ -885,15 +834,14 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceSupportKHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceCapsKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
     Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_EXT_headless_surface"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
+    Extension second_ext{"VK_KHR_display"};
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_instance_extensions({first_ext, second_ext})
+        .add_physical_device("physical_device_0");
 
     InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
+    instance.create_info.add_extension(first_ext.extensionName.c_str());
     instance.CheckCreate();
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
@@ -905,15 +853,14 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceCapsKHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceFormatsKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
     Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_EXT_headless_surface"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
+    Extension second_ext{"VK_KHR_display"};
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_instance_extensions({first_ext, second_ext})
+        .add_physical_device("physical_device_0");
 
     InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
+    instance.create_info.add_extension(first_ext.extensionName.c_str());
     instance.CheckCreate();
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
@@ -925,15 +872,14 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceFormatsKHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfacePresentModesKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
     Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_EXT_headless_surface"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
+    Extension second_ext{"VK_KHR_display"};
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_instance_extensions({first_ext, second_ext})
+        .add_physical_device("physical_device_0");
 
     InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
+    instance.create_info.add_extension(first_ext.extensionName.c_str());
     instance.CheckCreate();
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
@@ -946,10 +892,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfacePresentModesKHR) {
 #if defined(VK_USE_PLATFORM_DIRECTFB_EXT)
 TEST(LoaderHandleValidTests, BadPhysDevGetDirectFBPresentSupportKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -966,10 +909,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetDirectFBPresentSupportKHR) {
 #if defined(VK_USE_PLATFORM_SCREEN_QNX)
 TEST(LoaderHandleValidTests, BadPhysDevGetQNXPresentSupportKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -985,10 +925,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetQNXPresentSupportKHR) {
 #if defined(VK_USE_PLATFORM_WAYLAND_KHR)
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevWaylandPresentSupportKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -1004,10 +941,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevWaylandPresentSupportKHR) {
 #if defined(VK_USE_PLATFORM_WIN32_KHR)
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevWin32PresentSupportKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -1023,10 +957,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevWin32PresentSupportKHR) {
 #if defined(VK_USE_PLATFORM_XCB_KHR)
 TEST(LoaderHandleValidTests, BadPhysDevGetXCBPresentSupportKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -1043,10 +974,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetXCBPresentSupportKHR) {
 #if defined(VK_USE_PLATFORM_XLIB_KHR)
 TEST(LoaderHandleValidTests, BadPhysDevGetXlibPresentSupportKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
@@ -1061,19 +989,25 @@ TEST(LoaderHandleValidTests, BadPhysDevGetXlibPresentSupportKHR) {
 }
 #endif  // VK_USE_PLATFORM_XLIB_KHR
 
-TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPropsKHR) {
-    FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
+InstWrapper setup_BadPhysDev_env(FrameworkEnvironment& env, std::vector<const char*> exts) {
+    std::vector<Extension> ext_modified;
+    for (const auto& ext : exts) {
+        ext_modified.push_back(Extension{ext});
+    }
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_instance_extensions(ext_modified)
+        .setup_WSI()
+        .add_physical_device("physical_device_0");
 
     InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_display");
+    instance.create_info.add_extensions(exts);
     instance.CheckCreate();
+    return instance;
+}
+
+TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPropsKHR) {
+    FrameworkEnvironment env{};
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     uint32_t count = 0;
@@ -1084,17 +1018,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPropsKHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPlanePropsKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_display");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     uint32_t count = 0;
@@ -1105,17 +1029,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPlanePropsKHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneSupportedDisplaysKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_display");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     uint32_t count = 0;
@@ -1126,17 +1040,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneSupportedDisplaysKHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetDisplayModePropsKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_display");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     uint32_t count = 0;
@@ -1147,17 +1051,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetDisplayModePropsKHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevCreateDisplayModeKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_display");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     VkDisplayModeCreateInfoKHR create_info = {};
@@ -1171,17 +1065,7 @@ TEST(LoaderHandleValidTests, BadPhysDevCreateDisplayModeKHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneCapsKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_display");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     VkDisplayPlaneCapabilitiesKHR caps = {};
@@ -1192,17 +1076,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneCapsKHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevPresentRectsKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_display");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     uint32_t count = 0;
@@ -1213,17 +1087,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevPresentRectsKHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayProps2KHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_get_display_properties2"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_get_display_properties2");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     uint32_t count = 0;
@@ -1234,17 +1098,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayProps2KHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPlaneProps2KHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_get_display_properties2"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_get_display_properties2");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     uint32_t count = 0;
@@ -1255,17 +1109,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevDisplayPlaneProps2KHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetDisplayModeProps2KHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_get_display_properties2"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_get_display_properties2");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     uint32_t count = 0;
@@ -1276,17 +1120,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetDisplayModeProps2KHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneCaps2KHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_get_display_properties2"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_get_display_properties2");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_display_properties2"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     VkDisplayPlaneInfo2KHR disp_plane_info = {};
@@ -1300,17 +1134,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetDisplayPlaneCaps2KHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceCaps2KHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_get_surface_capabilities2"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_surface");
-    instance.create_info.add_extension("VK_KHR_get_surface_capabilities2");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_surface_capabilities2"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     VkPhysicalDeviceSurfaceInfo2KHR phys_dev_surf_info = {};
@@ -1324,16 +1148,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceCaps2KHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceFormats2KHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_KHR_get_surface_capabilities2"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_KHR_get_surface_capabilities2");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_KHR_get_surface_capabilities2"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     VkPhysicalDeviceSurfaceInfo2KHR phys_dev_surf_info = {};
@@ -1347,12 +1162,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfaceFormats2KHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevEnumPhysDevQueueFamilyPerfQueryCountersKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     uint32_t count = 0;
@@ -1366,12 +1176,7 @@ TEST(LoaderHandleValidTests, BadPhysDevEnumPhysDevQueueFamilyPerfQueryCountersKH
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamilyPerfQueryPassesKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     VkQueryPoolPerformanceCreateInfoKHR create_info = {};
@@ -1388,12 +1193,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevQueueFamilyPerfQueryPassesKHR)
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFragmentShadingRatesKHR) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     uint32_t count = 0;
@@ -1406,12 +1206,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevFragmentShadingRatesKHR) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevMSPropsEXT) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     VkMultisamplePropertiesEXT props = {};
@@ -1424,16 +1219,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevMSPropsEXT) {
 
 TEST(LoaderHandleValidTests, BadPhysDevAcquireDrmDisplayEXT) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_EXT_acquire_drm_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_EXT_acquire_drm_display");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_drm_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     PFN_vkAcquireDrmDisplayEXT pfn = instance.load("vkAcquireDrmDisplayEXT");
@@ -1444,16 +1230,7 @@ TEST(LoaderHandleValidTests, BadPhysDevAcquireDrmDisplayEXT) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetDrmDisplayEXT) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_EXT_acquire_drm_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_EXT_acquire_drm_display");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_drm_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     PFN_vkGetDrmDisplayEXT pfn = instance.load("vkGetDrmDisplayEXT");
@@ -1465,16 +1242,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetDrmDisplayEXT) {
 
 TEST(LoaderHandleValidTests, BadPhysDevReleaseDisplayEXT) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_EXT_direct_mode_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_EXT_direct_mode_display");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_direct_mode_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     PFN_vkReleaseDisplayEXT pfn = instance.load("vkReleaseDisplayEXT");
@@ -1486,16 +1254,7 @@ TEST(LoaderHandleValidTests, BadPhysDevReleaseDisplayEXT) {
 #if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT)
 TEST(LoaderHandleValidTests, BadPhysDevAcquireXlibDisplayEXT) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_EXT_acquire_xlib_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_EXT_acquire_xlib_display");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_xlib_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     PFN_vkAcquireXlibDisplayEXT pfn = instance.load("vkAcquireXlibDisplayEXT");
@@ -1506,16 +1265,7 @@ TEST(LoaderHandleValidTests, BadPhysDevAcquireXlibDisplayEXT) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetRandROutputDisplayEXT) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    Extension first_ext{"VK_KHR_surface"};
-    Extension second_ext{"VK_EXT_acquire_xlib_display"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({first_ext, second_ext});
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.create_info.add_extension("VK_EXT_acquire_xlib_display");
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {"VK_KHR_surface", "VK_EXT_acquire_xlib_display"});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     RROutput rrout = {};
@@ -1531,10 +1281,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetRandROutputDisplayEXT) {
 #if defined(VK_USE_PLATFORM_WIN32_KHR)
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfacePresentModes2EXT) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     InstWrapper instance(env.vulkan_functions);
     instance.CheckCreate();
@@ -1554,12 +1301,7 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevSurfacePresentModes2EXT) {
 
 TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevToolPropertiesEXT) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    InstWrapper instance(env.vulkan_functions);
-    instance.CheckCreate();
+    auto instance = setup_BadPhysDev_env(env, {});
 
     auto bad_physical_dev = get_bad_handle<VkPhysicalDevice>();
     PFN_vkGetPhysicalDeviceToolPropertiesEXT pfn = instance.load("vkGetPhysicalDeviceToolPropertiesEXT");
@@ -1573,17 +1315,13 @@ TEST(LoaderHandleValidTests, BadPhysDevGetPhysDevToolPropertiesEXT) {
 #if defined(VK_USE_PLATFORM_ANDROID_KHR)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingAndroidSurface) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
     instance.create_info.add_layer(wrap_objects_name);
@@ -1605,17 +1343,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingAndroidSurface) {
 #if defined(VK_USE_PLATFORM_DIRECTFB_EXT)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingDirectFBSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
     instance.create_info.add_layer(wrap_objects_name);
@@ -1637,17 +1371,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingDirectFBSurf) {
 #if defined(VK_USE_PLATFORM_FUCHSIA)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingFuchsiaSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
     instance.create_info.add_layer(wrap_objects_name);
@@ -1669,17 +1399,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingFuchsiaSurf) {
 #if defined(VK_USE_PLATFORM_GGP)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingGGPSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
     instance.create_info.add_layer(wrap_objects_name);
@@ -1701,17 +1427,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingGGPSurf) {
 #if defined(VK_USE_PLATFORM_IOS_MVK)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingIOSSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
     instance.create_info.add_layer(wrap_objects_name);
@@ -1733,17 +1455,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingIOSSurf) {
 #if defined(VK_USE_PLATFORM_MACOS_MVK)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingMacOSSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI("VK_USE_PLATFORM_MACOS_MVK");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_MACOS_MVK");
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI("VK_USE_PLATFORM_MACOS_MVK");
     instance.create_info.add_layer(wrap_objects_name);
@@ -1765,17 +1483,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingMacOSSurf) {
 #if defined(VK_USE_PLATFORM_METAL_EXT)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingMetalSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI("VK_USE_PLATFORM_METAL_EXT");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_METAL_EXT");
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI("VK_USE_PLATFORM_METAL_EXT");
     instance.create_info.add_layer(wrap_objects_name);
@@ -1797,17 +1511,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingMetalSurf) {
 #if defined(VK_USE_PLATFORM_SCREEN_QNX)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingQNXSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
     instance.create_info.add_layer(wrap_objects_name);
@@ -1829,17 +1539,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingQNXSurf) {
 #if defined(VK_USE_PLATFORM_VI_NN)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingViNNSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
     instance.create_info.add_layer(wrap_objects_name);
@@ -1861,17 +1567,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingViNNSurf) {
 #if defined(VK_USE_PLATFORM_WAYLAND_KHR)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingWaylandSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI("VK_USE_PLATFORM_WAYLAND_KHR");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_WAYLAND_KHR");
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI("VK_USE_PLATFORM_WAYLAND_KHR");
     instance.create_info.add_layer(wrap_objects_name);
@@ -1893,17 +1595,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingWaylandSurf) {
 #if defined(VK_USE_PLATFORM_WIN32_KHR)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingWin32Surf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
     instance.create_info.add_layer(wrap_objects_name);
@@ -1925,17 +1623,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingWin32Surf) {
 #if defined(VK_USE_PLATFORM_XCB_KHR)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingXCBSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI();
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI();
     instance.create_info.add_layer(wrap_objects_name);
@@ -1957,19 +1651,13 @@ TEST(LoaderHandleValidTests, VerifyHandleWrappingXCBSurf) {
 #if defined(VK_USE_PLATFORM_XLIB_KHR)
 TEST(LoaderHandleValidTests, VerifyHandleWrappingXlibSurf) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI("VK_USE_PLATFORM_XLIB_KHR");
-    for (auto& ext : driver.instance_extensions) {
-        std::cout << ext.extensionName << "\n";
-    }
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).setup_WSI("VK_USE_PLATFORM_XLIB_KHR");
+
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.setup_WSI("VK_USE_PLATFORM_XLIB_KHR");
     //
@@ -2002,18 +1690,14 @@ VKAPI_ATTR VkBool32 VKAPI_CALL JunkDebugUtilsCallback([[maybe_unused]] VkDebugUt
 
 TEST(LoaderHandleValidTests, VerifyHandleWrappingDebugUtilsMessenger) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
     Extension ext{"VK_EXT_debug_utils"};
-    auto& driver = env.get_test_icd();
-    driver.add_instance_extensions({ext});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_instance_extensions({ext});
 
     const char* wrap_objects_name = "WrapObjectsLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
                                ManifestLayer::LayerDescription{}.set_name(wrap_objects_name).set_lib_path(TEST_LAYER_WRAP_OBJECTS)),
                            "wrap_objects_layer.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper instance(env.vulkan_functions);
     instance.create_info.add_extension("VK_EXT_debug_utils");
     instance.create_info.add_layer(wrap_objects_name);
index 08184b3ac06a422d62d4c82b00bcf1f8e0897a04..4e9a22e33fc7cd78608f52ce712f52bb0b3bb36d 100644 (file)
@@ -194,9 +194,9 @@ TEST(ImplicitLayers, PreInstanceEnumInstExtProps) {
 
 TEST(ImplicitLayers, PreInstanceVersion) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 3);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA))
+        .add_physical_device({})
+        .set_icd_api_version(VK_MAKE_API_VERSION(0, 1, 2, 3));
 
     const char* implicit_layer_name = "ImplicitTestLayer";
     EnvVarWrapper disable_env_var{"DISABLE_ME"};
@@ -235,8 +235,7 @@ TEST(ImplicitLayers, PreInstanceVersion) {
 // tested through behavior above).
 TEST(ImplicitLayers, OverrideGetInstanceProcAddr) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "ImplicitTestLayer";
     EnvVarWrapper disable_env_var{"DISABLE_ME"};
@@ -267,8 +266,10 @@ TEST(ImplicitLayers, OverrideGetInstanceProcAddr) {
 // Force enable with filter env var
 TEST(ImplicitLayers, EnableWithFilter) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA))
+        .add_physical_device({})
+        .set_icd_api_version(VK_API_VERSION_1_2);
 
     const char* implicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* implicit_json_name_1 = "First_layer.json";
@@ -486,8 +487,8 @@ TEST(ImplicitLayers, EnableWithFilter) {
 // Force disabled with new filter env var
 TEST(ImplicitLayers, DisableWithFilter) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2);
 
     const char* implicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* implicit_json_name_1 = "First_layer.json";
@@ -675,8 +676,8 @@ TEST(ImplicitLayers, DisableWithFilter) {
 // Force disabled with new filter env var
 TEST(ImplicitLayers, DisableWithFilterWhenLayersEnableEnvVarIsActive) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2);
 
     const char* implicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* implicit_json_name_1 = "First_layer.json";
@@ -780,8 +781,8 @@ TEST(ImplicitLayers, DisableWithFilterWhenLayersEnableEnvVarIsActive) {
 // override the disable.
 TEST(ImplicitLayers, EnableAndDisableWithFilter) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2);
 
     const char* implicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* implicit_json_name_1 = "First_layer.json";
@@ -958,8 +959,7 @@ TEST(ImplicitLayers, EnableAndDisableWithFilter) {
 // Add 2 implicit layers with the same layer name and expect only one to be loaded.
 TEST(ImplicitLayers, DuplicateLayers) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     // verify layer loads successfully when setting VK_LAYER_PATH to a full filepath
     const char* same_layer_name_1 = "VK_LAYER_RegularLayer1";
@@ -1051,8 +1051,7 @@ TEST(MetaLayers, InvalidComponentLayer) {
 // Meta layer that is an explicit layer
 TEST(MetaLayers, ExplicitMetaLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
     const char* meta_layer_name = "VK_LAYER_MetaTestLayer";
     const char* regular_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(
@@ -1168,8 +1167,8 @@ TEST(MetaLayers, MetaLayerWhichAddsMetaLayer) {
 
 TEST(MetaLayers, InstanceExtensionInComponentLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
+
     const char* meta_layer_name = "VK_LAYER_MetaTestLayer";
     const char* regular_layer_name = "VK_LAYER_TestLayer";
     const char* instance_ext_name = "VK_EXT_headless_surface";
@@ -1189,8 +1188,8 @@ TEST(MetaLayers, InstanceExtensionInComponentLayer) {
 
 TEST(MetaLayers, DeviceExtensionInComponentLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
+
     const char* meta_layer_name = "VK_LAYER_MetaTestLayer";
     const char* regular_layer_name = "VK_LAYER_TestLayer";
     const char* device_ext_name = "VK_EXT_fake_dev_ext";
@@ -1232,8 +1231,8 @@ TEST(MetaLayers, DeviceExtensionInComponentLayer) {
 // Override meta layer missing disable environment variable still enables the layer
 TEST(OverrideMetaLayer, InvalidDisableEnvironment) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
+
     const char* regular_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
                                                          .set_name(regular_layer_name)
@@ -1259,8 +1258,8 @@ TEST(OverrideMetaLayer, InvalidDisableEnvironment) {
 // Override meta layer whose version is less than the api version of the instance
 TEST(OverrideMetaLayer, OlderVersionThanInstance) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
+
     const char* regular_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
                                                          .set_name(regular_layer_name)
@@ -1302,8 +1301,7 @@ TEST(OverrideMetaLayer, OlderVersionThanInstance) {
 
 TEST(OverrideMetaLayer, OlderMetaLayerWithNewerInstanceVersion) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* regular_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(
@@ -1347,8 +1345,7 @@ TEST(OverrideMetaLayer, OlderMetaLayerWithNewerInstanceVersion) {
 
 TEST(OverrideMetaLayer, NewerComponentLayerInMetaLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* regular_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(
@@ -1400,8 +1397,7 @@ TEST(OverrideMetaLayer, NewerComponentLayerInMetaLayer) {
 
 TEST(OverrideMetaLayer, OlderComponentLayerInMetaLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* regular_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(
@@ -1451,8 +1447,7 @@ TEST(OverrideMetaLayer, OlderComponentLayerInMetaLayer) {
 
 TEST(OverrideMetaLayer, ApplicationEnabledLayerInBlacklist) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* automatic_regular_layer_name = "VK_LAYER_TestLayer_1";
     const char* manual_regular_layer_name = "VK_LAYER_TestLayer_2";
@@ -1504,8 +1499,8 @@ TEST(OverrideMetaLayer, ApplicationEnabledLayerInBlacklist) {
 
 TEST(OverrideMetaLayer, BasicOverridePaths) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
+
     fs::FolderManager override_layer_folder{FRAMEWORK_BUILD_DIRECTORY, "override_layer_folder"};
 
     const char* regular_layer_name = "VK_LAYER_TestLayer_1";
@@ -1536,8 +1531,8 @@ TEST(OverrideMetaLayer, BasicOverridePaths) {
 
 TEST(OverrideMetaLayer, BasicOverridePathsIgnoreOtherLayers) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
+
     fs::FolderManager override_layer_folder{FRAMEWORK_BUILD_DIRECTORY, "override_layer_folder"};
 
     const char* regular_layer_name = "VK_LAYER_TestLayer";
@@ -1577,8 +1572,7 @@ TEST(OverrideMetaLayer, BasicOverridePathsIgnoreOtherLayers) {
 
 TEST(OverrideMetaLayer, OverridePathsInteractionWithVK_LAYER_PATH) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     // add explicit layer to VK_LAYER_PATH folder
     const char* env_var_layer_name = "VK_LAYER_env_var_set_path";
@@ -1625,8 +1619,7 @@ TEST(OverrideMetaLayer, OverridePathsInteractionWithVK_LAYER_PATH) {
 // Make sure that implicit layers not in the override paths aren't found by mistake
 TEST(OverrideMetaLayer, OverridePathsEnableImplicitLayerInDefaultPaths) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
     fs::FolderManager override_layer_folder{FRAMEWORK_BUILD_DIRECTORY, "override_layer_folder"};
 
     const char* implicit_layer_name = "VK_LAYER_ImplicitLayer";
@@ -1667,8 +1660,7 @@ TEST(OverrideMetaLayer, OverridePathsEnableImplicitLayerInDefaultPaths) {
 
 TEST(OverrideMetaLayer, ManifestFileFormatVersionTooOld) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
     fs::FolderManager override_layer_folder{FRAMEWORK_BUILD_DIRECTORY, "override_layer_folder"};
 
     const char* regular_layer_name = "VK_LAYER_TestLayer_1";
@@ -1701,8 +1693,7 @@ TEST(OverrideMetaLayer, ManifestFileFormatVersionTooOld) {
 // app_key contains test executable name, should activate the override layer
 TEST(OverrideMetaLayer, AppKeysDoesContainCurrentApplication) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* regular_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(
@@ -1735,8 +1726,7 @@ TEST(OverrideMetaLayer, AppKeysDoesContainCurrentApplication) {
 // app_key contains random strings, should not activate the override layer
 TEST(OverrideMetaLayer, AppKeysDoesNotContainCurrentApplication) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* regular_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(
@@ -1765,8 +1755,7 @@ TEST(OverrideMetaLayer, AppKeysDoesNotContainCurrentApplication) {
 
 TEST(OverrideMetaLayer, RunningWithElevatedPrivilegesFromSecureLocation) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     fs::FolderManager override_layer_folder{FRAMEWORK_BUILD_DIRECTORY, "override_layer_folder"};
 
@@ -1821,8 +1810,7 @@ TEST(OverrideMetaLayer, RunningWithElevatedPrivilegesFromSecureLocation) {
 // Override layer should not be found and thus not loaded when running with elevated privileges
 TEST(OverrideMetaLayer, RunningWithElevatedPrivilegesFromUnsecureLocation) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     fs::FolderManager override_layer_folder{FRAMEWORK_BUILD_DIRECTORY, "override_layer_folder"};
 
@@ -1877,9 +1865,9 @@ TEST(OverrideMetaLayer, RunningWithElevatedPrivilegesFromUnsecureLocation) {
 // succeeds and doesn't crash.
 TEST(LayerCreateInstance, GetPhysicalDeviceProperties2) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 1, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA))
+        .add_physical_device({})
+        .set_icd_api_version(VK_API_VERSION_1_1);
 
     const char* regular_layer_name = "TestLayer";
     env.add_explicit_layer(
@@ -1916,9 +1904,9 @@ TEST(LayerCreateInstance, GetPhysicalDeviceProperties2) {
 
 TEST(LayerCreateInstance, GetPhysicalDeviceProperties2KHR) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
-    env.get_test_icd().add_instance_extension({"VK_KHR_get_physical_device_properties2", 0});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA))
+        .add_physical_device({})
+        .add_instance_extension({"VK_KHR_get_physical_device_properties2", 0});
 
     const char* regular_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(
@@ -1949,8 +1937,7 @@ TEST(LayerCreateInstance, GetPhysicalDeviceProperties2KHR) {
 
 TEST(ExplicitLayers, MultipleLayersInSingleManifest) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     // verify layer loads successfully when setting VK_LAYER_PATH to a full filepath
     const char* regular_layer_name_1 = "VK_LAYER_RegularLayer1";
@@ -1975,8 +1962,7 @@ TEST(ExplicitLayers, MultipleLayersInSingleManifest) {
 
 TEST(ExplicitLayers, WrapObjects) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device("physical_device_0");
 
     const char* wrap_objects_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(ManifestLayer{}.add_layer(
@@ -1995,7 +1981,6 @@ TEST(ExplicitLayers, WrapObjects) {
             ManifestLayer::LayerDescription{}.set_name(regular_layer_name_2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)),
         "regular_layer_2.json");
 
-    driver.physical_devices.emplace_back("physical_device_0");
     {  // just the wrap layer
         InstWrapper inst{env.vulkan_functions};
         inst.create_info.add_layer(wrap_objects_name);
@@ -2036,8 +2021,7 @@ TEST(ExplicitLayers, WrapObjects) {
 
 TEST(ExplicitLayers, VkLayerPathEnvVar) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     {
         // verify layer loads successfully when setting VK_LAYER_PATH to a full filepath
@@ -2107,8 +2091,7 @@ TEST(ExplicitLayers, VkLayerPathEnvVar) {
 
 TEST(ExplicitLayers, DuplicateLayersInVK_LAYER_PATH) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     // verify layer loads successfully when setting VK_LAYER_PATH to a full filepath
     const char* same_layer_name_1 = "VK_LAYER_RegularLayer1";
@@ -2183,8 +2166,7 @@ TEST(ExplicitLayers, DuplicateLayersInVK_LAYER_PATH) {
 
 TEST(ExplicitLayers, DuplicateLayersInVK_ADD_LAYER_PATH) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     // verify layer loads successfully when setting VK_LAYER_PATH to a full filepath
     const char* same_layer_name_1 = "VK_LAYER_RegularLayer1";
@@ -2259,8 +2241,7 @@ TEST(ExplicitLayers, DuplicateLayersInVK_ADD_LAYER_PATH) {
 
 TEST(ExplicitLayers, CorrectOrderOfEnvVarEnabledLayers) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     // verify layer loads successfully when setting VK_LAYER_PATH to a full filepath
     const char* layer_name_1 = "VK_LAYER_RegularLayer1";
@@ -2326,8 +2307,7 @@ TEST(ExplicitLayers, CorrectOrderOfEnvVarEnabledLayers) {
 
 TEST(ExplicitLayers, CorrectOrderOfEnvVarEnabledLayersFromSystemLocations) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     // verify layer loads successfully when setting VK_LAYER_PATH to a full filepath
     const char* layer_name_1 = "VK_LAYER_RegularLayer1";
@@ -2387,8 +2367,7 @@ TEST(ExplicitLayers, CorrectOrderOfEnvVarEnabledLayersFromSystemLocations) {
 
 TEST(ExplicitLayers, CorrectOrderOfApplicationEnabledLayers) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     // verify layer loads successfully when setting VK_LAYER_PATH to a full filepath
     const char* layer_name_1 = "VK_LAYER_RegularLayer1";
@@ -2451,9 +2430,7 @@ TEST(ExplicitLayers, CorrectOrderOfApplicationEnabledLayers) {
 
 TEST(LayerExtensions, ImplicitNoAdditionalInstanceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     const char* enable_env_var = "ENABLE_ME";
@@ -2493,9 +2470,7 @@ TEST(LayerExtensions, ImplicitNoAdditionalInstanceExtension) {
 
 TEST(LayerExtensions, ImplicitDirDispModeInstanceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     const char* enable_env_var = "ENABLE_ME";
@@ -2539,9 +2514,7 @@ TEST(LayerExtensions, ImplicitDirDispModeInstanceExtension) {
 
 TEST(LayerExtensions, ImplicitDispSurfCountInstanceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     const char* enable_env_var = "ENABLE_ME";
@@ -2582,9 +2555,7 @@ TEST(LayerExtensions, ImplicitDispSurfCountInstanceExtension) {
 
 TEST(LayerExtensions, ImplicitBothInstanceExtensions) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     const char* enable_env_var = "ENABLE_ME";
@@ -2629,9 +2600,7 @@ TEST(LayerExtensions, ImplicitBothInstanceExtensions) {
 
 TEST(LayerExtensions, ExplicitNoAdditionalInstanceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(
@@ -2661,9 +2630,7 @@ TEST(LayerExtensions, ExplicitNoAdditionalInstanceExtension) {
 
 TEST(LayerExtensions, ExplicitDirDispModeInstanceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(
@@ -2706,9 +2673,7 @@ TEST(LayerExtensions, ExplicitDirDispModeInstanceExtension) {
 
 TEST(LayerExtensions, ExplicitDispSurfCountInstanceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -2751,9 +2716,7 @@ TEST(LayerExtensions, ExplicitDispSurfCountInstanceExtension) {
 
 TEST(LayerExtensions, ExplicitBothInstanceExtensions) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(
@@ -2813,9 +2776,7 @@ TEST(LayerExtensions, ExplicitBothInstanceExtensions) {
 
 TEST(LayerExtensions, ImplicitNoAdditionalDeviceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     const char* enable_env_var = "ENABLE_ME";
@@ -2838,21 +2799,7 @@ TEST(LayerExtensions, ImplicitNoAdditionalDeviceExtension) {
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
     VkPhysicalDevice phys_dev = inst.GetPhysDev();
-
-    uint32_t extension_count = 0;
-    std::vector<VkExtensionProperties> extension_props;
-    ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &extension_count, nullptr));
-    if (extension_count > 0) {
-        extension_props.resize(extension_count);
-        ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &extension_count,
-                                                                                        extension_props.data()));
-
-        // Make sure the extensions that are implemented only in the test layers is not present.
-        for (uint32_t ext = 0; ext < extension_count; ++ext) {
-            ASSERT_NE(0, strcmp(extension_props[ext].extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME));
-            ASSERT_NE(0, strcmp(extension_props[ext].extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME));
-        }
-    }
+    ASSERT_NO_FATAL_FAILURE(inst.EnumerateDeviceExtensions(phys_dev, 0));
 
     // Device functions queried using vkGetInstanceProcAddr should be non-NULL since this could be available for any attached
     // physical device.
@@ -2887,9 +2834,7 @@ TEST(LayerExtensions, ImplicitNoAdditionalDeviceExtension) {
 
 TEST(LayerExtensions, ImplicitMaintenanceDeviceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     const char* enable_env_var = "ENABLE_ME";
@@ -2912,24 +2857,8 @@ TEST(LayerExtensions, ImplicitMaintenanceDeviceExtension) {
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
     VkPhysicalDevice phys_dev = inst.GetPhysDev();
-
-    uint32_t extension_count = 0;
-    std::vector<VkExtensionProperties> extension_props;
-    ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &extension_count, nullptr));
-    ASSERT_EQ(extension_count, 1U);
-    extension_props.resize(extension_count);
-    ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &extension_count,
-                                                                                    extension_props.data()));
-
-    // Make sure only the one extension implemented by the enabled implicit layer is present.
-    bool found = false;
-    for (uint32_t ext = 0; ext < extension_count; ++ext) {
-        if (!strcmp(extension_props[ext].extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME)) {
-            found = true;
-        }
-        ASSERT_NE(0, strcmp(extension_props[ext].extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME));
-    }
-    ASSERT_EQ(true, found);
+    auto device_extensions = inst.EnumerateDeviceExtensions(phys_dev, 1);
+    ASSERT_TRUE(string_eq(device_extensions.at(0).extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME));
 
     DeviceWrapper dev{inst};
     dev.create_info.add_extension(VK_KHR_MAINTENANCE1_EXTENSION_NAME);
@@ -2942,9 +2871,7 @@ TEST(LayerExtensions, ImplicitMaintenanceDeviceExtension) {
 
 TEST(LayerExtensions, ImplicitPresentImageDeviceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     const char* enable_env_var = "ENABLE_ME";
@@ -2967,24 +2894,8 @@ TEST(LayerExtensions, ImplicitPresentImageDeviceExtension) {
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
     VkPhysicalDevice phys_dev = inst.GetPhysDev();
-
-    uint32_t extension_count = 0;
-    std::vector<VkExtensionProperties> extension_props;
-    ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &extension_count, nullptr));
-    ASSERT_EQ(extension_count, 1U);
-    extension_props.resize(extension_count);
-    ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &extension_count,
-                                                                                    extension_props.data()));
-
-    // Make sure only the one extension implemented by the enabled implicit layer is present.
-    bool found = false;
-    for (uint32_t ext = 0; ext < extension_count; ++ext) {
-        ASSERT_NE(0, strcmp(extension_props[ext].extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME));
-        if (!strcmp(extension_props[ext].extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME)) {
-            found = true;
-        }
-    }
-    ASSERT_EQ(true, found);
+    auto device_extensions = inst.EnumerateDeviceExtensions(phys_dev, 1);
+    ASSERT_TRUE(string_eq(device_extensions.at(0).extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME));
 
     DeviceWrapper dev{inst};
     dev.create_info.add_extension(VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME);
@@ -2997,9 +2908,7 @@ TEST(LayerExtensions, ImplicitPresentImageDeviceExtension) {
 
 TEST(LayerExtensions, ImplicitBothDeviceExtensions) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     const char* enable_env_var = "ENABLE_ME";
@@ -3022,28 +2931,9 @@ TEST(LayerExtensions, ImplicitBothDeviceExtensions) {
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
     VkPhysicalDevice phys_dev = inst.GetPhysDev();
-
-    uint32_t extension_count = 0;
-    std::vector<VkExtensionProperties> extension_props;
-    ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &extension_count, nullptr));
-    ASSERT_EQ(extension_count, 2U);
-    extension_props.resize(extension_count);
-    ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev, nullptr, &extension_count,
-                                                                                    extension_props.data()));
-
-    // Make sure only the one extension implemented by the enabled implicit layer is present.
-    bool found[2] = {false, false};
-    for (uint32_t ext = 0; ext < extension_count; ++ext) {
-        if (!strcmp(extension_props[ext].extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME)) {
-            found[0] = true;
-        }
-        if (!strcmp(extension_props[ext].extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME)) {
-            found[1] = true;
-        }
-    }
-    for (uint32_t ext = 0; ext < 2; ++ext) {
-        ASSERT_EQ(true, found[ext]);
-    }
+    auto device_extensions = inst.EnumerateDeviceExtensions(phys_dev, 2);
+    ASSERT_TRUE(string_eq(device_extensions.at(0).extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME));
+    ASSERT_TRUE(string_eq(device_extensions.at(1).extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME));
 
     DeviceWrapper dev{inst};
     dev.create_info.add_extension(VK_KHR_MAINTENANCE1_EXTENSION_NAME).add_extension(VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME);
@@ -3056,9 +2946,7 @@ TEST(LayerExtensions, ImplicitBothDeviceExtensions) {
 
 TEST(LayerExtensions, ExplicitNoAdditionalDeviceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(
@@ -3088,9 +2976,7 @@ TEST(LayerExtensions, ExplicitNoAdditionalDeviceExtension) {
 
 TEST(LayerExtensions, ExplicitMaintenanceDeviceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(
@@ -3124,9 +3010,7 @@ TEST(LayerExtensions, ExplicitMaintenanceDeviceExtension) {
 
 TEST(LayerExtensions, ExplicitPresentImageDeviceExtension) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(
@@ -3161,9 +3045,7 @@ TEST(LayerExtensions, ExplicitPresentImageDeviceExtension) {
 
 TEST(LayerExtensions, ExplicitBothDeviceExtensions) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(
@@ -3209,12 +3091,10 @@ TEST(LayerExtensions, ExplicitBothDeviceExtensions) {
 
 TEST(TestLayers, ExplicitlyEnableImplicitLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    VkPhysicalDeviceProperties properties{};
-    properties.apiVersion = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    env.get_test_icd().add_physical_device({});
-    env.get_test_icd().physical_devices.back().set_properties(properties);
+    uint32_t api_version = VK_API_VERSION_1_2;
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, api_version))
+        .set_icd_api_version(api_version)
+        .add_physical_device(PhysicalDevice{}.set_api_version(api_version).finish());
 
     const char* regular_layer_name = "VK_LAYER_TestLayer1";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -3242,12 +3122,10 @@ TEST(TestLayers, ExplicitlyEnableImplicitLayer) {
 
 TEST(TestLayers, NewerInstanceVersionThanImplicitLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    VkPhysicalDeviceProperties properties{};
-    properties.apiVersion = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    env.get_test_icd().add_physical_device({});
-    env.get_test_icd().physical_devices.back().set_properties(properties);
+    uint32_t api_version = VK_API_VERSION_1_2;
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, api_version))
+        .set_icd_api_version(api_version)
+        .add_physical_device(PhysicalDevice{}.set_api_version(api_version).finish());
 
     const char* regular_layer_name = "VK_LAYER_TestLayer1";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -3285,12 +3163,10 @@ TEST(TestLayers, NewerInstanceVersionThanImplicitLayer) {
 
 TEST(TestLayers, ImplicitLayerPre10APIVersion) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    VkPhysicalDeviceProperties properties{};
-    properties.apiVersion = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    env.get_test_icd().add_physical_device({});
-    env.get_test_icd().physical_devices.back().set_properties(properties);
+    uint32_t api_version = VK_API_VERSION_1_2;
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, api_version))
+        .set_icd_api_version(api_version)
+        .add_physical_device(PhysicalDevice{}.set_api_version(api_version).finish());
 
     const char* regular_layer_name = "VK_LAYER_TestLayer1";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -3349,12 +3225,10 @@ TEST(TestLayers, ImplicitLayerPre10APIVersion) {
 // it is set with VK_INSTANCE_LAYERS
 TEST(TestLayers, InstEnvironEnableExplicitLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    VkPhysicalDeviceProperties properties{};
-    properties.apiVersion = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    env.get_test_icd().add_physical_device({});
-    env.get_test_icd().physical_devices.back().set_properties(properties);
+    uint32_t api_version = VK_API_VERSION_1_2;
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, api_version))
+        .set_icd_api_version(api_version)
+        .add_physical_device(PhysicalDevice{}.set_api_version(api_version).finish());
 
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(
@@ -3373,17 +3247,7 @@ TEST(TestLayers, InstEnvironEnableExplicitLayer) {
     inst1.CheckCreate();
     VkPhysicalDevice phys_dev1 = inst1.GetPhysDev();
 
-    // Make sure the extensions in the layer aren't present
-    uint32_t extension_count = 40;
-    std::array<VkExtensionProperties, 40> extensions;
-    EXPECT_EQ(VK_SUCCESS,
-              env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev1, nullptr, &extension_count, extensions.data()));
-    for (uint32_t ext = 0; ext < extension_count; ++ext) {
-        if (string_eq(extensions[ext].extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME) ||
-            string_eq(extensions[ext].extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME)) {
-            FAIL() << "Extension should not be present";
-        }
-    }
+    ASSERT_NO_FATAL_FAILURE(inst1.EnumerateDeviceExtensions(phys_dev1, 0));
 
     // Create a device and query the function pointers
     DeviceWrapper dev1{inst1};
@@ -3423,8 +3287,10 @@ TEST(TestLayers, InstEnvironEnableExplicitLayer) {
 // it is set with VK_LOADER_LAYERS_ENABLE
 TEST(TestLayers, EnvironLayerEnableExplicitLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+    uint32_t api_version = VK_API_VERSION_1_2;
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, api_version))
+        .set_icd_api_version(api_version)
+        .add_physical_device(PhysicalDevice{});
 
     const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* explicit_json_name_1 = "First_layer.json";
@@ -3607,8 +3473,9 @@ TEST(TestLayers, EnvironLayerEnableExplicitLayer) {
 // it is set with VK_LOADER_LAYERS_DISABLE
 TEST(TestLayers, EnvironLayerDisableExplicitLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2)
+        .add_physical_device(PhysicalDevice{});
 
     const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* explicit_json_name_1 = "First_layer.json";
@@ -3843,8 +3710,8 @@ TEST(TestLayers, EnvironLayerDisableExplicitLayer) {
 // enabled)
 TEST(TestLayers, EnvironLayerEnableDisableExplicitLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2);
 
     const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* explicit_json_name_1 = "First_layer.json";
@@ -4037,8 +3904,8 @@ TEST(TestLayers, EnvironLayerEnableDisableExplicitLayer) {
 // enabled)
 TEST(TestLayers, EnvironVkInstanceLayersAndDisableFilters) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2);
 
     const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* explicit_json_name_1 = "First_layer.json";
@@ -4116,8 +3983,7 @@ TEST(TestLayers, EnvironVkInstanceLayersAndDisableFilters) {
 // Verify that layers enabled through VK_INSTANCE_LAYERS which were not found get the proper error message
 TEST(TestLayers, NonExistantLayerInVK_INSTANCE_LAYERS) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* layer_name = "VK_LAYER_test_layer";
     env.add_explicit_layer(
@@ -4164,8 +4030,7 @@ TEST(TestLayers, NonExistantLayerInVK_INSTANCE_LAYERS) {
 // Verify that if the same layer appears twice in VK_INSTANCE_LAYERS nothing bad happens
 TEST(TestLayers, DuplicatesInEnvironVK_INSTANCE_LAYERS) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* layer_name = "VK_LAYER_test_layer";
     env.add_explicit_layer(
@@ -4187,8 +4052,8 @@ TEST(TestLayers, DuplicatesInEnvironVK_INSTANCE_LAYERS) {
 
 TEST(TestLayers, AppEnabledExplicitLayerFails) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2);
 
     const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* explicit_json_name_1 = "First_layer.json";
@@ -4216,8 +4081,8 @@ TEST(TestLayers, AppEnabledExplicitLayerFails) {
 
 TEST(TestLayers, OverrideEnabledExplicitLayerWithDisableFilter) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2);
 
     const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* explicit_json_name_1 = "First_layer.json";
@@ -4266,8 +4131,8 @@ TEST(TestLayers, OverrideEnabledExplicitLayerWithDisableFilter) {
 
 TEST(TestLayers, OverrideEnabledExplicitLayerWithDisableFilterForOverrideLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2);
 
     const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* explicit_json_name_1 = "First_layer.json";
@@ -4316,8 +4181,8 @@ TEST(TestLayers, OverrideEnabledExplicitLayerWithDisableFilterForOverrideLayer)
 
 TEST(TestLayers, OverrideBlacklistedLayerWithEnableFilter) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2);
 
     const char* explicit_layer_name_1 = "VK_LAYER_LUNARG_First_layer";
     const char* explicit_json_name_1 = "First_layer.json";
@@ -4366,12 +4231,9 @@ TEST(TestLayers, OverrideBlacklistedLayerWithEnableFilter) {
 // Add a device layer, should not work
 TEST(TestLayers, DoNotUseDeviceLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    VkPhysicalDeviceProperties properties{};
-    properties.apiVersion = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    env.get_test_icd().add_physical_device({});
-    env.get_test_icd().physical_devices.back().set_properties(properties);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2)
+        .add_physical_device(PhysicalDevice{}.set_api_version(VK_API_VERSION_1_2).finish());
 
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(
@@ -4391,16 +4253,7 @@ TEST(TestLayers, DoNotUseDeviceLayer) {
     VkPhysicalDevice phys_dev1 = inst1.GetPhysDev();
 
     // Make sure the extensions in the layer aren't present
-    uint32_t extension_count = 40;
-    std::array<VkExtensionProperties, 40> extensions;
-    EXPECT_EQ(VK_SUCCESS,
-              env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev1, nullptr, &extension_count, extensions.data()));
-    for (uint32_t ext = 0; ext < extension_count; ++ext) {
-        if (string_eq(extensions[ext].extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME) ||
-            string_eq(extensions[ext].extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME)) {
-            FAIL() << "Extension should not be present";
-        }
-    }
+    ASSERT_NO_FATAL_FAILURE(inst1.EnumerateDeviceExtensions(phys_dev1, 0));
 
     // Create a device and query the function pointers
     DeviceWrapper dev1{inst1};
@@ -4417,15 +4270,7 @@ TEST(TestLayers, DoNotUseDeviceLayer) {
     VkPhysicalDevice phys_dev2 = inst2.GetPhysDev();
 
     // Make sure the extensions in the layer aren't present
-    extension_count = 40;
-    EXPECT_EQ(VK_SUCCESS,
-              env.vulkan_functions.vkEnumerateDeviceExtensionProperties(phys_dev1, nullptr, &extension_count, extensions.data()));
-    for (uint32_t ext = 0; ext < extension_count; ++ext) {
-        if (string_eq(extensions[ext].extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME) ||
-            string_eq(extensions[ext].extensionName, VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME)) {
-            FAIL() << "Extension should not be present";
-        }
-    }
+    ASSERT_NO_FATAL_FAILURE(inst2.EnumerateDeviceExtensions(phys_dev2, 0));
 
     DeviceWrapper dev2{inst2};
     dev2.create_info.add_extension(VK_KHR_MAINTENANCE1_EXTENSION_NAME)
@@ -4446,12 +4291,9 @@ TEST(TestLayers, DoNotUseDeviceLayer) {
 // Make sure that a layer enabled as both an instance and device layer works properly.
 TEST(TestLayers, InstanceAndDeviceLayer) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    VkPhysicalDeviceProperties properties{};
-    properties.apiVersion = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    env.get_test_icd().add_physical_device({});
-    env.get_test_icd().physical_devices.back().set_properties(properties);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2)
+        .add_physical_device(PhysicalDevice{}.set_api_version(VK_API_VERSION_1_2).finish());
 
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
     env.add_explicit_layer(
@@ -4486,13 +4328,9 @@ TEST(TestLayers, InstanceAndDeviceLayer) {
 // Make sure loader does not throw an error for a device layer  that is not present
 TEST(TestLayers, DeviceLayerNotPresent) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 2, 0)));
-    env.get_test_icd().icd_api_version = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    VkPhysicalDeviceProperties properties{};
-    properties.apiVersion = VK_MAKE_API_VERSION(0, 1, 2, 0);
-    env.get_test_icd().add_physical_device({});
-    env.get_test_icd().physical_devices.back().set_properties(properties);
-
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_API_VERSION_1_2))
+        .set_icd_api_version(VK_API_VERSION_1_2)
+        .add_physical_device(PhysicalDevice{}.set_api_version(VK_API_VERSION_1_2).finish());
     const char* explicit_layer_name = "VK_LAYER_LUNARG_wrap_objects";
 
     InstWrapper inst{env.vulkan_functions};
@@ -4518,9 +4356,7 @@ TEST(LayerPhysDeviceMod, AddPhysicalDevices) {
     layer.set_add_phys_devs(true);
 
     for (uint32_t icd = 0; icd < 2; ++icd) {
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-        auto& cur_icd = env.get_test_icd(icd);
-        cur_icd.icd_api_version = VK_API_VERSION_1_2;
+        auto& cur_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_icd_api_version(VK_API_VERSION_1_2);
         VkPhysicalDeviceProperties properties{};
         properties.apiVersion = VK_API_VERSION_1_2;
         properties.vendorID = 0x11000000 + (icd << 6);
@@ -4597,9 +4433,7 @@ TEST(LayerPhysDeviceMod, RemovePhysicalDevices) {
     layer.set_remove_phys_devs(true);
 
     for (uint32_t icd = 0; icd < 2; ++icd) {
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-        auto& cur_icd = env.get_test_icd(icd);
-        cur_icd.icd_api_version = VK_API_VERSION_1_2;
+        auto& cur_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_icd_api_version(VK_API_VERSION_1_2);
         VkPhysicalDeviceProperties properties{};
         properties.apiVersion = VK_API_VERSION_1_2;
         properties.vendorID = 0x11000000 + (icd << 6);
@@ -4649,9 +4483,7 @@ TEST(LayerPhysDeviceMod, ReorderPhysicalDevices) {
     layer.set_reorder_phys_devs(true);
 
     for (uint32_t icd = 0; icd < 2; ++icd) {
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-        auto& cur_icd = env.get_test_icd(icd);
-        cur_icd.icd_api_version = VK_API_VERSION_1_2;
+        auto& cur_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_icd_api_version(VK_API_VERSION_1_2);
         VkPhysicalDeviceProperties properties{};
         properties.apiVersion = VK_API_VERSION_1_2;
         properties.vendorID = 0x11000000 + (icd << 6);
@@ -4701,9 +4533,7 @@ TEST(LayerPhysDeviceMod, AddRemoveAndReorderPhysicalDevices) {
     layer.set_add_phys_devs(true).set_remove_phys_devs(true).set_reorder_phys_devs(true);
 
     for (uint32_t icd = 0; icd < 2; ++icd) {
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-        auto& cur_icd = env.get_test_icd(icd);
-        cur_icd.icd_api_version = VK_API_VERSION_1_2;
+        auto& cur_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_icd_api_version(VK_API_VERSION_1_2);
         VkPhysicalDeviceProperties properties{};
         properties.apiVersion = VK_API_VERSION_1_2;
         properties.vendorID = 0x11000000 + (icd << 6);
@@ -4779,9 +4609,7 @@ TEST(LayerPhysDeviceMod, AddPhysicalDeviceGroups) {
     layer.set_add_phys_devs(true);
 
     for (uint32_t icd = 0; icd < 2; ++icd) {
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-        auto& cur_icd = env.get_test_icd(icd);
-        cur_icd.icd_api_version = VK_API_VERSION_1_2;
+        auto& cur_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_icd_api_version(VK_API_VERSION_1_2);
         VkPhysicalDeviceProperties properties{};
         properties.apiVersion = VK_API_VERSION_1_2;
         properties.vendorID = 0x11000000 + (icd << 6);
@@ -4869,9 +4697,7 @@ TEST(LayerPhysDeviceMod, RemovePhysicalDeviceGroups) {
     layer.set_remove_phys_devs(true);
 
     for (uint32_t icd = 0; icd < 2; ++icd) {
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-        auto& cur_icd = env.get_test_icd(icd);
-        cur_icd.icd_api_version = VK_API_VERSION_1_2;
+        auto& cur_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_icd_api_version(VK_API_VERSION_1_2);
         VkPhysicalDeviceProperties properties{};
         properties.apiVersion = VK_API_VERSION_1_2;
         properties.vendorID = 0x11000000 + (icd << 6);
@@ -4924,9 +4750,7 @@ TEST(LayerPhysDeviceMod, ReorderPhysicalDeviceGroups) {
     layer.set_reorder_phys_devs(true);
 
     for (uint32_t icd = 0; icd < 2; ++icd) {
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-        auto& cur_icd = env.get_test_icd(icd);
-        cur_icd.icd_api_version = VK_API_VERSION_1_2;
+        auto& cur_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_icd_api_version(VK_API_VERSION_1_2);
         VkPhysicalDeviceProperties properties{};
         properties.apiVersion = VK_API_VERSION_1_2;
         properties.vendorID = 0x11000000 + (icd << 6);
@@ -4979,9 +4803,7 @@ TEST(LayerPhysDeviceMod, AddRemoveAndReorderPhysicalDeviceGroups) {
     layer.set_add_phys_devs(true).set_remove_phys_devs(true).set_reorder_phys_devs(true);
 
     for (uint32_t icd = 0; icd < 2; ++icd) {
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-        auto& cur_icd = env.get_test_icd(icd);
-        cur_icd.icd_api_version = VK_API_VERSION_1_2;
+        auto& cur_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_icd_api_version(VK_API_VERSION_1_2);
         VkPhysicalDeviceProperties properties{};
         properties.apiVersion = VK_API_VERSION_1_2;
         properties.vendorID = 0x11000000 + (icd << 6);
index 27aedf833ebb41463ff6ac44ee1b7deca9cf9949..1ac79391d5f1c2fdfc043a79d6dda5b047d1bb1b 100644 (file)
 
 TEST(CreateInstance, BasicRun) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-
-    auto& driver = env.get_test_icd();
-    driver.set_min_icd_interface_version(5);
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5);
 
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
@@ -275,10 +272,7 @@ TEST(EnumerateInstanceExtensionProperties, FilterUnkownInstanceExtensions) {
 
 TEST(EnumerateDeviceLayerProperties, LayersMatch) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     const char* layer_name = "TestLayer";
     env.add_explicit_layer(
@@ -305,10 +299,7 @@ TEST(EnumerateDeviceLayerProperties, LayersMatch) {
 
 TEST(EnumerateDeviceExtensionProperties, DeviceExtensionEnumerated) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     std::array<Extension, 2> device_extensions = {Extension{"MyExtension0", 4}, Extension{"MyExtension1", 7}};
     for (auto& ext : device_extensions) {
@@ -335,10 +326,7 @@ TEST(EnumerateDeviceExtensionProperties, DeviceExtensionEnumerated) {
 
 TEST(EnumerateDeviceExtensionProperties, PropertyCountLessThanAvailable) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     std::array<Extension, 2> device_extensions = {Extension{"MyExtension0", 4}, Extension{"MyExtension1", 7}};
     for (auto& ext : device_extensions) {
@@ -366,9 +354,8 @@ TEST(EnumerateDeviceExtensionProperties, PropertyCountLessThanAvailable) {
 
 TEST(EnumerateDeviceExtensionProperties, ZeroPhysicalDeviceExtensions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
-    env.get_test_icd().add_physical_device({});
     InstWrapper inst{env.vulkan_functions};
     inst.create_info.set_api_version(VK_MAKE_API_VERSION(0, 1, 1, 0));
     inst.CheckCreate(VK_SUCCESS);
@@ -455,34 +442,30 @@ void exercise_EnumerateDeviceExtensionProperties(InstWrapper& inst, VkPhysicalDe
 
 TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentNoExtensions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+
+    std::vector<Extension> exts = {Extension{"MyDriverExtension0", 4}, Extension{"MyDriverExtension1", 7},
+                                   Extension{"MyDriverExtension2", 6}, Extension{"MyDriverExtension3", 10}};
+
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .add_physical_device("physical_device_0")
+        .physical_devices.at(0)
+        .add_extensions(exts);
 
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
                                                          .set_name("implicit_layer_name")
                                                          .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)
                                                          .set_disable_environment("DISABLE_ME")),
                            "implicit_test_layer.json");
-    std::vector<Extension> exts;
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
-    driver.physical_devices.front().extensions.emplace_back("MyDriverExtension0", 4);
-    driver.physical_devices.front().extensions.emplace_back("MyDriverExtension1", 7);
-    driver.physical_devices.front().extensions.emplace_back("MyDriverExtension2", 6);
-    driver.physical_devices.front().extensions.emplace_back("MyDriverExtension3", 10);
-
-    exts.insert(exts.begin(), driver.physical_devices.front().extensions.begin(), driver.physical_devices.front().extensions.end());
 
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
 
-    VkPhysicalDevice physical_device = inst.GetPhysDev();
-    exercise_EnumerateDeviceExtensionProperties(inst, physical_device, exts);
+    exercise_EnumerateDeviceExtensionProperties(inst, inst.GetPhysDev(), exts);
 }
 
 TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithExtensions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     std::vector<Extension> exts;
     std::vector<ManifestLayer::LayerDescription::Extension> layer_exts;
@@ -499,9 +482,6 @@ TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithExtensions) {
     auto& layer = env.get_test_layer();
     layer.device_extensions = exts;
 
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
     driver.physical_devices.front().extensions.emplace_back("MyDriverExtension0", 4);
     driver.physical_devices.front().extensions.emplace_back("MyDriverExtension1", 7);
 
@@ -516,7 +496,7 @@ TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithExtensions) {
 
 TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithLotsOfExtensions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     std::vector<Extension> exts;
     std::vector<ManifestLayer::LayerDescription::Extension> layer_exts;
@@ -533,9 +513,6 @@ TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithLotsOfExtension
     auto& layer = env.get_test_layer();
     layer.device_extensions = exts;
 
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
     driver.physical_devices.front().extensions.emplace_back("MyDriverExtension0", 4);
     driver.physical_devices.front().extensions.emplace_back("MyDriverExtension1", 7);
     driver.physical_devices.front().extensions.emplace_back("MyDriverExtension2", 6);
@@ -552,7 +529,7 @@ TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithLotsOfExtension
 
 TEST(EnumerateDeviceExtensionProperties, NoDriverExtensionsImplicitLayerPresentWithExtensions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     std::vector<Extension> exts;
     std::vector<ManifestLayer::LayerDescription::Extension> layer_exts;
@@ -569,9 +546,6 @@ TEST(EnumerateDeviceExtensionProperties, NoDriverExtensionsImplicitLayerPresentW
     auto& layer = env.get_test_layer();
     layer.device_extensions = exts;
 
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
 
@@ -581,7 +555,7 @@ TEST(EnumerateDeviceExtensionProperties, NoDriverExtensionsImplicitLayerPresentW
 
 TEST(EnumerateDeviceExtensionProperties, NoDriverExtensionsImplicitLayerPresentWithLotsOfExtensions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     std::vector<Extension> exts;
     std::vector<ManifestLayer::LayerDescription::Extension> layer_exts;
@@ -598,9 +572,6 @@ TEST(EnumerateDeviceExtensionProperties, NoDriverExtensionsImplicitLayerPresentW
     auto& layer = env.get_test_layer();
     layer.device_extensions = exts;
 
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
 
@@ -610,7 +581,7 @@ TEST(EnumerateDeviceExtensionProperties, NoDriverExtensionsImplicitLayerPresentW
 
 TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithDuplicateExtensions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     std::vector<Extension> exts;
     std::vector<ManifestLayer::LayerDescription::Extension> layer_exts;
@@ -627,9 +598,6 @@ TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithDuplicateExtens
     auto& layer = env.get_test_layer();
     layer.device_extensions = exts;
 
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
     driver.physical_devices.front().extensions.emplace_back("MyDriverExtension0", 4);
     driver.physical_devices.front().extensions.emplace_back("MyDriverExtension1", 7);
 
@@ -648,7 +616,7 @@ TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithDuplicateExtens
 
 TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithOnlyDuplicateExtensions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     std::vector<Extension> exts;
     std::vector<ManifestLayer::LayerDescription::Extension> layer_exts;
@@ -665,9 +633,6 @@ TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithOnlyDuplicateEx
     auto& layer = env.get_test_layer();
     layer.device_extensions = exts;
 
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
     driver.physical_devices.front().extensions = exts;
 
     InstWrapper inst{env.vulkan_functions};
@@ -679,14 +644,12 @@ TEST(EnumerateDeviceExtensionProperties, ImplicitLayerPresentWithOnlyDuplicateEx
 
 TEST(EnumeratePhysicalDevices, OneCall) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5);
 
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5);
-
-    driver.physical_devices.emplace_back("physical_device_0");
-    driver.physical_devices.emplace_back("physical_device_1");
-    driver.physical_devices.emplace_back("physical_device_2");
-    driver.physical_devices.emplace_back("physical_device_3");
+    driver.add_physical_device("physical_device_0");
+    driver.add_physical_device("physical_device_1");
+    driver.add_physical_device("physical_device_2");
+    driver.add_physical_device("physical_device_3");
 
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
@@ -700,14 +663,13 @@ TEST(EnumeratePhysicalDevices, OneCall) {
 
 TEST(EnumeratePhysicalDevices, TwoCall) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5);
-    driver.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
 
     const uint32_t real_device_count = 2;
     for (uint32_t i = 0; i < real_device_count; i++) {
-        driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i));
+        driver.add_physical_device(std::string("physical_device_") + std::to_string(i));
         driver.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0});
     }
 
@@ -727,14 +689,13 @@ TEST(EnumeratePhysicalDevices, TwoCall) {
 
 TEST(EnumeratePhysicalDevices, MatchOneAndTwoCallNumbers) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.set_min_icd_interface_version(5);
-    driver.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
 
     const uint32_t real_device_count = 3;
     for (uint32_t i = 0; i < real_device_count; i++) {
-        driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i));
+        driver.add_physical_device(std::string("physical_device_") + std::to_string(i));
         driver.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0});
     }
 
@@ -764,9 +725,9 @@ TEST(EnumeratePhysicalDevices, MatchOneAndTwoCallNumbers) {
 
 TEST(EnumeratePhysicalDevices, TwoCallIncomplete) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5);
-    driver.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
 
     const uint32_t real_device_count = 2;
     for (uint32_t i = 0; i < real_device_count; i++) {
@@ -822,8 +783,7 @@ TEST(EnumeratePhysicalDevices, ZeroPhysicalDevices) {
 
 TEST(EnumeratePhysicalDevices, ZeroPhysicalDevicesAfterCreateInstance) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5);
     InstWrapper inst{env.vulkan_functions};
     inst.create_info.set_api_version(VK_API_VERSION_1_1);
     inst.CheckCreate();
@@ -845,8 +805,7 @@ TEST(EnumeratePhysicalDevices, ZeroPhysicalDevicesAfterCreateInstance) {
 
 TEST(EnumeratePhysicalDevices, CallTwiceNormal) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5);
 
     for (size_t i = 0; i < 4; i++) {
         driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i));
@@ -872,8 +831,7 @@ TEST(EnumeratePhysicalDevices, CallTwiceNormal) {
 
 TEST(EnumeratePhysicalDevices, CallTwiceIncompleteOnceNormal) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5);
 
     for (size_t i = 0; i < 8; i++) {
         driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i));
@@ -909,8 +867,7 @@ TEST(EnumeratePhysicalDevices, CallTwiceIncompleteOnceNormal) {
 
 TEST(EnumeratePhysicalDevices, CallThriceSuccessReduce) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5);
 
     for (size_t i = 0; i < 8; i++) {
         driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i));
@@ -946,8 +903,7 @@ TEST(EnumeratePhysicalDevices, CallThriceSuccessReduce) {
 
 TEST(EnumeratePhysicalDevices, CallThriceAddInBetween) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5);
 
     driver.physical_devices.emplace_back("physical_device_0");
     driver.physical_devices.emplace_back("physical_device_1");
@@ -986,8 +942,7 @@ TEST(EnumeratePhysicalDevices, CallThriceAddInBetween) {
 
 TEST(EnumeratePhysicalDevices, CallThriceRemoveInBetween) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5);
 
     for (size_t i = 0; i < 4; i++) {
         driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i));
@@ -1043,8 +998,7 @@ TEST(EnumeratePhysicalDevices, CallThriceRemoveInBetween) {
 
 TEST(EnumeratePhysicalDevices, MultipleAddRemoves) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).set_min_icd_interface_version(5);
 
     for (size_t i = 0; i < 4; i++) {
         driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i));
@@ -1175,9 +1129,7 @@ TEST(EnumeratePhysicalDevices, MultipleAddRemoves) {
 
 TEST(CreateDevice, ExtensionNotPresent) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
@@ -1195,9 +1147,7 @@ TEST(CreateDevice, ExtensionNotPresent) {
 // https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers-devicelayerdeprecation
 TEST(CreateDevice, LayersNotPresent) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
@@ -1215,8 +1165,7 @@ TEST(CreateDevice, LayersNotPresent) {
 // https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers-devicelayerdeprecation
 TEST(CreateDevice, MatchInstanceAndDeviceLayers) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     const char* layer_name = "TestLayer";
     env.add_explicit_layer(
@@ -1242,8 +1191,7 @@ TEST(CreateDevice, MatchInstanceAndDeviceLayers) {
 // https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers-devicelayerdeprecation
 TEST(CreateDevice, UnmatchInstanceAndDeviceLayers) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     const char* layer_name = "TestLayer";
     env.add_explicit_layer(
@@ -1277,8 +1225,7 @@ TEST(CreateDevice, UnmatchInstanceAndDeviceLayers) {
 // https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-layers-devicelayerdeprecation
 TEST(CreateDevice, CheckCopyOfInstanceLayerNames) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     const char* layer_name = "TestLayer";
     env.add_explicit_layer(
@@ -1305,8 +1252,7 @@ TEST(CreateDevice, CheckCopyOfInstanceLayerNames) {
 
 TEST(CreateDevice, ConsecutiveCreate) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
 
     for (uint32_t i = 0; i < 100; i++) {
         driver.physical_devices.emplace_back("physical_device_0");
@@ -1323,8 +1269,7 @@ TEST(CreateDevice, ConsecutiveCreate) {
 
 TEST(CreateDevice, ConsecutiveCreateWithoutDestruction) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
 
     for (uint32_t i = 0; i < 100; i++) {
         driver.physical_devices.emplace_back("physical_device_0");
@@ -1345,9 +1290,8 @@ TEST(CreateDevice, ConsecutiveCreateWithoutDestruction) {
 
 TEST(TryLoadWrongBinaries, WrongICD) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
     env.add_icd(TestICDDetails(CURRENT_PLATFORM_DUMMY_BINARY_WRONG_TYPE).set_is_fake(true));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
 
     DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT};
     InstWrapper inst{env.vulkan_functions};
@@ -1372,8 +1316,7 @@ TEST(TryLoadWrongBinaries, WrongICD) {
 
 TEST(TryLoadWrongBinaries, WrongExplicit) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     const char* layer_name = "DummyLayerExplicit";
     env.add_fake_explicit_layer(
@@ -1403,8 +1346,7 @@ TEST(TryLoadWrongBinaries, WrongExplicit) {
 
 TEST(TryLoadWrongBinaries, WrongImplicit) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     const char* layer_name = "DummyLayerImplicit0";
     env.add_fake_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -1435,8 +1377,7 @@ TEST(TryLoadWrongBinaries, WrongImplicit) {
 
 TEST(TryLoadWrongBinaries, WrongExplicitAndImplicit) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     const char* layer_name_0 = "DummyLayerExplicit";
     env.add_fake_explicit_layer(
@@ -1475,8 +1416,7 @@ TEST(TryLoadWrongBinaries, WrongExplicitAndImplicit) {
 
 TEST(TryLoadWrongBinaries, WrongExplicitAndImplicitErrorOnly) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     const char* layer_name_0 = "DummyLayerExplicit";
     env.add_fake_explicit_layer(
@@ -1514,8 +1454,7 @@ TEST(TryLoadWrongBinaries, WrongExplicitAndImplicitErrorOnly) {
 
 TEST(TryLoadWrongBinaries, BadExplicit) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     const char* layer_name = "DummyLayerExplicit";
     env.add_fake_explicit_layer(
@@ -1540,8 +1479,7 @@ TEST(TryLoadWrongBinaries, BadExplicit) {
 
 TEST(TryLoadWrongBinaries, BadImplicit) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     const char* layer_name = "DummyLayerImplicit0";
     env.add_fake_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -1567,8 +1505,7 @@ TEST(TryLoadWrongBinaries, BadImplicit) {
 
 TEST(TryLoadWrongBinaries, BadExplicitAndImplicit) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
 
     const char* layer_name_0 = "DummyLayerExplicit";
     env.add_fake_explicit_layer(
@@ -1601,9 +1538,8 @@ TEST(TryLoadWrongBinaries, BadExplicitAndImplicit) {
 TEST(TryLoadWrongBinaries, WrongArchDriver) {
     FrameworkEnvironment env{};
     // Intentionally set the wrong arch
-    env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}.icd_manifest.set_library_arch(sizeof(void*) == 4 ? "64" : "32"));
-
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}.icd_manifest.set_library_arch(sizeof(void*) == 4 ? "64" : "32"))
+        .add_physical_device("physical_device_0");
 
     DebugUtilsLogger log{VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT};
     InstWrapper inst{env.vulkan_functions};
@@ -1616,8 +1552,7 @@ TEST(TryLoadWrongBinaries, WrongArchDriver) {
 
 TEST(TryLoadWrongBinaries, WrongArchLayer) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2});
-    env.get_test_icd().physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}).add_physical_device("physical_device_0");
 
     const char* layer_name = "TestLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -1637,9 +1572,10 @@ TEST(TryLoadWrongBinaries, WrongArchLayer) {
 
 TEST(EnumeratePhysicalDeviceGroups, OneCall) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5).set_icd_api_version(VK_API_VERSION_1_1);
-    driver.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .set_icd_api_version(VK_API_VERSION_1_1)
+                       .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
 
     // ICD contains 3 devices in two groups
     for (size_t i = 0; i < 3; i++) {
@@ -1769,9 +1705,10 @@ TEST(EnumeratePhysicalDeviceGroups, OneCall) {
 
 TEST(EnumeratePhysicalDeviceGroups, TwoCall) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5).set_icd_api_version(VK_API_VERSION_1_1);
-    driver.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .set_icd_api_version(VK_API_VERSION_1_1)
+                       .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
 
     // ICD contains 3 devices in two groups
     for (size_t i = 0; i < 3; i++) {
@@ -1884,9 +1821,10 @@ TEST(EnumeratePhysicalDeviceGroups, TwoCall) {
 
 TEST(EnumeratePhysicalDeviceGroups, TwoCallIncomplete) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5).set_icd_api_version(VK_API_VERSION_1_1);
-    driver.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .set_icd_api_version(VK_API_VERSION_1_1)
+                       .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
 
     // ICD contains 3 devices in two groups
     for (size_t i = 0; i < 3; i++) {
@@ -2000,10 +1938,11 @@ TEST(EnumeratePhysicalDeviceGroups, TwoCallIncomplete) {
 // vkEnumeratePhysicalDeviceGroupsKHR, and make sure they return the same info.
 TEST(EnumeratePhysicalDeviceGroups, TestCoreVersusExtensionSameReturns) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5).set_icd_api_version(VK_API_VERSION_1_1);
-    driver.add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME});
-    driver.add_instance_extension({VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME});
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .set_icd_api_version(VK_API_VERSION_1_1)
+                       .add_instance_extension({VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME})
+                       .add_instance_extension({VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME});
 
     // Generate the devices
     for (size_t i = 0; i < 6; i++) {
@@ -2088,8 +2027,9 @@ TEST(EnumeratePhysicalDeviceGroups, TestCoreVersusExtensionSameReturns) {
 // querying vkEnumeratePhysicalDeviceGroups before and after the add.
 TEST(EnumeratePhysicalDeviceGroups, CallThriceAddGroupInBetween) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5).set_icd_api_version(VK_API_VERSION_1_1);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .set_icd_api_version(VK_API_VERSION_1_1);
 
     // Generate the devices
     for (size_t i = 0; i < 7; i++) {
@@ -2181,8 +2121,9 @@ TEST(EnumeratePhysicalDeviceGroups, CallThriceAddGroupInBetween) {
 // querying vkEnumeratePhysicalDeviceGroups before and after the remove.
 TEST(EnumeratePhysicalDeviceGroups, CallTwiceRemoveGroupInBetween) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5).set_icd_api_version(VK_API_VERSION_1_1);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .set_icd_api_version(VK_API_VERSION_1_1);
 
     // Generate the devices
     for (size_t i = 0; i < 7; i++) {
@@ -2266,8 +2207,9 @@ TEST(EnumeratePhysicalDeviceGroups, CallTwiceRemoveGroupInBetween) {
 // querying vkEnumeratePhysicalDeviceGroups before and after the add.
 TEST(EnumeratePhysicalDeviceGroups, CallTwiceAddDeviceInBetween) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5).set_icd_api_version(VK_API_VERSION_1_1);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .set_icd_api_version(VK_API_VERSION_1_1);
 
     // Generate the devices
     for (size_t i = 0; i < 7; i++) {
@@ -2350,8 +2292,9 @@ TEST(EnumeratePhysicalDeviceGroups, CallTwiceAddDeviceInBetween) {
 // querying vkEnumeratePhysicalDeviceGroups before and after the remove.
 TEST(EnumeratePhysicalDeviceGroups, CallTwiceRemoveDeviceInBetween) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5).set_icd_api_version(VK_API_VERSION_1_1);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .set_icd_api_version(VK_API_VERSION_1_1);
 
     // Generate the devices
     for (size_t i = 0; i < 6; i++) {
@@ -2445,8 +2388,9 @@ TEST(EnumeratePhysicalDeviceGroups, CallTwiceRemoveDeviceInBetween) {
 // various devices and groups while querying in between.
 TEST(EnumeratePhysicalDeviceGroups, MultipleAddRemoves) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd().set_min_icd_interface_version(5).set_icd_api_version(VK_API_VERSION_1_1);
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+                       .set_min_icd_interface_version(5)
+                       .set_icd_api_version(VK_API_VERSION_1_1);
 
     // Generate the devices
     for (size_t i = 0; i < 9; i++) {
@@ -2673,8 +2617,7 @@ TEST(ExtensionManual, ToolingProperties) {
                                                      "No-Layer"};
     {  // No support in driver
         FrameworkEnvironment env{};
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-        env.get_test_icd().physical_devices.push_back({});
+        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
         InstWrapper inst{env.vulkan_functions};
         inst.CheckCreate();
@@ -2690,11 +2633,10 @@ TEST(ExtensionManual, ToolingProperties) {
     }
     {  // extension is supported in driver
         FrameworkEnvironment env{};
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-        env.get_test_icd().physical_devices.push_back({});
-        env.get_test_icd().supports_tooling_info_ext = true;
-        env.get_test_icd().tooling_properties.push_back(icd_tool_props);
-        env.get_test_icd().physical_devices.back().extensions.push_back({VK_EXT_TOOLING_INFO_EXTENSION_NAME, 0});
+        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA))
+            .set_supports_tooling_info_ext(true)
+            .add_tooling_property(icd_tool_props)
+            .add_physical_device(PhysicalDevice{}.add_extension(VK_EXT_TOOLING_INFO_EXTENSION_NAME).finish());
 
         InstWrapper inst{env.vulkan_functions};
         inst.CheckCreate();
@@ -2713,11 +2655,12 @@ TEST(ExtensionManual, ToolingProperties) {
     }
     {  // core
         FrameworkEnvironment env{};
-        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-        env.get_test_icd().physical_devices.push_back({});
-        env.get_test_icd().physical_devices.back().properties.apiVersion = VK_MAKE_API_VERSION(0, 1, 3, 0);
-        env.get_test_icd().supports_tooling_info_core = true;
-        env.get_test_icd().tooling_properties.push_back(icd_tool_props);
+        env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA))
+            .add_physical_device({})
+            .set_supports_tooling_info_core(true)
+            .add_tooling_property(icd_tool_props)
+            .physical_devices.back()
+            .properties.apiVersion = VK_MAKE_API_VERSION(0, 1, 3, 0);
 
         InstWrapper inst{env.vulkan_functions};
         inst.CheckCreate();
@@ -3597,11 +3540,9 @@ const char* portability_driver_warning =
 TEST(PortabilityICDConfiguration, PortabilityICDOnly) {
     FrameworkEnvironment env{};
     env.add_icd(
-        TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_is_portability_driver(true)));
-
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-    driver.max_icd_interface_version = 1;
+           TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_is_portability_driver(true)))
+        .add_physical_device("physical_device_0")
+        .set_max_icd_interface_version(1);
     {  // enable portability extension and flag
         InstWrapper inst{env.vulkan_functions};
         inst.create_info.add_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
@@ -3760,22 +3701,16 @@ TEST(PortabilityICDConfiguration, PortabilityAndRegularICDCheckFlagsPassedIntoIC
 
 TEST(PortabilityICDConfiguration, PortabilityAndRegularICDPreInstanceFunctions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)));
-    env.add_icd(
-        TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_is_portability_driver(true)));
-
     Extension first_ext{"VK_EXT_validation_features"};  // known instance extensions
     Extension second_ext{"VK_EXT_headless_surface"};
-    env.get_test_icd().add_instance_extensions({first_ext, second_ext});
-
-    auto& driver0 = env.get_test_icd(0);
-    auto& driver1 = env.get_test_icd(1);
-
-    driver0.physical_devices.emplace_back("physical_device_0");
-    driver0.max_icd_interface_version = 1;
-
-    driver1.physical_devices.emplace_back("portability_physical_device_1");
-    driver1.max_icd_interface_version = 1;
+    env.add_icd(TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)))
+        .add_physical_device("physical_device_0")
+        .set_max_icd_interface_version(1)
+        .add_instance_extensions({first_ext, second_ext});
+    env.add_icd(
+           TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_is_portability_driver(true)))
+        .add_physical_device("portability_physical_device_1")
+        .set_max_icd_interface_version(1);
     {
         // check that enumerating instance extensions work with a portability driver present
         auto extensions = env.GetInstanceExtensions(6);
@@ -3813,8 +3748,8 @@ TEST(PortabilityICDConfiguration, PortabilityAndRegularICDPreInstanceFunctions)
 #if defined(_WIN32)
 TEST(AppPackageDriverDiscovery, AppPackageTest) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}.set_discovery_type(ManifestDiscoveryType::windows_app_package));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2}.set_discovery_type(ManifestDiscoveryType::windows_app_package))
+        .add_physical_device({});
 
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
@@ -3849,10 +3784,9 @@ TEST(DuplicateRegistryEntries, Drivers) {
     auto null_path = env.get_folder(ManifestLocation::null).location() / "test_icd_0.json";
     env.platform_shim->add_manifest(ManifestCategory::icd, null_path.str());
 
-    env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA}.set_discovery_type(ManifestDiscoveryType::null_dir));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-    driver.adapterLUID = _LUID{10, 1000};
+    env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA}.set_discovery_type(ManifestDiscoveryType::null_dir))
+        .add_physical_device("physical_device_0")
+        .set_adapterLUID(_LUID{10, 1000});
     env.platform_shim->add_d3dkmt_adapter(D3DKMT_Adapter{0, _LUID{10, 1000}}.add_driver_manifest_path(env.get_icd_manifest_path()));
 
     InstWrapper inst{env.vulkan_functions};
@@ -3869,10 +3803,10 @@ TEST(LibraryLoading, SystemLocations) {
     EnvVarWrapper ld_library_path("LD_LIBRARY_PATH", env.get_folder(ManifestLocation::driver).location().str());
     ld_library_path.add_to_list(env.get_folder(ManifestLocation::explicit_layer).location().str());
 
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2).set_use_dynamic_library_default_search_paths(true));
-    env.get_test_icd().physical_devices.push_back({});
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2).set_use_dynamic_library_default_search_paths(true))
+                       .add_physical_device({});
     const char* fake_ext_name = "VK_FAKE_extension";
-    env.get_test_icd().physical_devices.back().add_extension(fake_ext_name);
+    driver.physical_devices.back().add_extension(fake_ext_name);
 
     const char* layer_name = "TestLayer";
     env.add_explicit_layer(
@@ -3902,9 +3836,8 @@ TEST(LibraryLoading, SystemLocations) {
 // Check that valid symlinks do not cause the loader to crash when directly in an XDG env-var
 TEST(ManifestDiscovery, ValidSymlinkInXDGEnvVar) {
     FrameworkEnvironment env{FrameworkSettings{}.set_enable_default_search_paths(false)};
-    env.add_icd(
-        TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_discovery_type(ManifestDiscoveryType::override_folder));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_discovery_type(ManifestDiscoveryType::override_folder))
+        .add_physical_device({});
     auto driver_path = env.get_icd_manifest_path(0);
     std::string symlink_name = "symlink_to_driver.json";
     fs::path symlink_path = env.get_folder(ManifestLocation::driver_env_var).location() / symlink_name;
@@ -3921,9 +3854,8 @@ TEST(ManifestDiscovery, ValidSymlinkInXDGEnvVar) {
 // Check that valid symlinks do not cause the loader to crash
 TEST(ManifestDiscovery, ValidSymlink) {
     FrameworkEnvironment env{FrameworkSettings{}.set_enable_default_search_paths(false)};
-    env.add_icd(
-        TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_discovery_type(ManifestDiscoveryType::override_folder));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_discovery_type(ManifestDiscoveryType::override_folder))
+        .add_physical_device({});
 
     auto driver_path = env.get_icd_manifest_path(0);
     std::string symlink_name = "symlink_to_driver.json";
@@ -4022,8 +3954,7 @@ TEST(ManifestDiscovery, AppleBundlesEnvVarActive) {
 
 TEST(LayerCreatesDevice, Basic) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
                                                          .set_name("implicit_layer_name")
@@ -4078,8 +4009,7 @@ TEST(LayerCreatesDevice, DifferentPhysicalDevice) {
 
 TEST(Layer, pfnNextGetInstanceProcAddr_should_not_return_layers_own_functions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd(0).physical_devices.emplace_back("Device0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
                                                          .set_name("implicit_layer_name")
index 4375536f022bf419c9fe4ce41ee01613fb9a4c4e..595ef0e45651df1db663fe6bec18d35de200eb6e 100644 (file)
@@ -43,8 +43,7 @@ std::string get_settings_location_log_message([[maybe_unused]] FrameworkEnvironm
 // Make sure settings layer is found and that a layer defined in it is loaded
 TEST(SettingsFile, FileExist) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     const char* regular_layer_name = "VK_LAYER_TestLayer_0";
     env.add_explicit_layer(TestLayerDetails{
         ManifestLayer{}.add_layer(
@@ -74,8 +73,7 @@ TEST(SettingsFile, FileExist) {
 // Make sure that if the settings file is in a user local path, that it isn't used when running with elevated privileges
 TEST(SettingsFile, SettingsInUnsecuredLocation) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     const char* regular_layer_name = "VK_LAYER_TestLayer_0";
     env.add_explicit_layer(TestLayerDetails{
         ManifestLayer{}.add_layer(
@@ -116,8 +114,7 @@ TEST(SettingsFile, SettingsInUnsecuredLocation) {
 
 TEST(SettingsFile, SettingsInSecuredLocation) {
     FrameworkEnvironment env{FrameworkSettings{}.set_secure_loader_settings(true)};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
     const char* regular_layer_name = "VK_LAYER_TestLayer_0";
     env.add_explicit_layer(TestLayerDetails{
@@ -203,8 +200,7 @@ TEST(SettingsFile, SupportsMultipleSetingsSimultaneously) {
                     .set_name(global_layer_name)
                     .set_path(env.get_layer_manifest_path(1).str())
                     .set_control("on"))));
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     {
         auto layer_props = env.GetLayerProperties(1);
         EXPECT_TRUE(string_eq(layer_props.at(0).layerName, global_layer_name));
@@ -238,8 +234,7 @@ TEST(SettingsFile, SupportsMultipleSetingsSimultaneously) {
 TEST(SettingsFile, LayerAutoEnabledByEnvVars) {
     FrameworkEnvironment env{};
     env.loader_settings.set_file_format_version({1, 0, 0});
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     const char* layer_name = "VK_LAYER_automatic";
     env.add_explicit_layer(
@@ -285,8 +280,7 @@ TEST(SettingsFile, LayerAutoEnabledByEnvVars) {
 // Make sure layers are disallowed from loading if the settings file says so
 TEST(SettingsFile, LayerDisablesImplicitLayer) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     const char* implicit_layer_name = "VK_LAYER_Implicit_TestLayer";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
                                                          .set_name(implicit_layer_name)
@@ -315,8 +309,7 @@ TEST(SettingsFile, LayerDisablesImplicitLayer) {
 // Implicit layers should be reordered by the settings file
 TEST(SettingsFile, ImplicitLayersDontInterfere) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
                                                          .set_name(implicit_layer_name1)
@@ -434,8 +427,7 @@ TEST(SettingsFile, ImplicitLayersDontInterfere) {
 // Make sure layers that are disabled can't be enabled by the application
 TEST(SettingsFile, ApplicationEnablesIgnored) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     const char* explicit_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(
         ManifestLayer{}.add_layer(
@@ -459,8 +451,7 @@ TEST(SettingsFile, ApplicationEnablesIgnored) {
 
 TEST(SettingsFile, LayerListIsEmpty) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     const char* implicit_layer_name = "VK_LAYER_TestLayer";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
                                                          .set_name(implicit_layer_name)
@@ -490,8 +481,7 @@ TEST(SettingsFile, LayerListIsEmpty) {
 // If a settings file exists but contains no valid settings - don't consider it
 TEST(SettingsFile, InvalidSettingsFile) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     const char* explicit_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(
         ManifestLayer{}.add_layer(
@@ -563,8 +553,7 @@ TEST(SettingsFile, InvalidSettingsFile) {
 // Unknown layers are put in the correct location
 TEST(SettingsFile, UnknownLayersInRightPlace) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     const char* explicit_layer_name1 = "VK_LAYER_TestLayer1";
     env.add_explicit_layer(
         ManifestLayer{}.add_layer(
@@ -622,8 +611,7 @@ TEST(SettingsFile, UnknownLayersInRightPlace) {
 // Settings file allows loading multiple layers with the same name - as long as the path is different
 TEST(SettingsFile, MultipleLayersWithSameName) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -668,8 +656,7 @@ TEST(SettingsFile, MultipleLayersWithSameName) {
 // Settings file shouldn't be able to cause the same layer from the same path twice
 TEST(SettingsFile, MultipleLayersWithSamePath) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_TestLayer";
     env.add_explicit_layer(
@@ -704,8 +691,7 @@ TEST(SettingsFile, MultipleLayersWithSamePath) {
 // file is removed
 TEST(SettingsFile, MismatchedLayerNameAndManifestPath) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     const char* manifest_explicit_layer_name = "VK_LAYER_MANIFEST_TestLayer";
     const char* settings_explicit_layer_name = "VK_LAYER_Settings_TestLayer";
@@ -740,8 +726,7 @@ TEST(SettingsFile, MismatchedLayerNameAndManifestPath) {
 // Settings file should take precedence over the meta layer, if present
 TEST(SettingsFile, MetaLayerAlsoActivates) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     const char* settings_explicit_layer_name = "VK_LAYER_Regular_TestLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -848,8 +833,7 @@ TEST(SettingsFile, MetaLayerAlsoActivates) {
 // Layers are correctly ordered by settings file.
 TEST(SettingsFile, LayerOrdering) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     const char* explicit_layer_name1 = "VK_LAYER_Regular_TestLayer1";
     env.add_explicit_layer(
@@ -929,8 +913,7 @@ TEST(SettingsFile, LayerOrdering) {
 
 TEST(SettingsFile, EnvVarsWork_VK_LAYER_PATH) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     const char* explicit_layer_name1 = "VK_LAYER_Regular_TestLayer1";
     env.add_explicit_layer(TestLayerDetails{
@@ -1010,8 +993,7 @@ TEST(SettingsFile, EnvVarsWork_VK_LAYER_PATH) {
 
 TEST(SettingsFile, EnvVarsWork_VK_ADD_LAYER_PATH) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -1101,8 +1083,7 @@ TEST(SettingsFile, EnvVarsWork_VK_ADD_LAYER_PATH) {
 
 TEST(SettingsFile, EnvVarsWork_VK_INSTANCE_LAYERS) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_Regular_TestLayer1";
     env.add_explicit_layer(TestLayerDetails{
@@ -1151,8 +1132,7 @@ TEST(SettingsFile, EnvVarsWork_VK_INSTANCE_LAYERS) {
 // Make sure that layers disabled by settings file aren't enabled by VK_LOADER_LAYERS_ENABLE
 TEST(SettingsFile, EnvVarsWork_VK_LOADER_LAYERS_ENABLE) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_Regular_TestLayer1";
     env.add_explicit_layer(TestLayerDetails{
@@ -1179,8 +1159,7 @@ TEST(SettingsFile, EnvVarsWork_VK_LOADER_LAYERS_ENABLE) {
 // Make sure that layers enabled by settings file aren't disabled by VK_LOADER_LAYERS_ENABLE
 TEST(SettingsFile, EnvVarsWork_VK_LOADER_LAYERS_DISABLE) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
 
     const char* explicit_layer_name = "VK_LAYER_Regular_TestLayer1";
     env.add_explicit_layer(TestLayerDetails{
@@ -1209,8 +1188,7 @@ TEST(SettingsFile, EnvVarsWork_VK_LOADER_LAYERS_DISABLE) {
 #if defined(WIN32)
 TEST(SettingsFile, MultipleKeysInRegistryInUnsecureLocation) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     env.platform_shim->add_unsecured_manifest(ManifestCategory::settings, "jank_path");
     env.platform_shim->add_unsecured_manifest(ManifestCategory::settings, "jank_path2");
 
@@ -1243,8 +1221,7 @@ TEST(SettingsFile, MultipleKeysInRegistryInUnsecureLocation) {
 
 TEST(SettingsFile, MultipleKeysInRegistryInSecureLocation) {
     FrameworkEnvironment env{FrameworkSettings{}.set_secure_loader_settings(true)};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     env.platform_shim->add_manifest(ManifestCategory::settings, "jank_path");
     env.platform_shim->add_manifest(ManifestCategory::settings, "jank_path2");
 
@@ -1284,8 +1261,7 @@ TEST(SettingsFile, MultipleKeysInRegistryInSecureLocation) {
 // Preinstance functions respect the settings file
 TEST(SettingsFile, PreInstanceFunctions) {
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer";
 
@@ -1421,8 +1397,7 @@ TEST(SettingsFile, ImplicitLayerDisableEnvironmentVariableOverriden) {
     };
 
     FrameworkEnvironment env;
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
     const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer";
 
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -1533,8 +1508,7 @@ TEST(SettingsFile, ImplicitLayerDisableEnvironmentVariableOverriden) {
 // Settings can say which filters to use - make sure those are propagated & treated correctly
 TEST(SettingsFile, StderrLogFilters) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     const char* explicit_layer_name = "Regular_TestLayer1";
     env.add_explicit_layer(TestLayerDetails{
         ManifestLayer{}.add_layer(
@@ -1651,8 +1625,7 @@ TEST(SettingsFile, StderrLogFilters) {
 // Enough layers exist that arrays need to be resized - make sure that works
 TEST(SettingsFile, TooManyLayers) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    env.get_test_icd().add_physical_device({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({});
     env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting(
         AppSpecificSettings{}.add_stderr_log_filter("all"));
     std::string layer_name = "VK_LAYER_regular_layer_name_";
index d61c6221e1661489a37be5829fac57a7d788c6f8..2a2aadabb40d145836a2b5f284ab487b7db0e6e5 100644 (file)
@@ -57,10 +57,9 @@ void create_destroy_device_loop(FrameworkEnvironment* env, uint32_t num_loops_cr
                                 uint32_t num_loops_try_get_proc_addr) {
     InstWrapper inst{env->vulkan_functions};
     inst.CheckCreate();
-    VkPhysicalDevice phys_dev = inst.GetPhysDev();
     for (uint32_t i = 0; i < num_loops_create_destroy_device; i++) {
         DeviceWrapper dev{inst};
-        dev.CheckCreate(phys_dev);
+        dev.CheckCreate(inst.GetPhysDev());
 
         for (uint32_t j = 0; j < num_loops_try_get_proc_addr; j++) {
             PFN_vkCmdBindPipeline p = dev.load("vkCmdBindPipeline");
@@ -86,15 +85,13 @@ TEST(Threading, InstanceCreateDestroyLoop) {
     const auto processor_count = std::thread::hardware_concurrency();
 
     FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("")};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
     uint32_t num_loops_create_destroy_instance = 500;
     uint32_t num_loops_try_get_instance_proc_addr = 5;
     uint32_t num_loops_try_get_device_proc_addr = 100;
-    auto& driver = env.get_test_icd();
 
-    driver.physical_devices.emplace_back("physical_device_0");
-    driver.physical_devices.back().known_device_functions.push_back(
-        {"vkCmdBindPipeline", to_vkVoidFunction(test_vkCmdBindPipeline)});
+    driver.physical_devices.emplace_back("physical_device_0")
+        .known_device_functions.push_back({"vkCmdBindPipeline", to_vkVoidFunction(test_vkCmdBindPipeline)});
 
     std::vector<std::thread> instance_creation_threads;
     std::vector<std::thread> function_query_threads;
@@ -112,22 +109,17 @@ TEST(Threading, DeviceCreateDestroyLoop) {
     const auto processor_count = std::thread::hardware_concurrency();
 
     FrameworkEnvironment env{FrameworkSettings{}.set_log_filter("")};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
 
     uint32_t num_loops_create_destroy_device = 1000;
     uint32_t num_loops_try_get_device_proc_addr = 5;
-    auto& driver = env.get_test_icd();
 
-    driver.physical_devices.emplace_back("physical_device_0");
-    driver.physical_devices.back().known_device_functions.push_back(
-        {"vkCmdBindPipeline", to_vkVoidFunction(test_vkCmdBindPipeline)});
-    driver.physical_devices.back().known_device_functions.push_back(
-        {"vkCmdBindDescriptorSets", to_vkVoidFunction(test_vkCmdBindDescriptorSets)});
-    driver.physical_devices.back().known_device_functions.push_back(
-        {"vkCmdBindVertexBuffers", to_vkVoidFunction(test_vkCmdBindVertexBuffers)});
-    driver.physical_devices.back().known_device_functions.push_back(
-        {"vkCmdBindIndexBuffer", to_vkVoidFunction(test_vkCmdBindIndexBuffer)});
-    driver.physical_devices.back().known_device_functions.push_back({"vkCmdDraw", to_vkVoidFunction(test_vkCmdDraw)});
+    driver.physical_devices.emplace_back("physical_device_0").known_device_functions = {
+        {"vkCmdBindPipeline", to_vkVoidFunction(test_vkCmdBindPipeline)},
+        {"vkCmdBindDescriptorSets", to_vkVoidFunction(test_vkCmdBindDescriptorSets)},
+        {"vkCmdBindVertexBuffers", to_vkVoidFunction(test_vkCmdBindVertexBuffers)},
+        {"vkCmdBindIndexBuffer", to_vkVoidFunction(test_vkCmdBindIndexBuffer)},
+        {"vkCmdDraw", to_vkVoidFunction(test_vkCmdDraw)}};
 
     std::vector<std::thread> device_creation_threads;
 
index 4e2a20e8d630b4e7ebe40f93d44fb5f75abdf0c8..569234e83988aaf7bfccbf6a7af758f5bfeaef45 100644 (file)
@@ -335,13 +335,11 @@ using layer_implementation_physical_device_functions = layer_implementation_func
 
 TEST(UnknownFunction, PhysicalDeviceFunction) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
     uint32_t function_count = MAX_NUM_UNKNOWN_EXTS;
     std::vector<std::string> function_names;
     add_function_names(function_names, function_count);
 
-    driver.physical_devices.emplace_back("physical_device_0");
     fill_implementation_functions(driver.physical_devices.at(0).custom_physical_device_functions, function_names,
                                   custom_physical_device_functions{}, function_count);
     InstWrapper inst{env.vulkan_functions};
@@ -354,22 +352,15 @@ TEST(UnknownFunction, PhysicalDeviceFunction) {
 
 TEST(UnknownFunction, PhysicalDeviceFunctionMultipleDriverSupport) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver_0 = env.get_test_icd(0);
-    auto& driver_1 = env.get_test_icd(1);
+    auto& driver_0 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
+    auto& driver_1 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
     uint32_t function_count = MAX_NUM_UNKNOWN_EXTS;
     std::vector<std::string> function_names;
     add_function_names(function_names, function_count);
 
     // used to identify the GPUs
-    VkPhysicalDeviceProperties props{};
-    driver_0.physical_devices.emplace_back("physical_device_0");
-    props.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU;
-    driver_0.physical_devices.back().set_properties(props);
-    driver_1.physical_devices.emplace_back("physical_device_1");
-    props.deviceType = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU;
-    driver_1.physical_devices.back().set_properties(props);
+    driver_0.physical_devices.emplace_back("physical_device_0").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU;
+    driver_1.physical_devices.emplace_back("physical_device_1").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU;
 
     for (uint32_t i = 0; i < function_count / 10; i++) {
         fill_implementation_functions(driver_0.physical_devices.at(0).custom_physical_device_functions, function_names,
@@ -383,6 +374,7 @@ TEST(UnknownFunction, PhysicalDeviceFunctionMultipleDriverSupport) {
     auto phys_devs = inst.GetPhysDevs(2);
     VkPhysicalDevice phys_dev_0 = phys_devs[0];
     VkPhysicalDevice phys_dev_1 = phys_devs[1];
+    VkPhysicalDeviceProperties props{};
     env.vulkan_functions.vkGetPhysicalDeviceProperties(phys_devs[0], &props);
     if (props.deviceType != VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) {
         phys_dev_0 = phys_devs[1];
@@ -399,21 +391,14 @@ TEST(UnknownFunction, PhysicalDeviceFunctionMultipleDriverSupport) {
 // Add unknown functions to driver 0, and try to use them on driver 1.
 TEST(UnknownFunctionDeathTests, PhysicalDeviceFunctionErrorPath) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver_0 = env.get_test_icd(0);
-    auto& driver_1 = env.get_test_icd(1);
+    auto& driver_0 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
+    auto& driver_1 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
     std::vector<std::string> function_names;
     add_function_names(function_names, 1);
 
     // used to identify the GPUs
-    VkPhysicalDeviceProperties props{};
-    driver_0.physical_devices.emplace_back("physical_device_0");
-    props.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU;
-    driver_0.physical_devices.back().set_properties(props);
-    driver_1.physical_devices.emplace_back("physical_device_1");
-    props.deviceType = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU;
-    driver_1.physical_devices.back().set_properties(props);
+    driver_0.physical_devices.emplace_back("physical_device_0").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU;
+    driver_1.physical_devices.emplace_back("physical_device_1").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU;
     function_names.push_back(std::string("vkNotIntRealFuncTEST_0"));
 
     custom_physical_device_functions funcs{};
@@ -425,6 +410,7 @@ TEST(UnknownFunctionDeathTests, PhysicalDeviceFunctionErrorPath) {
 
     auto phys_devs = inst.GetPhysDevs(2);
     VkPhysicalDevice phys_dev_to_use = phys_devs[1];
+    VkPhysicalDeviceProperties props{};
     env.vulkan_functions.vkGetPhysicalDeviceProperties(phys_devs[1], &props);
     if (props.deviceType != VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) phys_dev_to_use = phys_devs[0];
     // use the wrong GPU to query the functions, should get 5 errors
@@ -437,14 +423,11 @@ TEST(UnknownFunctionDeathTests, PhysicalDeviceFunctionErrorPath) {
 
 TEST(UnknownFunction, PhysicalDeviceFunctionWithImplicitLayerImplementation) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
     uint32_t function_count = MAX_NUM_UNKNOWN_EXTS;
-    auto& driver = env.get_test_icd();
     std::vector<std::string> function_names;
     add_function_names(function_names, function_count);
 
-    driver.physical_devices.emplace_back("physical_device_0");
-
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
                                                          .set_name("VK_LAYER_implicit_layer_unknown_function_intercept")
                                                          .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)
@@ -464,22 +447,15 @@ TEST(UnknownFunction, PhysicalDeviceFunctionWithImplicitLayerImplementation) {
 
 TEST(UnknownFunction, PhysicalDeviceFunctionMultipleDriverSupportWithImplicitLayerImplementation) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver_0 = env.get_test_icd(0);
-    auto& driver_1 = env.get_test_icd(1);
+    auto& driver_0 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
+    auto& driver_1 = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
     uint32_t function_count = MAX_NUM_UNKNOWN_EXTS;
     std::vector<std::string> function_names;
     add_function_names(function_names, function_count);
 
     // used to identify the GPUs
-    VkPhysicalDeviceProperties props{};
-    driver_0.physical_devices.emplace_back("physical_device_0");
-    props.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU;
-    driver_0.physical_devices.back().set_properties(props);
-    driver_1.physical_devices.emplace_back("physical_device_1");
-    props.deviceType = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU;
-    driver_1.physical_devices.back().set_properties(props);
+    driver_0.physical_devices.emplace_back("physical_device_0").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU;
+    driver_1.physical_devices.emplace_back("physical_device_1").properties.deviceType = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU;
     for (uint32_t i = 0; i < function_count / 10; i++) {
         fill_implementation_functions(driver_0.physical_devices.at(0).custom_physical_device_functions, function_names,
                                       custom_physical_device_functions{}, 5, i * 10);
@@ -499,6 +475,7 @@ TEST(UnknownFunction, PhysicalDeviceFunctionMultipleDriverSupportWithImplicitLay
     auto phys_devs = inst.GetPhysDevs(2);
     VkPhysicalDevice phys_dev_0 = phys_devs[0];
     VkPhysicalDevice phys_dev_1 = phys_devs[1];
+    VkPhysicalDeviceProperties props{};
     env.vulkan_functions.vkGetPhysicalDeviceProperties(phys_devs[0], &props);
     if (props.deviceType != VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) {
         phys_dev_0 = phys_devs[1];
@@ -514,10 +491,8 @@ TEST(UnknownFunction, PhysicalDeviceFunctionMultipleDriverSupportWithImplicitLay
 
 TEST(UnknownFunction, PhysicalDeviceFunctionWithImplicitLayerInterception) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
     uint32_t function_count = MAX_NUM_UNKNOWN_EXTS;
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
 
     std::vector<std::string> function_names;
     add_function_names(function_names, function_count);
@@ -540,12 +515,10 @@ TEST(UnknownFunction, PhysicalDeviceFunctionWithImplicitLayerInterception) {
 
 TEST(UnknownFunction, PhysicalDeviceFunctionDriverSupportWithImplicitLayerInterception) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
     uint32_t function_count = 100;
     std::vector<std::string> function_names;
     add_function_names(function_names, function_count);
-    driver.physical_devices.emplace_back("physical_device_0");
     fill_implementation_functions(driver.physical_devices.at(0).custom_physical_device_functions, function_names,
                                   layer_implementation_physical_device_functions{}, function_count);
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -566,8 +539,7 @@ TEST(UnknownFunction, PhysicalDeviceFunctionDriverSupportWithImplicitLayerInterc
 
 TEST(UnknownFunction, PhysicalDeviceFunctionWithMultipleImplicitLayersInterception) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
     std::vector<std::string> function_names;
     uint32_t function_count = MAX_NUM_UNKNOWN_EXTS;
     add_function_names(function_names, function_count);
@@ -656,12 +628,9 @@ void unknown_function_test_impl(std::vector<TestConfig> const& flags) {
     using layer_intercept_functions_type = layer_intercept_functions<DispatchableHandleType>;
 
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
     uint32_t function_count = MAX_NUM_UNKNOWN_EXTS;
 
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
-
     std::vector<std::string> function_names;
     add_function_names(function_names, function_count);
 
@@ -1120,10 +1089,7 @@ struct D {};
 
 TEST(UnknownFunction, PhysicalDeviceFunctionTwoLayerInterception) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
-
-    driver.physical_devices.emplace_back("physical_device_0");
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
     PhysicalDevice& pd = driver.physical_devices.back();
 
     UnknownFunction f{"vkFunc1"};
@@ -1156,8 +1122,8 @@ TEST(UnknownFunction, PhysicalDeviceFunctionTwoLayerInterception) {
 
 TEST(UnknownFunction, ManyCombinations) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    auto& driver = env.get_test_icd();
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
+    PhysicalDevice& physical_device = driver.physical_devices.back();
     std::vector<UnknownFunction> unknown_funcs;
 
     unknown_funcs.emplace_back("vkZero_uint32_uint32_0");
@@ -1174,9 +1140,6 @@ TEST(UnknownFunction, ManyCombinations) {
     unknown_funcs.emplace_back("vkOne_uint32_uint32_char_11");
     unknown_funcs.emplace_back("vkTwo_ptr_int_ptr_int_12");
 
-    driver.physical_devices.emplace_back("physical_device_0");
-    PhysicalDevice& physical_device = driver.physical_devices.back();
-
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
                                                          .set_name("VK_LAYER_implicit_layer_unknown_function_intercept_0")
                                                          .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)
index f9b30730e68ae77c69dbf81c0c6c2278f83f5e6e..2e68c984a4d39cae0900457eca47f5068dbd707d 100644 (file)
 
 TEST(ICDInterfaceVersion2Plus, vk_icdNegotiateLoaderICDInterfaceVersion) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
 
     for (uint32_t i = 0; i <= 6; i++) {
         for (uint32_t j = i; j <= 6; j++) {
-            driver.min_icd_interface_version = i;
-            driver.max_icd_interface_version = j;
+            driver.set_min_icd_interface_version(i).set_max_icd_interface_version(j);
             InstWrapper inst{env.vulkan_functions};
             inst.CheckCreate();
         }
@@ -44,28 +42,23 @@ TEST(ICDInterfaceVersion2Plus, vk_icdNegotiateLoaderICDInterfaceVersion) {
 
 TEST(ICDInterfaceVersion2Plus, version_3) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
     {
-        driver.min_icd_interface_version = 2;
-        driver.enable_icd_wsi = true;
+        driver.set_min_icd_interface_version(2).set_enable_icd_wsi(true);
         InstWrapper inst{env.vulkan_functions};
         inst.CheckCreate();
 
         ASSERT_FALSE(driver.is_using_icd_wsi);
     }
     {
-        driver.min_icd_interface_version = 3;
-        driver.enable_icd_wsi = false;
+        driver.set_min_icd_interface_version(3).set_enable_icd_wsi(false);
         InstWrapper inst{env.vulkan_functions};
         inst.CheckCreate();
 
         ASSERT_FALSE(driver.is_using_icd_wsi);
     }
     {
-        driver.min_icd_interface_version = 3;
-        driver.enable_icd_wsi = true;
+        driver.set_min_icd_interface_version(3).set_enable_icd_wsi(true);
         InstWrapper inst{env.vulkan_functions};
         inst.CheckCreate();
 
@@ -75,9 +68,7 @@ TEST(ICDInterfaceVersion2Plus, version_3) {
 
 TEST(ICDInterfaceVersion2Plus, version_4) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.physical_devices.emplace_back("physical_device_0");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device("physical_device_0");
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
 }
@@ -109,8 +100,7 @@ TEST(ICDInterfaceVersion2Plus, l5_icd5) {
 // This test makes sure that EnumerateAdapterPhysicalDevices on drivers found in the Khronos/Vulkan/Drivers registry
 TEST(ICDInterfaceVersion2PlusEnumerateAdapterPhysicalDevices, version_6_in_drivers_registry) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES));
-    auto& driver = env.get_test_icd();
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES));
     driver.physical_devices.emplace_back("physical_device_1");
     driver.physical_devices.emplace_back("physical_device_0");
     uint32_t physical_count = static_cast<uint32_t>(driver.physical_devices.size());
@@ -190,9 +180,9 @@ TEST(ICDInterfaceVersion2PlusEnumerateAdapterPhysicalDevices, version_6) {
 // EnumerateAdapterPhysicalDevices
 TEST(ICDInterfaceVersion2, EnumAdapters2) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA}.set_discovery_type(ManifestDiscoveryType::null_dir));
+    auto& driver =
+        env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA}.set_discovery_type(ManifestDiscoveryType::null_dir));
     InstWrapper inst{env.vulkan_functions};
-    auto& driver = env.get_test_icd();
     driver.physical_devices.emplace_back("physical_device_1");
     driver.physical_devices.emplace_back("physical_device_0");
     uint32_t physical_count = static_cast<uint32_t>(driver.physical_devices.size());
@@ -215,11 +205,11 @@ TEST(ICDInterfaceVersion2, EnumAdapters2) {
 // Verify that the handles are correct by calling vkGetPhysicalDeviceProperties with them
 TEST(ICDInterfaceVersion2PlusEnumerateAdapterPhysicalDevices, VerifyPhysDevResults) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES}.set_discovery_type(
-        ManifestDiscoveryType::null_dir));
-    auto& driver = env.get_test_icd();
-    driver.min_icd_interface_version = 6;
-    driver.set_icd_api_version(VK_API_VERSION_1_1);
+    auto& driver =
+        env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES}.set_discovery_type(
+                        ManifestDiscoveryType::null_dir))
+            .set_min_icd_interface_version(6)
+            .set_icd_api_version(VK_API_VERSION_1_1);
     const std::vector<std::string> physical_device_names = {"physical_device_4", "physical_device_3", "physical_device_2",
                                                             "physical_device_1", "physical_device_0"};
     for (const auto& dev_name : physical_device_names) driver.physical_devices.push_back(dev_name);
@@ -229,7 +219,7 @@ TEST(ICDInterfaceVersion2PlusEnumerateAdapterPhysicalDevices, VerifyPhysDevResul
     desc1.VendorId = known_driver.vendor_id;
     desc1.AdapterLuid = _LUID{10, 1000};
     env.platform_shim->add_dxgi_adapter(GpuType::discrete, desc1);
-    env.get_test_icd().set_adapterLUID(desc1.AdapterLuid);
+    driver.set_adapterLUID(desc1.AdapterLuid);
 
     env.platform_shim->add_d3dkmt_adapter(D3DKMT_Adapter{0, _LUID{10, 1000}}.add_driver_manifest_path(env.get_icd_manifest_path()));
 
@@ -259,27 +249,27 @@ TEST(ICDInterfaceVersion2PlusEnumerateAdapterPhysicalDevices, VerifyPhysDevResul
 // Make sure physical device groups enumerated through EnumerateAdapterPhysicalDevices are properly found
 TEST(ICDInterfaceVersion2PlusEnumerateAdapterPhysicalDevices, VerifyGroupResults) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES}.set_discovery_type(
-        ManifestDiscoveryType::null_dir));
-    auto& driver = env.get_test_icd();
-    driver.min_icd_interface_version = 6;
-    driver.set_icd_api_version(VK_API_VERSION_1_1);
+    auto& driver =
+        env.add_icd(TestICDDetails{TEST_ICD_PATH_VERSION_2_EXPORT_ICD_ENUMERATE_ADAPTER_PHYSICAL_DEVICES}.set_discovery_type(
+                        ManifestDiscoveryType::null_dir))
+            .set_min_icd_interface_version(6)
+            .set_icd_api_version(VK_API_VERSION_1_1);
     const std::vector<std::string> physical_device_names = {"physical_device_4", "physical_device_3", "physical_device_2",
                                                             "physical_device_1", "physical_device_0"};
-    for (const auto& dev_name : physical_device_names) driver.physical_devices.push_back(dev_name);
+    for (const auto& dev_name : physical_device_names) {
+        driver.physical_devices.push_back(dev_name);
+    }
 
-    driver.physical_device_groups.emplace_back(driver.physical_devices[0]);
-    driver.physical_device_groups.back().use_physical_device(driver.physical_devices[1]);
+    driver.physical_device_groups.emplace_back(driver.physical_devices[0]).use_physical_device(driver.physical_devices[1]);
     driver.physical_device_groups.emplace_back(driver.physical_devices[2]);
-    driver.physical_device_groups.emplace_back(driver.physical_devices[3]);
-    driver.physical_device_groups.back().use_physical_device(driver.physical_devices[4]);
+    driver.physical_device_groups.emplace_back(driver.physical_devices[3]).use_physical_device(driver.physical_devices[4]);
 
     auto& known_driver = known_driver_list.at(2);  // which driver this test pretends to be
     DXGI_ADAPTER_DESC1 desc1{};
     desc1.VendorId = known_driver.vendor_id;
     desc1.AdapterLuid = _LUID{10, 1000};
     env.platform_shim->add_dxgi_adapter(GpuType::discrete, desc1);
-    env.get_test_icd().set_adapterLUID(desc1.AdapterLuid);
+    driver.set_adapterLUID(desc1.AdapterLuid);
 
     env.platform_shim->add_d3dkmt_adapter(D3DKMT_Adapter{0, _LUID{10, 1000}}.add_driver_manifest_path(env.get_icd_manifest_path()));
 
@@ -316,26 +306,22 @@ TEST(ICDInterfaceVersion2PlusEnumerateAdapterPhysicalDevices, VerifyGroupResults
 #endif  // defined(WIN32)
 TEST(ICDInterfaceVersion7, SingleDriver) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7_WITH_ADDITIONAL_EXPORTS));
-    env.get_test_icd().physical_devices.push_back({});
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7_WITH_ADDITIONAL_EXPORTS)).add_physical_device({});
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
-    auto phys_dev = inst.GetPhysDev();
     DeviceWrapper dev{inst};
-    dev.CheckCreate(phys_dev);
-    ASSERT_EQ(env.get_test_icd().interface_version_check, InterfaceVersionCheck::version_is_supported);
+    dev.CheckCreate(inst.GetPhysDev());
+    ASSERT_EQ(driver.interface_version_check, InterfaceVersionCheck::version_is_supported);
 }
 
 TEST(ICDInterfaceVersion7, SingleDriverWithoutExportedFunctions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7));
-    env.get_test_icd().physical_devices.push_back({});
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7)).add_physical_device({});
     InstWrapper inst{env.vulkan_functions};
     inst.CheckCreate();
-    auto phys_dev = inst.GetPhysDev();
     DeviceWrapper dev{inst};
-    dev.CheckCreate(phys_dev);
-    ASSERT_EQ(env.get_test_icd().interface_version_check, InterfaceVersionCheck::version_is_supported);
+    dev.CheckCreate(inst.GetPhysDev());
+    ASSERT_EQ(driver.interface_version_check, InterfaceVersionCheck::version_is_supported);
 }
 
 TEST(MultipleICDConfig, Basic) {
@@ -529,7 +515,6 @@ TEST(MultipleICDConfig, version_5_and_version_6) {
         desc1.AdapterLuid = LUID{100 + i, static_cast<LONG>(100 + i)};
         driver_6.set_adapterLUID(desc1.AdapterLuid);
         env.platform_shim->add_dxgi_adapter(GpuType::discrete, desc1);
-        env.get_test_icd().set_adapterLUID(desc1.AdapterLuid);
     }
     uint32_t returned_physical_count = 0;
     InstWrapper inst{env.vulkan_functions};
@@ -604,51 +589,47 @@ VkResult test_vkSetPrivateData(VkDevice, VkObjectType, uint64_t, VkPrivateDataSl
 
 TEST(MinorVersionUpdate, Version1_3) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
-    auto& icd_phys_dev = env.get_test_icd().physical_devices.back();
-    icd_phys_dev.known_device_functions.insert(
-        icd_phys_dev.known_device_functions.end(),
-        {
-            VulkanFunction{"vkCmdBeginRendering", to_vkVoidFunction(test_vkCmdBeginRendering)},
-            VulkanFunction{"vkCmdBindVertexBuffers2", to_vkVoidFunction(test_vkCmdBindVertexBuffers2)},
-            VulkanFunction{"vkCmdBlitImage2", to_vkVoidFunction(test_vkCmdBlitImage2)},
-            VulkanFunction{"vkCmdCopyBuffer2", to_vkVoidFunction(test_vkCmdCopyBuffer2)},
-            VulkanFunction{"vkCmdCopyBufferToImage2", to_vkVoidFunction(test_vkCmdCopyBufferToImage2)},
-            VulkanFunction{"vkCmdCopyImage2", to_vkVoidFunction(test_vkCmdCopyImage2)},
-            VulkanFunction{"vkCmdCopyImageToBuffer2", to_vkVoidFunction(test_vkCmdCopyImageToBuffer2)},
-            VulkanFunction{"vkCmdEndRendering", to_vkVoidFunction(test_vkCmdEndRendering)},
-            VulkanFunction{"vkCmdPipelineBarrier2", to_vkVoidFunction(test_vkCmdPipelineBarrier2)},
-            VulkanFunction{"vkCmdResetEvent2", to_vkVoidFunction(test_vkCmdResetEvent2)},
-            VulkanFunction{"vkCmdResolveImage2", to_vkVoidFunction(test_vkCmdResolveImage2)},
-            VulkanFunction{"vkCmdSetCullMode", to_vkVoidFunction(test_vkCmdSetCullMode)},
-            VulkanFunction{"vkCmdSetDepthBiasEnable", to_vkVoidFunction(test_vkCmdSetDepthBiasEnable)},
-            VulkanFunction{"vkCmdSetDepthBoundsTestEnable", to_vkVoidFunction(test_vkCmdSetDepthBoundsTestEnable)},
-            VulkanFunction{"vkCmdSetDepthCompareOp", to_vkVoidFunction(test_vkCmdSetDepthCompareOp)},
-            VulkanFunction{"vkCmdSetDepthTestEnable", to_vkVoidFunction(test_vkCmdSetDepthTestEnable)},
-            VulkanFunction{"vkCmdSetDepthWriteEnable", to_vkVoidFunction(test_vkCmdSetDepthWriteEnable)},
-            VulkanFunction{"vkCmdSetEvent2", to_vkVoidFunction(test_vkCmdSetEvent2)},
-            VulkanFunction{"vkCmdSetFrontFace", to_vkVoidFunction(test_vkCmdSetFrontFace)},
-            VulkanFunction{"vkCmdSetPrimitiveRestartEnable", to_vkVoidFunction(test_vkCmdSetPrimitiveRestartEnable)},
-            VulkanFunction{"vkCmdSetPrimitiveTopology", to_vkVoidFunction(test_vkCmdSetPrimitiveTopology)},
-            VulkanFunction{"vkCmdSetRasterizerDiscardEnable", to_vkVoidFunction(test_vkCmdSetRasterizerDiscardEnable)},
-            VulkanFunction{"vkCmdSetScissorWithCount", to_vkVoidFunction(test_vkCmdSetScissorWithCount)},
-            VulkanFunction{"vkCmdSetStencilOp", to_vkVoidFunction(test_vkCmdSetStencilOp)},
-            VulkanFunction{"vkCmdSetStencilTestEnable", to_vkVoidFunction(test_vkCmdSetStencilTestEnable)},
-            VulkanFunction{"vkCmdSetViewportWithCount", to_vkVoidFunction(test_vkCmdSetViewportWithCount)},
-            VulkanFunction{"vkCmdWaitEvents2", to_vkVoidFunction(test_vkCmdWaitEvents2)},
-            VulkanFunction{"vkCmdWriteTimestamp2", to_vkVoidFunction(test_vkCmdWriteTimestamp2)},
-            VulkanFunction{"vkCreatePrivateDataSlot", to_vkVoidFunction(test_vkCreatePrivateDataSlot)},
-            VulkanFunction{"vkDestroyPrivateDataSlot", to_vkVoidFunction(test_vkDestroyPrivateDataSlot)},
-            VulkanFunction{"vkGetDeviceBufferMemoryRequirements", to_vkVoidFunction(test_vkGetDeviceBufferMemoryRequirements)},
-            VulkanFunction{"vkGetDeviceImageMemoryRequirements", to_vkVoidFunction(test_vkGetDeviceImageMemoryRequirements)},
-            VulkanFunction{"vkGetDeviceImageSparseMemoryRequirements",
-                           to_vkVoidFunction(test_vkGetDeviceImageSparseMemoryRequirements)},
-            VulkanFunction{"vkGetPrivateData", to_vkVoidFunction(test_vkGetPrivateData)},
-            VulkanFunction{"vkQueueSubmit2", to_vkVoidFunction(test_vkQueueSubmit2)},
-            VulkanFunction{"vkSetPrivateData", to_vkVoidFunction(test_vkSetPrivateData)},
-        });
-    icd_phys_dev.extensions.push_back({"VK_SOME_EXT_haha"});
+    auto& driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
+    driver.physical_devices.back().known_device_functions = {
+        VulkanFunction{"vkCmdBeginRendering", to_vkVoidFunction(test_vkCmdBeginRendering)},
+        VulkanFunction{"vkCmdBindVertexBuffers2", to_vkVoidFunction(test_vkCmdBindVertexBuffers2)},
+        VulkanFunction{"vkCmdBlitImage2", to_vkVoidFunction(test_vkCmdBlitImage2)},
+        VulkanFunction{"vkCmdCopyBuffer2", to_vkVoidFunction(test_vkCmdCopyBuffer2)},
+        VulkanFunction{"vkCmdCopyBufferToImage2", to_vkVoidFunction(test_vkCmdCopyBufferToImage2)},
+        VulkanFunction{"vkCmdCopyImage2", to_vkVoidFunction(test_vkCmdCopyImage2)},
+        VulkanFunction{"vkCmdCopyImageToBuffer2", to_vkVoidFunction(test_vkCmdCopyImageToBuffer2)},
+        VulkanFunction{"vkCmdEndRendering", to_vkVoidFunction(test_vkCmdEndRendering)},
+        VulkanFunction{"vkCmdPipelineBarrier2", to_vkVoidFunction(test_vkCmdPipelineBarrier2)},
+        VulkanFunction{"vkCmdResetEvent2", to_vkVoidFunction(test_vkCmdResetEvent2)},
+        VulkanFunction{"vkCmdResolveImage2", to_vkVoidFunction(test_vkCmdResolveImage2)},
+        VulkanFunction{"vkCmdSetCullMode", to_vkVoidFunction(test_vkCmdSetCullMode)},
+        VulkanFunction{"vkCmdSetDepthBiasEnable", to_vkVoidFunction(test_vkCmdSetDepthBiasEnable)},
+        VulkanFunction{"vkCmdSetDepthBoundsTestEnable", to_vkVoidFunction(test_vkCmdSetDepthBoundsTestEnable)},
+        VulkanFunction{"vkCmdSetDepthCompareOp", to_vkVoidFunction(test_vkCmdSetDepthCompareOp)},
+        VulkanFunction{"vkCmdSetDepthTestEnable", to_vkVoidFunction(test_vkCmdSetDepthTestEnable)},
+        VulkanFunction{"vkCmdSetDepthWriteEnable", to_vkVoidFunction(test_vkCmdSetDepthWriteEnable)},
+        VulkanFunction{"vkCmdSetEvent2", to_vkVoidFunction(test_vkCmdSetEvent2)},
+        VulkanFunction{"vkCmdSetFrontFace", to_vkVoidFunction(test_vkCmdSetFrontFace)},
+        VulkanFunction{"vkCmdSetPrimitiveRestartEnable", to_vkVoidFunction(test_vkCmdSetPrimitiveRestartEnable)},
+        VulkanFunction{"vkCmdSetPrimitiveTopology", to_vkVoidFunction(test_vkCmdSetPrimitiveTopology)},
+        VulkanFunction{"vkCmdSetRasterizerDiscardEnable", to_vkVoidFunction(test_vkCmdSetRasterizerDiscardEnable)},
+        VulkanFunction{"vkCmdSetScissorWithCount", to_vkVoidFunction(test_vkCmdSetScissorWithCount)},
+        VulkanFunction{"vkCmdSetStencilOp", to_vkVoidFunction(test_vkCmdSetStencilOp)},
+        VulkanFunction{"vkCmdSetStencilTestEnable", to_vkVoidFunction(test_vkCmdSetStencilTestEnable)},
+        VulkanFunction{"vkCmdSetViewportWithCount", to_vkVoidFunction(test_vkCmdSetViewportWithCount)},
+        VulkanFunction{"vkCmdWaitEvents2", to_vkVoidFunction(test_vkCmdWaitEvents2)},
+        VulkanFunction{"vkCmdWriteTimestamp2", to_vkVoidFunction(test_vkCmdWriteTimestamp2)},
+        VulkanFunction{"vkCreatePrivateDataSlot", to_vkVoidFunction(test_vkCreatePrivateDataSlot)},
+        VulkanFunction{"vkDestroyPrivateDataSlot", to_vkVoidFunction(test_vkDestroyPrivateDataSlot)},
+        VulkanFunction{"vkGetDeviceBufferMemoryRequirements", to_vkVoidFunction(test_vkGetDeviceBufferMemoryRequirements)},
+        VulkanFunction{"vkGetDeviceImageMemoryRequirements", to_vkVoidFunction(test_vkGetDeviceImageMemoryRequirements)},
+        VulkanFunction{"vkGetDeviceImageSparseMemoryRequirements",
+                       to_vkVoidFunction(test_vkGetDeviceImageSparseMemoryRequirements)},
+        VulkanFunction{"vkGetPrivateData", to_vkVoidFunction(test_vkGetPrivateData)},
+        VulkanFunction{"vkQueueSubmit2", to_vkVoidFunction(test_vkQueueSubmit2)},
+        VulkanFunction{"vkSetPrivateData", to_vkVoidFunction(test_vkSetPrivateData)},
+    };
+    driver.physical_devices.back().add_extension({"VK_SOME_EXT_haha"});
     InstWrapper inst{env.vulkan_functions};
     inst.create_info.set_api_version(1, 3, 0);
     inst.CheckCreate();
@@ -794,8 +775,7 @@ TEST(MinorVersionUpdate, Version1_3) {
 
 TEST(ApplicationInfoVersion, NonVulkanVariant) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     DebugUtilsLogger log;
     InstWrapper inst{env.vulkan_functions};
@@ -809,8 +789,7 @@ TEST(ApplicationInfoVersion, NonVulkanVariant) {
 
 TEST(DriverManifest, NonVulkanVariant) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(1, 1, 0, 0)));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(1, 1, 0, 0))).add_physical_device({});
 
     DebugUtilsLogger log;
     InstWrapper inst{env.vulkan_functions};
@@ -824,8 +803,7 @@ TEST(DriverManifest, NonVulkanVariant) {
 
 TEST(LayerManifest, ImplicitNonVulkanVariant) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 0, 0)));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 0, 0))).add_physical_device({});
 
     const char* implicit_layer_name = "ImplicitTestLayer";
     env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -846,8 +824,7 @@ TEST(LayerManifest, ImplicitNonVulkanVariant) {
 
 TEST(LayerManifest, ExplicitNonVulkanVariant) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 0, 0)));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA, VK_MAKE_API_VERSION(0, 1, 0, 0))).add_physical_device({});
 
     const char* explicit_layer_name = "ExplicitTestLayer";
     env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{}
@@ -868,8 +845,8 @@ TEST(LayerManifest, ExplicitNonVulkanVariant) {
 TEST(DriverManifest, UnknownManifestVersion) {
     FrameworkEnvironment env{};
     env.add_icd(
-        TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_file_format_version({3, 2, 1})));
-    env.get_test_icd().physical_devices.push_back({});
+           TestICDDetails(ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_file_format_version({3, 2, 1})))
+        .add_physical_device({});
 
     DebugUtilsLogger log;
     InstWrapper inst{env.vulkan_functions};
@@ -884,8 +861,8 @@ TEST(DriverManifest, UnknownManifestVersion) {
 TEST(DriverManifest, LargeUnknownManifestVersion) {
     FrameworkEnvironment env{};
     env.add_icd(TestICDDetails(
-        ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_file_format_version({100, 222, 111})));
-    env.get_test_icd().physical_devices.push_back({});
+                    ManifestICD{}.set_lib_path(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA).set_file_format_version({100, 222, 111})))
+        .add_physical_device({});
 
     DebugUtilsLogger log;
     InstWrapper inst{env.vulkan_functions};
@@ -899,8 +876,7 @@ TEST(DriverManifest, LargeUnknownManifestVersion) {
 
 TEST(LayerManifest, UnknownManifestVersion) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "ImplicitTestLayer";
     env.add_implicit_layer(ManifestLayer{}
@@ -924,8 +900,7 @@ TEST(LayerManifest, UnknownManifestVersion) {
 
 TEST(LayerManifest, LargeUnknownManifestVersion) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
-    env.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({});
 
     const char* implicit_layer_name = "ImplicitTestLayer";
     env.add_implicit_layer(ManifestLayer{}
@@ -962,11 +937,11 @@ void CheckDirectDriverLoading(FrameworkEnvironment& env, std::vector<DriverInfo>
 
     for (auto const& driver : direct_drivers) {
         auto& direct_driver_icd = env.add_icd(driver.icd_details);
-        direct_driver_icd.get_test_icd().physical_devices.push_back({});
-        direct_driver_icd.get_test_icd().physical_devices.at(0).properties.driverVersion = driver.driver_version;
+        direct_driver_icd.physical_devices.push_back({});
+        direct_driver_icd.physical_devices.at(0).properties.driverVersion = driver.driver_version;
         VkDirectDriverLoadingInfoLUNARG ddl_info{};
         ddl_info.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG;
-        ddl_info.pfnGetInstanceProcAddr = direct_driver_icd.icd_library.get_symbol("vk_icdGetInstanceProcAddr");
+        ddl_info.pfnGetInstanceProcAddr = env.icds.back().icd_library.get_symbol("vk_icdGetInstanceProcAddr");
         ddl_infos.push_back(ddl_info);
         if (driver.expect_to_find) {
             expected_driver_count++;
@@ -975,8 +950,8 @@ void CheckDirectDriverLoading(FrameworkEnvironment& env, std::vector<DriverInfo>
 
     for (auto const& driver : normal_drivers) {
         auto& direct_driver_icd = env.add_icd(driver.icd_details);
-        direct_driver_icd.get_test_icd().physical_devices.push_back({});
-        direct_driver_icd.get_test_icd().physical_devices.at(0).properties.driverVersion = driver.driver_version;
+        direct_driver_icd.physical_devices.push_back({});
+        direct_driver_icd.physical_devices.at(0).properties.driverVersion = driver.driver_version;
         if (!exclusive && driver.expect_to_find) {
             expected_driver_count++;
         }
@@ -1173,11 +1148,11 @@ TEST(DirectDriverLoading, ExtensionNotEnabled) {
     FrameworkEnvironment env{};
 
     auto& direct_driver_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none));
-    direct_driver_icd.get_test_icd().physical_devices.push_back({});
+    direct_driver_icd.physical_devices.push_back({});
 
     VkDirectDriverLoadingInfoLUNARG ddl_info{};
     ddl_info.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG;
-    ddl_info.pfnGetInstanceProcAddr = direct_driver_icd.icd_library.get_symbol("vk_icdGetInstanceProcAddr");
+    ddl_info.pfnGetInstanceProcAddr = env.icds.back().icd_library.get_symbol("vk_icdGetInstanceProcAddr");
 
     VkDirectDriverLoadingListLUNARG ddl_list{};
     ddl_list.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG;
@@ -1202,8 +1177,7 @@ TEST(DirectDriverLoading, ExtensionNotEnabled) {
 TEST(DirectDriverLoading, DriverListNotInPnextChain) {
     FrameworkEnvironment env{};
 
-    auto& direct_driver_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none));
-    direct_driver_icd.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none)).add_physical_device({});
 
     DebugUtilsLogger log;
     InstWrapper inst{env.vulkan_functions};
@@ -1222,8 +1196,7 @@ TEST(DirectDriverLoading, DriverListNotInPnextChain) {
 TEST(DirectDriverLoading, DriverListHasNullDriverPointer) {
     FrameworkEnvironment env{};
 
-    auto& direct_driver_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none));
-    direct_driver_icd.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none)).add_physical_device({});
 
     VkDirectDriverLoadingListLUNARG ddl_list{};
     ddl_list.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG;
@@ -1248,12 +1221,11 @@ TEST(DirectDriverLoading, DriverListHasNullDriverPointer) {
 TEST(DirectDriverLoading, DriverListHasZeroInfoCount) {
     FrameworkEnvironment env{};
 
-    auto& direct_driver_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none));
-    direct_driver_icd.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none)).add_physical_device({});
 
     VkDirectDriverLoadingInfoLUNARG ddl_info{};
     ddl_info.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG;
-    ddl_info.pfnGetInstanceProcAddr = direct_driver_icd.icd_library.get_symbol("vk_icdGetInstanceProcAddr");
+    ddl_info.pfnGetInstanceProcAddr = env.icds.back().icd_library.get_symbol("vk_icdGetInstanceProcAddr");
 
     VkDirectDriverLoadingListLUNARG ddl_list{};
     ddl_list.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG;
@@ -1279,8 +1251,7 @@ TEST(DirectDriverLoading, DriverListHasZeroInfoCount) {
 TEST(DirectDriverLoading, DriverInfoMissingGetInstanceProcAddr) {
     FrameworkEnvironment env{};
 
-    auto& direct_driver_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none));
-    direct_driver_icd.get_test_icd().physical_devices.push_back({});
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none)).add_physical_device({});
 
     std::array<VkDirectDriverLoadingInfoLUNARG, 2> ddl_infos{};
     ddl_infos[0].sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG;
@@ -1315,16 +1286,15 @@ TEST(DirectDriverLoading, DriverInfoMissingGetInstanceProcAddr) {
 TEST(DirectDriverLoading, DriverDoesNotExportNegotiateFunction) {
     FrameworkEnvironment env{};
 
-    auto& direct_driver_icd = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none));
-    direct_driver_icd.get_test_icd().physical_devices.push_back({});
-    direct_driver_icd.get_test_icd()
-        .set_exposes_vk_icdNegotiateLoaderICDInterfaceVersion(false)
-        .set_exposes_vkCreateInstance(false)
-        .set_exposes_vkEnumerateInstanceExtensionProperties(false);
+    auto& direct_driver = env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_7).set_discovery_type(ManifestDiscoveryType::none))
+                              .add_physical_device({})
+                              .set_exposes_vk_icdNegotiateLoaderICDInterfaceVersion(false)
+                              .set_exposes_vkCreateInstance(false)
+                              .set_exposes_vkEnumerateInstanceExtensionProperties(false);
 
     VkDirectDriverLoadingInfoLUNARG ddl_info{};
     ddl_info.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG;
-    ddl_info.pfnGetInstanceProcAddr = direct_driver_icd.icd_library.get_symbol("vk_icdGetInstanceProcAddr");
+    ddl_info.pfnGetInstanceProcAddr = env.icds.back().icd_library.get_symbol("vk_icdGetInstanceProcAddr");
 
     VkDirectDriverLoadingListLUNARG ddl_list{};
     ddl_list.sType = VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG;
@@ -1348,8 +1318,8 @@ TEST(DirectDriverLoading, DriverDoesNotExportNegotiateFunction) {
     }
 
     // Allow the negotiate function to be found, now it should fail to find instance creation function
-    direct_driver_icd.get_test_icd().set_exposes_vk_icdNegotiateLoaderICDInterfaceVersion(true);
-    direct_driver_icd.get_test_icd().set_max_icd_interface_version(4);
+    direct_driver.set_exposes_vk_icdNegotiateLoaderICDInterfaceVersion(true);
+    direct_driver.set_max_icd_interface_version(4);
 
     {
         DebugUtilsLogger log;
@@ -1365,7 +1335,7 @@ TEST(DirectDriverLoading, DriverDoesNotExportNegotiateFunction) {
             "which is incompatible with the Loader Driver Interface version that supports the VK_LUNARG_direct_driver_loading "
             "extension, skipping."));
     }
-    direct_driver_icd.get_test_icd().set_max_icd_interface_version(7);
+    direct_driver.set_max_icd_interface_version(7);
 
     {
         DebugUtilsLogger log;
@@ -1382,7 +1352,7 @@ TEST(DirectDriverLoading, DriverDoesNotExportNegotiateFunction) {
     }
 
     // Allow the instance creation function to be found, now it should fail to find EnumInstExtProps
-    direct_driver_icd.get_test_icd().set_exposes_vkCreateInstance(true);
+    direct_driver.set_exposes_vkCreateInstance(true);
 
     {
         DebugUtilsLogger log;
index aaa70aa8d8b02a03cc9f32bfe9b87b4bff94ad79..25e98007118f021c7ab3c182b7e5e4cb33fdcfc8 100644 (file)
@@ -780,12 +780,9 @@ TEST(WsiTests, WaylandGetPhysicalDeviceSurfaceSupportKHR) {
 
 TEST(WsiTests, ForgetEnableSurfaceExtensions) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-
-    driver.physical_devices.emplace_back("physical_device_0");
-    driver.physical_devices.back().add_extension("VK_KHR_swapchain");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .setup_WSI()
+        .add_physical_device(PhysicalDevice{}.add_extension("VK_KHR_swapchain").finish());
 
     InstWrapper inst{env.vulkan_functions};
     inst.create_info.add_extension("VK_KHR_surface");
@@ -797,12 +794,9 @@ TEST(WsiTests, ForgetEnableSurfaceExtensions) {
 
 TEST(WsiTests, SwapchainFunctional) {
     FrameworkEnvironment env{};
-    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2));
-    auto& driver = env.get_test_icd();
-    driver.setup_WSI();
-
-    driver.physical_devices.emplace_back("physical_device_0");
-    driver.physical_devices.back().add_extension("VK_KHR_swapchain");
+    env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2))
+        .setup_WSI()
+        .add_physical_device(PhysicalDevice{}.add_extension("VK_KHR_swapchain").finish());
 
     InstWrapper inst{env.vulkan_functions};
     inst.create_info.setup_WSI();