15db71995Sopenharmony_ci/* 25db71995Sopenharmony_ci * Copyright (c) 2023 The Khronos Group Inc. 35db71995Sopenharmony_ci * Copyright (c) 2023 Valve Corporation 45db71995Sopenharmony_ci * Copyright (c) 2023 LunarG, Inc. 55db71995Sopenharmony_ci * 65db71995Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a copy 75db71995Sopenharmony_ci * of this software and/or associated documentation files (the "Materials"), to 85db71995Sopenharmony_ci * deal in the Materials without restriction, including without limitation the 95db71995Sopenharmony_ci * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 105db71995Sopenharmony_ci * sell copies of the Materials, and to permit persons to whom the Materials are 115db71995Sopenharmony_ci * furnished to do so, subject to the following conditions: 125db71995Sopenharmony_ci * 135db71995Sopenharmony_ci * The above copyright notice(s) and this permission notice shall be included in 145db71995Sopenharmony_ci * all copies or substantial portions of the Materials. 155db71995Sopenharmony_ci * 165db71995Sopenharmony_ci * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 175db71995Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 185db71995Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 195db71995Sopenharmony_ci * 205db71995Sopenharmony_ci * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 215db71995Sopenharmony_ci * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 225db71995Sopenharmony_ci * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE 235db71995Sopenharmony_ci * USE OR OTHER DEALINGS IN THE MATERIALS. 245db71995Sopenharmony_ci * 255db71995Sopenharmony_ci * Author: Charles Giessen <charles@lunarg.com> 265db71995Sopenharmony_ci */ 275db71995Sopenharmony_ci 285db71995Sopenharmony_ci#include "test_environment.h" 295db71995Sopenharmony_ci 305db71995Sopenharmony_cistd::string get_settings_location_log_message([[maybe_unused]] FrameworkEnvironment const& env, 315db71995Sopenharmony_ci [[maybe_unused]] bool use_secure = false) { 325db71995Sopenharmony_ci std::string s = "Using layer configurations found in loader settings from "; 335db71995Sopenharmony_ci#if defined(WIN32) 345db71995Sopenharmony_ci return s + env.get_folder(ManifestLocation::settings_location).location().str() + "\\vk_loader_settings.json"; 355db71995Sopenharmony_ci#elif COMMON_UNIX_PLATFORMS 365db71995Sopenharmony_ci if (use_secure) 375db71995Sopenharmony_ci return s + "/etc/vulkan/loader_settings.d/vk_loader_settings.json"; 385db71995Sopenharmony_ci else 395db71995Sopenharmony_ci return s + "/home/fake_home/.local/share/vulkan/loader_settings.d/vk_loader_settings.json"; 405db71995Sopenharmony_ci#endif 415db71995Sopenharmony_ci} 425db71995Sopenharmony_ci 435db71995Sopenharmony_ci// Make sure settings layer is found and that a layer defined in it is loaded 445db71995Sopenharmony_ciTEST(SettingsFile, FileExist) { 455db71995Sopenharmony_ci FrameworkEnvironment env{}; 465db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 475db71995Sopenharmony_ci const char* regular_layer_name = "VK_LAYER_TestLayer_0"; 485db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 495db71995Sopenharmony_ci ManifestLayer{}.add_layer( 505db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 515db71995Sopenharmony_ci "regular_test_layer.json"} 525db71995Sopenharmony_ci .set_discovery_type(ManifestDiscoveryType::override_folder)); 535db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 545db71995Sopenharmony_ci AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 555db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 565db71995Sopenharmony_ci .set_name(regular_layer_name) 575db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path().str()) 585db71995Sopenharmony_ci .set_control("on")))); 595db71995Sopenharmony_ci { 605db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 615db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); 625db71995Sopenharmony_ci 635db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 645db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 655db71995Sopenharmony_ci inst.CheckCreate(); 665db71995Sopenharmony_ci 675db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 685db71995Sopenharmony_ci auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); 695db71995Sopenharmony_ci EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, regular_layer_name)); 705db71995Sopenharmony_ci } 715db71995Sopenharmony_ci} 725db71995Sopenharmony_ci 735db71995Sopenharmony_ci// Make sure that if the settings file is in a user local path, that it isn't used when running with elevated privileges 745db71995Sopenharmony_ciTEST(SettingsFile, SettingsInUnsecuredLocation) { 755db71995Sopenharmony_ci FrameworkEnvironment env{}; 765db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 775db71995Sopenharmony_ci const char* regular_layer_name = "VK_LAYER_TestLayer_0"; 785db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 795db71995Sopenharmony_ci ManifestLayer{}.add_layer( 805db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 815db71995Sopenharmony_ci "regular_test_layer.json"} 825db71995Sopenharmony_ci .set_discovery_type(ManifestDiscoveryType::override_folder)); 835db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 845db71995Sopenharmony_ci AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 855db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 865db71995Sopenharmony_ci .set_name(regular_layer_name) 875db71995Sopenharmony_ci .set_path(env.get_layer_manifest_path().str()) 885db71995Sopenharmony_ci .set_control("on")))); 895db71995Sopenharmony_ci { 905db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 915db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); 925db71995Sopenharmony_ci 935db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 945db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 955db71995Sopenharmony_ci inst.CheckCreate(); 965db71995Sopenharmony_ci 975db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 985db71995Sopenharmony_ci env.debug_log.clear(); 995db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 1005db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, regular_layer_name)); 1015db71995Sopenharmony_ci } 1025db71995Sopenharmony_ci env.platform_shim->set_elevated_privilege(true); 1035db71995Sopenharmony_ci { 1045db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); 1055db71995Sopenharmony_ci 1065db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 1075db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 1085db71995Sopenharmony_ci inst.CheckCreate(); 1095db71995Sopenharmony_ci 1105db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); 1115db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); 1125db71995Sopenharmony_ci } 1135db71995Sopenharmony_ci} 1145db71995Sopenharmony_ci 1155db71995Sopenharmony_ciTEST(SettingsFile, SettingsInSecuredLocation) { 1165db71995Sopenharmony_ci FrameworkEnvironment env{FrameworkSettings{}.set_secure_loader_settings(true)}; 1175db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 1185db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); 1195db71995Sopenharmony_ci const char* regular_layer_name = "VK_LAYER_TestLayer_0"; 1205db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 1215db71995Sopenharmony_ci ManifestLayer{}.add_layer( 1225db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 1235db71995Sopenharmony_ci "regular_test_layer.json"} 1245db71995Sopenharmony_ci .set_discovery_type(ManifestDiscoveryType::override_folder)); 1255db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 1265db71995Sopenharmony_ci AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 1275db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 1285db71995Sopenharmony_ci .set_name(regular_layer_name) 1295db71995Sopenharmony_ci .set_path(env.get_layer_manifest_path().str()) 1305db71995Sopenharmony_ci .set_control("on")))); 1315db71995Sopenharmony_ci { 1325db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 1335db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); 1345db71995Sopenharmony_ci 1355db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 1365db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 1375db71995Sopenharmony_ci inst.CheckCreate(); 1385db71995Sopenharmony_ci 1395db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env, true))); 1405db71995Sopenharmony_ci env.debug_log.clear(); 1415db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 1425db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, regular_layer_name)); 1435db71995Sopenharmony_ci } 1445db71995Sopenharmony_ci env.platform_shim->set_elevated_privilege(true); 1455db71995Sopenharmony_ci { 1465db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 1475db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); 1485db71995Sopenharmony_ci 1495db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 1505db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 1515db71995Sopenharmony_ci inst.CheckCreate(); 1525db71995Sopenharmony_ci 1535db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env, true))); 1545db71995Sopenharmony_ci env.debug_log.clear(); 1555db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 1565db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, regular_layer_name)); 1575db71995Sopenharmony_ci } 1585db71995Sopenharmony_ci} 1595db71995Sopenharmony_ci 1605db71995Sopenharmony_ci// Make sure settings file can have multiple sets of settings 1615db71995Sopenharmony_ciTEST(SettingsFile, SupportsMultipleSetingsSimultaneously) { 1625db71995Sopenharmony_ci FrameworkEnvironment env{}; 1635db71995Sopenharmony_ci const char* app_specific_layer_name = "VK_LAYER_TestLayer_0"; 1645db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 1655db71995Sopenharmony_ci ManifestLayer{}.add_layer( 1665db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(app_specific_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 1675db71995Sopenharmony_ci "VK_LAYER_app_specific.json"} 1685db71995Sopenharmony_ci .set_discovery_type(ManifestDiscoveryType::override_folder)); 1695db71995Sopenharmony_ci const char* global_layer_name = "VK_LAYER_TestLayer_1"; 1705db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 1715db71995Sopenharmony_ci ManifestLayer{}.add_layer( 1725db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(global_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 1735db71995Sopenharmony_ci "VK_LAYER_global.json"} 1745db71995Sopenharmony_ci .set_discovery_type(ManifestDiscoveryType::override_folder)); 1755db71995Sopenharmony_ci env.update_loader_settings( 1765db71995Sopenharmony_ci env.loader_settings 1775db71995Sopenharmony_ci // configuration that matches the current executable path - but dont set the app-key just yet 1785db71995Sopenharmony_ci .add_app_specific_setting(AppSpecificSettings{} 1795db71995Sopenharmony_ci .add_stderr_log_filter("all") 1805db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 1815db71995Sopenharmony_ci .set_name(app_specific_layer_name) 1825db71995Sopenharmony_ci .set_path(env.get_layer_manifest_path(0).str()) 1835db71995Sopenharmony_ci .set_control("on")) 1845db71995Sopenharmony_ci .add_app_key("key0")) 1855db71995Sopenharmony_ci // configuration that should never be used 1865db71995Sopenharmony_ci .add_app_specific_setting( 1875db71995Sopenharmony_ci AppSpecificSettings{} 1885db71995Sopenharmony_ci .add_stderr_log_filter("all") 1895db71995Sopenharmony_ci .add_layer_configuration( 1905db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{}.set_name("VK_LAYER_haha").set_path("/made/up/path").set_control("auto")) 1915db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 1925db71995Sopenharmony_ci .set_name("VK_LAYER_haha2") 1935db71995Sopenharmony_ci .set_path("/made/up/path2") 1945db71995Sopenharmony_ci .set_control("auto")) 1955db71995Sopenharmony_ci .add_app_key("key1") 1965db71995Sopenharmony_ci .add_app_key("key2")) 1975db71995Sopenharmony_ci // Add a global configuration 1985db71995Sopenharmony_ci .add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 1995db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 2005db71995Sopenharmony_ci .set_name(global_layer_name) 2015db71995Sopenharmony_ci .set_path(env.get_layer_manifest_path(1).str()) 2025db71995Sopenharmony_ci .set_control("on")))); 2035db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 2045db71995Sopenharmony_ci { 2055db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 2065db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(0).layerName, global_layer_name)); 2075db71995Sopenharmony_ci 2085db71995Sopenharmony_ci // Check that the global config is used 2095db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 2105db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 2115db71995Sopenharmony_ci inst.CheckCreate(); 2125db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 2135db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 2145db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, global_layer_name)); 2155db71995Sopenharmony_ci } 2165db71995Sopenharmony_ci env.debug_log.clear(); 2175db71995Sopenharmony_ci // Set one set to contain the current executable path 2185db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).add_app_key(fs::fixup_backslashes_in_path(test_platform_executable_path())); 2195db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 2205db71995Sopenharmony_ci { 2215db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 2225db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(0).layerName, app_specific_layer_name)); 2235db71995Sopenharmony_ci 2245db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 2255db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 2265db71995Sopenharmony_ci inst.CheckCreate(); 2275db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 2285db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 2295db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, app_specific_layer_name)); 2305db71995Sopenharmony_ci } 2315db71995Sopenharmony_ci} 2325db71995Sopenharmony_ci 2335db71995Sopenharmony_ci// Make sure layers found through the settings file are enableable by environment variables 2345db71995Sopenharmony_ciTEST(SettingsFile, LayerAutoEnabledByEnvVars) { 2355db71995Sopenharmony_ci FrameworkEnvironment env{}; 2365db71995Sopenharmony_ci env.loader_settings.set_file_format_version({1, 0, 0}); 2375db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 2385db71995Sopenharmony_ci 2395db71995Sopenharmony_ci const char* layer_name = "VK_LAYER_automatic"; 2405db71995Sopenharmony_ci env.add_explicit_layer( 2415db71995Sopenharmony_ci TestLayerDetails{ManifestLayer{}.add_layer( 2425db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 2435db71995Sopenharmony_ci "layer_name.json"} 2445db71995Sopenharmony_ci .set_discovery_type(ManifestDiscoveryType::override_folder)); 2455db71995Sopenharmony_ci 2465db71995Sopenharmony_ci env.update_loader_settings( 2475db71995Sopenharmony_ci env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 2485db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 2495db71995Sopenharmony_ci .set_name(layer_name) 2505db71995Sopenharmony_ci .set_path(env.get_layer_manifest_path(0).str()) 2515db71995Sopenharmony_ci .set_control("auto")))); 2525db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); 2535db71995Sopenharmony_ci { 2545db71995Sopenharmony_ci EnvVarWrapper instance_layers{"VK_INSTANCE_LAYERS", layer_name}; 2555db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 2565db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(0).layerName, layer_name)); 2575db71995Sopenharmony_ci 2585db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 2595db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 2605db71995Sopenharmony_ci inst.CheckCreate(); 2615db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 2625db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 2635db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); 2645db71995Sopenharmony_ci } 2655db71995Sopenharmony_ci env.debug_log.clear(); 2665db71995Sopenharmony_ci 2675db71995Sopenharmony_ci { 2685db71995Sopenharmony_ci EnvVarWrapper loader_layers_enable{"VK_LOADER_LAYERS_ENABLE", layer_name}; 2695db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 2705db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(0).layerName, layer_name)); 2715db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 2725db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 2735db71995Sopenharmony_ci inst.CheckCreate(); 2745db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 2755db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 2765db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, layer_name)); 2775db71995Sopenharmony_ci } 2785db71995Sopenharmony_ci} 2795db71995Sopenharmony_ci 2805db71995Sopenharmony_ci// Make sure layers are disallowed from loading if the settings file says so 2815db71995Sopenharmony_ciTEST(SettingsFile, LayerDisablesImplicitLayer) { 2825db71995Sopenharmony_ci FrameworkEnvironment env{}; 2835db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 2845db71995Sopenharmony_ci const char* implicit_layer_name = "VK_LAYER_Implicit_TestLayer"; 2855db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 2865db71995Sopenharmony_ci .set_name(implicit_layer_name) 2875db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 2885db71995Sopenharmony_ci .set_disable_environment("oof")), 2895db71995Sopenharmony_ci "implicit_test_layer.json"); 2905db71995Sopenharmony_ci 2915db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 2925db71995Sopenharmony_ci AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 2935db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 2945db71995Sopenharmony_ci .set_name(implicit_layer_name) 2955db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 2965db71995Sopenharmony_ci .set_control("off") 2975db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true)))); 2985db71995Sopenharmony_ci { 2995db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); 3005db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 3015db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 3025db71995Sopenharmony_ci inst.CheckCreate(); 3035db71995Sopenharmony_ci 3045db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 3055db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); 3065db71995Sopenharmony_ci } 3075db71995Sopenharmony_ci} 3085db71995Sopenharmony_ci 3095db71995Sopenharmony_ci// Implicit layers should be reordered by the settings file 3105db71995Sopenharmony_ciTEST(SettingsFile, ImplicitLayersDontInterfere) { 3115db71995Sopenharmony_ci FrameworkEnvironment env{}; 3125db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 3135db71995Sopenharmony_ci const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1"; 3145db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 3155db71995Sopenharmony_ci .set_name(implicit_layer_name1) 3165db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 3175db71995Sopenharmony_ci .set_disable_environment("oof")), 3185db71995Sopenharmony_ci "implicit_test_layer1.json"); 3195db71995Sopenharmony_ci const char* implicit_layer_name2 = "VK_LAYER_Implicit_TestLayer2"; 3205db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 3215db71995Sopenharmony_ci .set_name(implicit_layer_name2) 3225db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 3235db71995Sopenharmony_ci .set_disable_environment("oof")), 3245db71995Sopenharmony_ci "implicit_test_layer2.json"); 3255db71995Sopenharmony_ci // validate order when settings file is not present 3265db71995Sopenharmony_ci { 3275db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(2); 3285db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name1)); 3295db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name2)); 3305db71995Sopenharmony_ci 3315db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 3325db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 3335db71995Sopenharmony_ci inst.CheckCreate(); 3345db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); 3355db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); 3365db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); 3375db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name2)); 3385db71995Sopenharmony_ci } 3395db71995Sopenharmony_ci // Now setup the settings file to contain a specific order 3405db71995Sopenharmony_ci env.update_loader_settings(LoaderSettings{}.add_app_specific_setting( 3415db71995Sopenharmony_ci AppSpecificSettings{} 3425db71995Sopenharmony_ci .add_stderr_log_filter("all") 3435db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 3445db71995Sopenharmony_ci .set_name(implicit_layer_name1) 3455db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 3465db71995Sopenharmony_ci .set_control("auto") 3475db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true)) 3485db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 3495db71995Sopenharmony_ci .set_name(implicit_layer_name2) 3505db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(1).str()) 3515db71995Sopenharmony_ci .set_control("auto") 3525db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true)))); 3535db71995Sopenharmony_ci { 3545db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(2); 3555db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name1)); 3565db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name2)); 3575db71995Sopenharmony_ci 3585db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 3595db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 3605db71995Sopenharmony_ci inst.CheckCreate(); 3615db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 3625db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); 3635db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); 3645db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name2)); 3655db71995Sopenharmony_ci } 3665db71995Sopenharmony_ci 3675db71995Sopenharmony_ci // Flip the order and store the settings in the env for later use in the test 3685db71995Sopenharmony_ci env.loader_settings = LoaderSettings{}.add_app_specific_setting( 3695db71995Sopenharmony_ci AppSpecificSettings{} 3705db71995Sopenharmony_ci .add_stderr_log_filter("all") 3715db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 3725db71995Sopenharmony_ci .set_name(implicit_layer_name2) 3735db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(1).str()) 3745db71995Sopenharmony_ci .set_control("auto") 3755db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true)) 3765db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 3775db71995Sopenharmony_ci .set_name(implicit_layer_name1) 3785db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 3795db71995Sopenharmony_ci .set_control("auto") 3805db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true))); 3815db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 3825db71995Sopenharmony_ci 3835db71995Sopenharmony_ci { 3845db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(2); 3855db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name2)); 3865db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name1)); 3875db71995Sopenharmony_ci 3885db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 3895db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 3905db71995Sopenharmony_ci inst.CheckCreate(); 3915db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 3925db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); 3935db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name2)); 3945db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name1)); 3955db71995Sopenharmony_ci } 3965db71995Sopenharmony_ci 3975db71995Sopenharmony_ci // Now add an explicit layer into the middle and verify that is in the correct location 3985db71995Sopenharmony_ci const char* explicit_layer_name3 = "VK_LAYER_Explicit_TestLayer3"; 3995db71995Sopenharmony_ci env.add_explicit_layer( 4005db71995Sopenharmony_ci ManifestLayer{}.add_layer( 4015db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name3).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 4025db71995Sopenharmony_ci "explicit_test_layer3.json"); 4035db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).layer_configurations.insert( 4045db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).layer_configurations.begin() + 1, 4055db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 4065db71995Sopenharmony_ci .set_name(explicit_layer_name3) 4075db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(2).str()) 4085db71995Sopenharmony_ci .set_control("on")); 4095db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 4105db71995Sopenharmony_ci { 4115db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(3); 4125db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name2)); 4135db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name3)); 4145db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(2).layerName, implicit_layer_name1)); 4155db71995Sopenharmony_ci 4165db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 4175db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 4185db71995Sopenharmony_ci inst.CheckCreate(); 4195db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 4205db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); 4215db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name2)); 4225db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_name3)); 4235db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(2).layerName, implicit_layer_name1)); 4245db71995Sopenharmony_ci } 4255db71995Sopenharmony_ci} 4265db71995Sopenharmony_ci 4275db71995Sopenharmony_ci// Make sure layers that are disabled can't be enabled by the application 4285db71995Sopenharmony_ciTEST(SettingsFile, ApplicationEnablesIgnored) { 4295db71995Sopenharmony_ci FrameworkEnvironment env{}; 4305db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 4315db71995Sopenharmony_ci const char* explicit_layer_name = "VK_LAYER_TestLayer"; 4325db71995Sopenharmony_ci env.add_explicit_layer( 4335db71995Sopenharmony_ci ManifestLayer{}.add_layer( 4345db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 4355db71995Sopenharmony_ci "regular_test_layer.json"); 4365db71995Sopenharmony_ci 4375db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 4385db71995Sopenharmony_ci AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 4395db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 4405db71995Sopenharmony_ci .set_name(explicit_layer_name) 4415db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 4425db71995Sopenharmony_ci .set_control("off")))); 4435db71995Sopenharmony_ci { 4445db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); 4455db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 4465db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 4475db71995Sopenharmony_ci inst.create_info.add_layer(explicit_layer_name); 4485db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(inst.CheckCreate(VK_ERROR_LAYER_NOT_PRESENT)); 4495db71995Sopenharmony_ci } 4505db71995Sopenharmony_ci} 4515db71995Sopenharmony_ci 4525db71995Sopenharmony_ciTEST(SettingsFile, LayerListIsEmpty) { 4535db71995Sopenharmony_ci FrameworkEnvironment env{}; 4545db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 4555db71995Sopenharmony_ci const char* implicit_layer_name = "VK_LAYER_TestLayer"; 4565db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 4575db71995Sopenharmony_ci .set_name(implicit_layer_name) 4585db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 4595db71995Sopenharmony_ci .set_disable_environment("HeeHee")), 4605db71995Sopenharmony_ci "regular_test_layer.json"); 4615db71995Sopenharmony_ci 4625db71995Sopenharmony_ci JsonWriter writer{}; 4635db71995Sopenharmony_ci writer.StartObject(); 4645db71995Sopenharmony_ci writer.AddKeyedString("file_format_version", "1.0.0"); 4655db71995Sopenharmony_ci writer.StartKeyedObject("settings"); 4665db71995Sopenharmony_ci writer.StartKeyedObject("layers"); 4675db71995Sopenharmony_ci writer.EndObject(); 4685db71995Sopenharmony_ci writer.EndObject(); 4695db71995Sopenharmony_ci writer.EndObject(); 4705db71995Sopenharmony_ci env.write_settings_file(writer.output); 4715db71995Sopenharmony_ci 4725db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); 4735db71995Sopenharmony_ci 4745db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 4755db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 4765db71995Sopenharmony_ci inst.CheckCreate(); 4775db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 4785db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); 4795db71995Sopenharmony_ci} 4805db71995Sopenharmony_ci 4815db71995Sopenharmony_ci// If a settings file exists but contains no valid settings - don't consider it 4825db71995Sopenharmony_ciTEST(SettingsFile, InvalidSettingsFile) { 4835db71995Sopenharmony_ci FrameworkEnvironment env{}; 4845db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 4855db71995Sopenharmony_ci const char* explicit_layer_name = "VK_LAYER_TestLayer"; 4865db71995Sopenharmony_ci env.add_explicit_layer( 4875db71995Sopenharmony_ci ManifestLayer{}.add_layer( 4885db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 4895db71995Sopenharmony_ci "regular_test_layer.json"); 4905db71995Sopenharmony_ci const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; 4915db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 4925db71995Sopenharmony_ci .set_name(implicit_layer_name) 4935db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 4945db71995Sopenharmony_ci .set_disable_environment("foobarbaz")), 4955db71995Sopenharmony_ci "implicit_test_layer.json"); 4965db71995Sopenharmony_ci auto check_integrity = [&env, explicit_layer_name, implicit_layer_name]() { 4975db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(2); 4985db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name)); 4995db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name)); 5005db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 5015db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 5025db71995Sopenharmony_ci inst.create_info.add_layer(explicit_layer_name); 5035db71995Sopenharmony_ci inst.CheckCreate(); 5045db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); 5055db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); 5065db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name)); 5075db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_name)); 5085db71995Sopenharmony_ci }; 5095db71995Sopenharmony_ci 5105db71995Sopenharmony_ci { 5115db71995Sopenharmony_ci std::fstream fuzzer_output_json_file{FUZZER_OUTPUT_JSON_FILE, std::ios_base::in}; 5125db71995Sopenharmony_ci ASSERT_TRUE(fuzzer_output_json_file.is_open()); 5135db71995Sopenharmony_ci std::stringstream fuzzer_output_json; 5145db71995Sopenharmony_ci fuzzer_output_json << fuzzer_output_json_file.rdbuf(); 5155db71995Sopenharmony_ci env.write_settings_file(fuzzer_output_json.str()); 5165db71995Sopenharmony_ci 5175db71995Sopenharmony_ci check_integrity(); 5185db71995Sopenharmony_ci } 5195db71995Sopenharmony_ci 5205db71995Sopenharmony_ci // No actual settings 5215db71995Sopenharmony_ci { 5225db71995Sopenharmony_ci JsonWriter writer{}; 5235db71995Sopenharmony_ci writer.StartObject(); 5245db71995Sopenharmony_ci writer.AddKeyedString("file_format_version", "0.0.0"); 5255db71995Sopenharmony_ci writer.EndObject(); 5265db71995Sopenharmony_ci env.write_settings_file(writer.output); 5275db71995Sopenharmony_ci 5285db71995Sopenharmony_ci check_integrity(); 5295db71995Sopenharmony_ci } 5305db71995Sopenharmony_ci 5315db71995Sopenharmony_ci { 5325db71995Sopenharmony_ci JsonWriter writer{}; 5335db71995Sopenharmony_ci writer.StartObject(); 5345db71995Sopenharmony_ci writer.AddKeyedString("file_format_version", "0.0.0"); 5355db71995Sopenharmony_ci writer.StartKeyedArray("settings_array"); 5365db71995Sopenharmony_ci writer.EndArray(); 5375db71995Sopenharmony_ci writer.StartKeyedObject("settings"); 5385db71995Sopenharmony_ci writer.EndObject(); 5395db71995Sopenharmony_ci writer.EndObject(); 5405db71995Sopenharmony_ci env.write_settings_file(writer.output); 5415db71995Sopenharmony_ci 5425db71995Sopenharmony_ci check_integrity(); 5435db71995Sopenharmony_ci } 5445db71995Sopenharmony_ci 5455db71995Sopenharmony_ci { 5465db71995Sopenharmony_ci JsonWriter writer{}; 5475db71995Sopenharmony_ci writer.StartObject(); 5485db71995Sopenharmony_ci for (uint32_t i = 0; i < 3; i++) { 5495db71995Sopenharmony_ci writer.StartKeyedArray("settings_array"); 5505db71995Sopenharmony_ci writer.EndArray(); 5515db71995Sopenharmony_ci writer.StartKeyedObject("boogabooga"); 5525db71995Sopenharmony_ci writer.EndObject(); 5535db71995Sopenharmony_ci writer.StartKeyedObject("settings"); 5545db71995Sopenharmony_ci writer.EndObject(); 5555db71995Sopenharmony_ci } 5565db71995Sopenharmony_ci writer.EndObject(); 5575db71995Sopenharmony_ci env.write_settings_file(writer.output); 5585db71995Sopenharmony_ci 5595db71995Sopenharmony_ci check_integrity(); 5605db71995Sopenharmony_ci } 5615db71995Sopenharmony_ci} 5625db71995Sopenharmony_ci 5635db71995Sopenharmony_ci// Unknown layers are put in the correct location 5645db71995Sopenharmony_ciTEST(SettingsFile, UnknownLayersInRightPlace) { 5655db71995Sopenharmony_ci FrameworkEnvironment env{}; 5665db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 5675db71995Sopenharmony_ci const char* explicit_layer_name1 = "VK_LAYER_TestLayer1"; 5685db71995Sopenharmony_ci env.add_explicit_layer( 5695db71995Sopenharmony_ci ManifestLayer{}.add_layer( 5705db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 5715db71995Sopenharmony_ci "regular_test_layer1.json"); 5725db71995Sopenharmony_ci const char* implicit_layer_name1 = "VK_LAYER_ImplicitTestLayer1"; 5735db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 5745db71995Sopenharmony_ci .set_name(implicit_layer_name1) 5755db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 5765db71995Sopenharmony_ci .set_disable_environment("foobarbaz")), 5775db71995Sopenharmony_ci "implicit_test_layer1.json"); 5785db71995Sopenharmony_ci const char* explicit_layer_name2 = "VK_LAYER_TestLayer2"; 5795db71995Sopenharmony_ci env.add_explicit_layer( 5805db71995Sopenharmony_ci ManifestLayer{}.add_layer( 5815db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 5825db71995Sopenharmony_ci "regular_test_layer2.json"); 5835db71995Sopenharmony_ci const char* implicit_layer_name2 = "VK_LAYER_ImplicitTestLayer2"; 5845db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 5855db71995Sopenharmony_ci .set_name(implicit_layer_name2) 5865db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 5875db71995Sopenharmony_ci .set_disable_environment("foobarbaz")), 5885db71995Sopenharmony_ci "implicit_test_layer2.json"); 5895db71995Sopenharmony_ci 5905db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 5915db71995Sopenharmony_ci AppSpecificSettings{} 5925db71995Sopenharmony_ci .add_stderr_log_filter("all") 5935db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 5945db71995Sopenharmony_ci .set_name(explicit_layer_name2) 5955db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(2).str()) 5965db71995Sopenharmony_ci .set_control("on")) 5975db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{}.set_control("unordered_layer_location")) 5985db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 5995db71995Sopenharmony_ci .set_name(implicit_layer_name2) 6005db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(3).str()) 6015db71995Sopenharmony_ci .set_control("on") 6025db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true)))); 6035db71995Sopenharmony_ci 6045db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(4); 6055db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name2)); 6065db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name1)); 6075db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_name1)); 6085db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(3).layerName, implicit_layer_name2)); 6095db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 6105db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 6115db71995Sopenharmony_ci inst.create_info.add_layer(explicit_layer_name1); 6125db71995Sopenharmony_ci inst.CheckCreate(); 6135db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 6145db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 4); 6155db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name2)); 6165db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name1)); 6175db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_name1)); 6185db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(3).layerName, implicit_layer_name2)); 6195db71995Sopenharmony_ci} 6205db71995Sopenharmony_ci 6215db71995Sopenharmony_ci// Settings file allows loading multiple layers with the same name - as long as the path is different 6225db71995Sopenharmony_ciTEST(SettingsFile, MultipleLayersWithSameName) { 6235db71995Sopenharmony_ci FrameworkEnvironment env{}; 6245db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 6255db71995Sopenharmony_ci 6265db71995Sopenharmony_ci const char* explicit_layer_name = "VK_LAYER_TestLayer"; 6275db71995Sopenharmony_ci env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 6285db71995Sopenharmony_ci .set_name(explicit_layer_name) 6295db71995Sopenharmony_ci .set_description("0000") 6305db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 6315db71995Sopenharmony_ci "regular_test_layer1.json"); 6325db71995Sopenharmony_ci 6335db71995Sopenharmony_ci env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 6345db71995Sopenharmony_ci .set_name(explicit_layer_name) 6355db71995Sopenharmony_ci .set_description("1111") 6365db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 6375db71995Sopenharmony_ci "regular_test_layer2.json"); 6385db71995Sopenharmony_ci 6395db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 6405db71995Sopenharmony_ci AppSpecificSettings{} 6415db71995Sopenharmony_ci .add_stderr_log_filter("all") 6425db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 6435db71995Sopenharmony_ci .set_name(explicit_layer_name) 6445db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 6455db71995Sopenharmony_ci .set_control("on")) 6465db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 6475db71995Sopenharmony_ci .set_name(explicit_layer_name) 6485db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(1).str()) 6495db71995Sopenharmony_ci .set_control("on")))); 6505db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(2); 6515db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name)); 6525db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).description, "0000")); 6535db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name)); 6545db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).description, "1111")); 6555db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 6565db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 6575db71995Sopenharmony_ci inst.CheckCreate(); 6585db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 6595db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); 6605db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name)); 6615db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).description, "0000")); 6625db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_name)); 6635db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).description, "1111")); 6645db71995Sopenharmony_ci} 6655db71995Sopenharmony_ci 6665db71995Sopenharmony_ci// Settings file shouldn't be able to cause the same layer from the same path twice 6675db71995Sopenharmony_ciTEST(SettingsFile, MultipleLayersWithSamePath) { 6685db71995Sopenharmony_ci FrameworkEnvironment env{}; 6695db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 6705db71995Sopenharmony_ci 6715db71995Sopenharmony_ci const char* explicit_layer_name = "VK_LAYER_TestLayer"; 6725db71995Sopenharmony_ci env.add_explicit_layer( 6735db71995Sopenharmony_ci ManifestLayer{}.add_layer( 6745db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 6755db71995Sopenharmony_ci "regular_test_layer1.json"); 6765db71995Sopenharmony_ci 6775db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 6785db71995Sopenharmony_ci AppSpecificSettings{} 6795db71995Sopenharmony_ci .add_stderr_log_filter("all") 6805db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 6815db71995Sopenharmony_ci .set_name(explicit_layer_name) 6825db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 6835db71995Sopenharmony_ci .set_control("on")) 6845db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 6855db71995Sopenharmony_ci .set_name(explicit_layer_name) 6865db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 6875db71995Sopenharmony_ci .set_control("on")))); 6885db71995Sopenharmony_ci 6895db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 6905db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name)); 6915db71995Sopenharmony_ci 6925db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 6935db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 6945db71995Sopenharmony_ci inst.CheckCreate(); 6955db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 6965db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 6975db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name)); 6985db71995Sopenharmony_ci} 6995db71995Sopenharmony_ci 7005db71995Sopenharmony_ci// Settings contains a layer whose name doesn't match the one found in the layer manifest - make sure the layer from the settings 7015db71995Sopenharmony_ci// file is removed 7025db71995Sopenharmony_ciTEST(SettingsFile, MismatchedLayerNameAndManifestPath) { 7035db71995Sopenharmony_ci FrameworkEnvironment env{}; 7045db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 7055db71995Sopenharmony_ci 7065db71995Sopenharmony_ci const char* manifest_explicit_layer_name = "VK_LAYER_MANIFEST_TestLayer"; 7075db71995Sopenharmony_ci const char* settings_explicit_layer_name = "VK_LAYER_Settings_TestLayer"; 7085db71995Sopenharmony_ci env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 7095db71995Sopenharmony_ci .set_name(manifest_explicit_layer_name) 7105db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 7115db71995Sopenharmony_ci "regular_test_layer1.json"); 7125db71995Sopenharmony_ci 7135db71995Sopenharmony_ci const char* implicit_layer_name = "VK_LAYER_Implicit_TestLayer"; 7145db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 7155db71995Sopenharmony_ci .set_name(implicit_layer_name) 7165db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 7175db71995Sopenharmony_ci .set_disable_environment("oof")), 7185db71995Sopenharmony_ci "implicit_test_layer.json"); 7195db71995Sopenharmony_ci 7205db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 7215db71995Sopenharmony_ci AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 7225db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 7235db71995Sopenharmony_ci .set_name(settings_explicit_layer_name) 7245db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 7255db71995Sopenharmony_ci .set_control("on")))); 7265db71995Sopenharmony_ci 7275db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); 7285db71995Sopenharmony_ci 7295db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 7305db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 7315db71995Sopenharmony_ci inst.CheckCreate(); 7325db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 7335db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); 7345db71995Sopenharmony_ci} 7355db71995Sopenharmony_ci 7365db71995Sopenharmony_ci// Settings file should take precedence over the meta layer, if present 7375db71995Sopenharmony_ciTEST(SettingsFile, MetaLayerAlsoActivates) { 7385db71995Sopenharmony_ci FrameworkEnvironment env{}; 7395db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 7405db71995Sopenharmony_ci 7415db71995Sopenharmony_ci const char* settings_explicit_layer_name = "VK_LAYER_Regular_TestLayer"; 7425db71995Sopenharmony_ci env.add_explicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 7435db71995Sopenharmony_ci .set_name(settings_explicit_layer_name) 7445db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 7455db71995Sopenharmony_ci "explicit_test_layer.json"); 7465db71995Sopenharmony_ci 7475db71995Sopenharmony_ci const char* settings_implicit_layer_name = "VK_LAYER_RegularImplicit_TestLayer"; 7485db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 7495db71995Sopenharmony_ci .set_name(settings_implicit_layer_name) 7505db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 7515db71995Sopenharmony_ci .set_disable_environment("AndISaidHey") 7525db71995Sopenharmony_ci .set_enable_environment("WhatsGoingOn")), 7535db71995Sopenharmony_ci "implicit_layer.json"); 7545db71995Sopenharmony_ci 7555db71995Sopenharmony_ci const char* component_explicit_layer_name1 = "VK_LAYER_Component_TestLayer1"; 7565db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 7575db71995Sopenharmony_ci .set_name(component_explicit_layer_name1) 7585db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 7595db71995Sopenharmony_ci "component_test_layer1.json")); 7605db71995Sopenharmony_ci 7615db71995Sopenharmony_ci const char* component_explicit_layer_name2 = "VK_LAYER_Component_TestLayer2"; 7625db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 7635db71995Sopenharmony_ci .set_name(component_explicit_layer_name2) 7645db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 7655db71995Sopenharmony_ci "component_test_layer2.json")); 7665db71995Sopenharmony_ci 7675db71995Sopenharmony_ci const char* meta_layer_name1 = "VK_LAYER_meta_layer1"; 7685db71995Sopenharmony_ci env.add_implicit_layer( 7695db71995Sopenharmony_ci ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer(ManifestLayer::LayerDescription{} 7705db71995Sopenharmony_ci .set_name(meta_layer_name1) 7715db71995Sopenharmony_ci .add_component_layer(component_explicit_layer_name2) 7725db71995Sopenharmony_ci .add_component_layer(component_explicit_layer_name1) 7735db71995Sopenharmony_ci .set_disable_environment("NotGonnaWork")), 7745db71995Sopenharmony_ci "meta_test_layer.json"); 7755db71995Sopenharmony_ci 7765db71995Sopenharmony_ci const char* meta_layer_name2 = "VK_LAYER_meta_layer2"; 7775db71995Sopenharmony_ci env.add_implicit_layer( 7785db71995Sopenharmony_ci ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer(ManifestLayer::LayerDescription{} 7795db71995Sopenharmony_ci .set_name(meta_layer_name2) 7805db71995Sopenharmony_ci .add_component_layer(component_explicit_layer_name1) 7815db71995Sopenharmony_ci .set_disable_environment("ILikeTrains") 7825db71995Sopenharmony_ci .set_enable_environment("BakedBeans")), 7835db71995Sopenharmony_ci "not_automatic_meta_test_layer.json"); 7845db71995Sopenharmony_ci 7855db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 7865db71995Sopenharmony_ci AppSpecificSettings{} 7875db71995Sopenharmony_ci .add_stderr_log_filter("all") 7885db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 7895db71995Sopenharmony_ci .set_name(settings_explicit_layer_name) 7905db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 7915db71995Sopenharmony_ci .set_control("on") 7925db71995Sopenharmony_ci .set_treat_as_implicit_manifest(false)) 7935db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{}.set_control("unordered_layer_location")) 7945db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 7955db71995Sopenharmony_ci .set_name(settings_implicit_layer_name) 7965db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(1).str()) 7975db71995Sopenharmony_ci .set_control("auto") 7985db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true)))); 7995db71995Sopenharmony_ci { 8005db71995Sopenharmony_ci EnvVarWrapper enable_meta_layer{"WhatsGoingOn", "1"}; 8015db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(6); 8025db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, settings_explicit_layer_name)); 8035db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, meta_layer_name1)); 8045db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(2).layerName, meta_layer_name2)); 8055db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(3).layerName, component_explicit_layer_name1)); 8065db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(4).layerName, component_explicit_layer_name2)); 8075db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(5).layerName, settings_implicit_layer_name)); 8085db71995Sopenharmony_ci 8095db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 8105db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 8115db71995Sopenharmony_ci inst.CheckCreate(); 8125db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 8135db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 5); 8145db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, settings_explicit_layer_name)); 8155db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, component_explicit_layer_name2)); 8165db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(2).layerName, component_explicit_layer_name1)); 8175db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(3).layerName, meta_layer_name1)); 8185db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(4).layerName, settings_implicit_layer_name)); 8195db71995Sopenharmony_ci } 8205db71995Sopenharmony_ci { 8215db71995Sopenharmony_ci EnvVarWrapper enable_meta_layer{"BakedBeans", "1"}; 8225db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(6); 8235db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, settings_explicit_layer_name)); 8245db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, meta_layer_name1)); 8255db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(2).layerName, meta_layer_name2)); 8265db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(3).layerName, component_explicit_layer_name1)); 8275db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(4).layerName, component_explicit_layer_name2)); 8285db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(5).layerName, settings_implicit_layer_name)); 8295db71995Sopenharmony_ci 8305db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 8315db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 8325db71995Sopenharmony_ci inst.CheckCreate(); 8335db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 8345db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 5); 8355db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, settings_explicit_layer_name)); 8365db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, component_explicit_layer_name2)); 8375db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(2).layerName, component_explicit_layer_name1)); 8385db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(3).layerName, meta_layer_name1)); 8395db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(4).layerName, meta_layer_name2)); 8405db71995Sopenharmony_ci } 8415db71995Sopenharmony_ci} 8425db71995Sopenharmony_ci 8435db71995Sopenharmony_ci// Layers are correctly ordered by settings file. 8445db71995Sopenharmony_ciTEST(SettingsFile, LayerOrdering) { 8455db71995Sopenharmony_ci FrameworkEnvironment env{}; 8465db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 8475db71995Sopenharmony_ci 8485db71995Sopenharmony_ci const char* explicit_layer_name1 = "VK_LAYER_Regular_TestLayer1"; 8495db71995Sopenharmony_ci env.add_explicit_layer( 8505db71995Sopenharmony_ci ManifestLayer{}.add_layer( 8515db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 8525db71995Sopenharmony_ci "explicit_test_layer1.json"); 8535db71995Sopenharmony_ci 8545db71995Sopenharmony_ci const char* explicit_layer_name2 = "VK_LAYER_Regular_TestLayer2"; 8555db71995Sopenharmony_ci env.add_explicit_layer( 8565db71995Sopenharmony_ci ManifestLayer{}.add_layer( 8575db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 8585db71995Sopenharmony_ci "explicit_test_layer2.json"); 8595db71995Sopenharmony_ci 8605db71995Sopenharmony_ci const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1"; 8615db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 8625db71995Sopenharmony_ci .set_name(implicit_layer_name1) 8635db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 8645db71995Sopenharmony_ci .set_disable_environment("Domierigato")), 8655db71995Sopenharmony_ci "implicit_layer1.json"); 8665db71995Sopenharmony_ci 8675db71995Sopenharmony_ci const char* implicit_layer_name2 = "VK_LAYER_Implicit_TestLayer2"; 8685db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 8695db71995Sopenharmony_ci .set_name(implicit_layer_name2) 8705db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 8715db71995Sopenharmony_ci .set_disable_environment("Mistehrobato")), 8725db71995Sopenharmony_ci "implicit_layer2.json"); 8735db71995Sopenharmony_ci 8745db71995Sopenharmony_ci env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all")); 8755db71995Sopenharmony_ci 8765db71995Sopenharmony_ci std::vector<LoaderSettingsLayerConfiguration> layer_configs{4}; 8775db71995Sopenharmony_ci layer_configs.at(0) 8785db71995Sopenharmony_ci .set_name(explicit_layer_name1) 8795db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 8805db71995Sopenharmony_ci .set_control("on") 8815db71995Sopenharmony_ci .set_treat_as_implicit_manifest(false); 8825db71995Sopenharmony_ci layer_configs.at(1) 8835db71995Sopenharmony_ci .set_name(explicit_layer_name2) 8845db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(1).str()) 8855db71995Sopenharmony_ci .set_control("on") 8865db71995Sopenharmony_ci .set_treat_as_implicit_manifest(false); 8875db71995Sopenharmony_ci layer_configs.at(2) 8885db71995Sopenharmony_ci .set_name(implicit_layer_name1) 8895db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(2).str()) 8905db71995Sopenharmony_ci .set_control("on") 8915db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true); 8925db71995Sopenharmony_ci layer_configs.at(3) 8935db71995Sopenharmony_ci .set_name(implicit_layer_name2) 8945db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(3).str()) 8955db71995Sopenharmony_ci .set_control("on") 8965db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true); 8975db71995Sopenharmony_ci 8985db71995Sopenharmony_ci std::sort(layer_configs.begin(), layer_configs.end()); 8995db71995Sopenharmony_ci uint32_t permutation_count = 0; 9005db71995Sopenharmony_ci do { 9015db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).layer_configurations.clear(); 9025db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).add_layer_configurations(layer_configs); 9035db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 9045db71995Sopenharmony_ci 9055db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(4); 9065db71995Sopenharmony_ci for (uint32_t i = 0; i < 4; i++) { 9075db71995Sopenharmony_ci ASSERT_TRUE(layer_configs.at(i).name == layer_props.at(i).layerName); 9085db71995Sopenharmony_ci } 9095db71995Sopenharmony_ci 9105db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 9115db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 9125db71995Sopenharmony_ci inst.CheckCreate(); 9135db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 9145db71995Sopenharmony_ci auto active_layers = inst.GetActiveLayers(inst.GetPhysDev(), 4); 9155db71995Sopenharmony_ci for (uint32_t i = 0; i < 4; i++) { 9165db71995Sopenharmony_ci ASSERT_TRUE(layer_configs.at(i).name == active_layers.at(i).layerName); 9175db71995Sopenharmony_ci } 9185db71995Sopenharmony_ci env.debug_log.clear(); 9195db71995Sopenharmony_ci permutation_count++; 9205db71995Sopenharmony_ci } while (std::next_permutation(layer_configs.begin(), layer_configs.end())); 9215db71995Sopenharmony_ci ASSERT_EQ(permutation_count, 24U); // should be this many orderings 9225db71995Sopenharmony_ci} 9235db71995Sopenharmony_ci 9245db71995Sopenharmony_ciTEST(SettingsFile, EnvVarsWork_VK_LAYER_PATH) { 9255db71995Sopenharmony_ci FrameworkEnvironment env{}; 9265db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 9275db71995Sopenharmony_ci 9285db71995Sopenharmony_ci const char* explicit_layer_name1 = "VK_LAYER_Regular_TestLayer1"; 9295db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 9305db71995Sopenharmony_ci ManifestLayer{}.add_layer( 9315db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 9325db71995Sopenharmony_ci "explicit_test_layer1.json"} 9335db71995Sopenharmony_ci .set_discovery_type(ManifestDiscoveryType::env_var)); 9345db71995Sopenharmony_ci 9355db71995Sopenharmony_ci const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1"; 9365db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 9375db71995Sopenharmony_ci .set_name(implicit_layer_name1) 9385db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 9395db71995Sopenharmony_ci .set_disable_environment("Domierigato")), 9405db71995Sopenharmony_ci "implicit_layer1.json"); 9415db71995Sopenharmony_ci const char* non_env_var_layer_name2 = "VK_LAYER_Regular_TestLayer2"; 9425db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 9435db71995Sopenharmony_ci ManifestLayer{}.add_layer( 9445db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(non_env_var_layer_name2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 9455db71995Sopenharmony_ci "explicit_test_layer2.json"}); 9465db71995Sopenharmony_ci 9475db71995Sopenharmony_ci { 9485db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(2); 9495db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name1)); 9505db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name1)); 9515db71995Sopenharmony_ci 9525db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 9535db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 9545db71995Sopenharmony_ci inst.CheckCreate(); 9555db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); 9565db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 9575db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); 9585db71995Sopenharmony_ci } 9595db71995Sopenharmony_ci { 9605db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 9615db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 9625db71995Sopenharmony_ci inst.create_info.add_layer(explicit_layer_name1); 9635db71995Sopenharmony_ci inst.CheckCreate(); 9645db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); 9655db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); 9665db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); 9675db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_name1)); 9685db71995Sopenharmony_ci } 9695db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.add_app_specific_setting( 9705db71995Sopenharmony_ci AppSpecificSettings{} 9715db71995Sopenharmony_ci .add_stderr_log_filter("all") 9725db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 9735db71995Sopenharmony_ci .set_name(non_env_var_layer_name2) 9745db71995Sopenharmony_ci .set_control("on") 9755db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(2).str())) 9765db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{}.set_control("unordered_layer_location")))); 9775db71995Sopenharmony_ci { 9785db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(3); 9795db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, non_env_var_layer_name2)); 9805db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, implicit_layer_name1)); 9815db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(2).layerName, explicit_layer_name1)); 9825db71995Sopenharmony_ci 9835db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 9845db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 9855db71995Sopenharmony_ci inst.CheckCreate(); 9865db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 9875db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); 9885db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, non_env_var_layer_name2)); 9895db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name1)); 9905db71995Sopenharmony_ci } 9915db71995Sopenharmony_ci { 9925db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 9935db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 9945db71995Sopenharmony_ci inst.create_info.add_layer(explicit_layer_name1); 9955db71995Sopenharmony_ci inst.CheckCreate(); 9965db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 9975db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); 9985db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, non_env_var_layer_name2)); 9995db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, implicit_layer_name1)); 10005db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(2).layerName, explicit_layer_name1)); 10015db71995Sopenharmony_ci } 10025db71995Sopenharmony_ci} 10035db71995Sopenharmony_ci 10045db71995Sopenharmony_ciTEST(SettingsFile, EnvVarsWork_VK_ADD_LAYER_PATH) { 10055db71995Sopenharmony_ci FrameworkEnvironment env{}; 10065db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 10075db71995Sopenharmony_ci 10085db71995Sopenharmony_ci const char* implicit_layer_name1 = "VK_LAYER_Implicit_TestLayer1"; 10095db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 10105db71995Sopenharmony_ci .set_name(implicit_layer_name1) 10115db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 10125db71995Sopenharmony_ci .set_disable_environment("Domierigato")), 10135db71995Sopenharmony_ci "implicit_layer1.json"); 10145db71995Sopenharmony_ci const char* explicit_layer_name1 = "VK_LAYER_Regular_TestLayer1"; 10155db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 10165db71995Sopenharmony_ci ManifestLayer{}.add_layer( 10175db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name1).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 10185db71995Sopenharmony_ci "explicit_test_layer1.json"} 10195db71995Sopenharmony_ci .set_discovery_type(ManifestDiscoveryType::add_env_var)); 10205db71995Sopenharmony_ci const char* non_env_var_layer_name2 = "VK_LAYER_Regular_TestLayer2"; 10215db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 10225db71995Sopenharmony_ci ManifestLayer{}.add_layer( 10235db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(non_env_var_layer_name2).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 10245db71995Sopenharmony_ci "explicit_test_layer2.json"}); 10255db71995Sopenharmony_ci 10265db71995Sopenharmony_ci { 10275db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(3); 10285db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, implicit_layer_name1)); 10295db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, explicit_layer_name1)); 10305db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(2).layerName, non_env_var_layer_name2)); 10315db71995Sopenharmony_ci 10325db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 10335db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 10345db71995Sopenharmony_ci inst.CheckCreate(); 10355db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); 10365db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 10375db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); 10385db71995Sopenharmony_ci } 10395db71995Sopenharmony_ci { 10405db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 10415db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 10425db71995Sopenharmony_ci inst.create_info.add_layer(explicit_layer_name1); 10435db71995Sopenharmony_ci inst.CheckCreate(); 10445db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); 10455db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 2); 10465db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name1)); 10475db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, explicit_layer_name1)); 10485db71995Sopenharmony_ci } 10495db71995Sopenharmony_ci 10505db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.add_app_specific_setting( 10515db71995Sopenharmony_ci AppSpecificSettings{} 10525db71995Sopenharmony_ci .add_stderr_log_filter("all") 10535db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 10545db71995Sopenharmony_ci .set_name(explicit_layer_name1) 10555db71995Sopenharmony_ci .set_control("on") 10565db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(1).str())) 10575db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 10585db71995Sopenharmony_ci .set_name(non_env_var_layer_name2) 10595db71995Sopenharmony_ci .set_control("on") 10605db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(2).str())) 10615db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 10625db71995Sopenharmony_ci .set_name(implicit_layer_name1) 10635db71995Sopenharmony_ci .set_control("on") 10645db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 10655db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true)))); 10665db71995Sopenharmony_ci { 10675db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(3); 10685db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name1)); 10695db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(1).layerName, non_env_var_layer_name2)); 10705db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(2).layerName, implicit_layer_name1)); 10715db71995Sopenharmony_ci 10725db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 10735db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 10745db71995Sopenharmony_ci inst.CheckCreate(); 10755db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 10765db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); 10775db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name1)); 10785db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, non_env_var_layer_name2)); 10795db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(2).layerName, implicit_layer_name1)); 10805db71995Sopenharmony_ci } 10815db71995Sopenharmony_ci { 10825db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 10835db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 10845db71995Sopenharmony_ci inst.create_info.add_layer(explicit_layer_name1); 10855db71995Sopenharmony_ci inst.CheckCreate(); 10865db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 10875db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 3); 10885db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, explicit_layer_name1)); 10895db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(1).layerName, non_env_var_layer_name2)); 10905db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(2).layerName, implicit_layer_name1)); 10915db71995Sopenharmony_ci } 10925db71995Sopenharmony_ci} 10935db71995Sopenharmony_ci 10945db71995Sopenharmony_ciTEST(SettingsFile, EnvVarsWork_VK_INSTANCE_LAYERS) { 10955db71995Sopenharmony_ci FrameworkEnvironment env{}; 10965db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 10975db71995Sopenharmony_ci 10985db71995Sopenharmony_ci const char* explicit_layer_name = "VK_LAYER_Regular_TestLayer1"; 10995db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 11005db71995Sopenharmony_ci ManifestLayer{}.add_layer( 11015db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 11025db71995Sopenharmony_ci "explicit_test_layer1.json"}); 11035db71995Sopenharmony_ci 11045db71995Sopenharmony_ci { 11055db71995Sopenharmony_ci EnvVarWrapper vk_instance_layers{"VK_INSTANCE_LAYERS", explicit_layer_name}; 11065db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 11075db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name)); 11085db71995Sopenharmony_ci 11095db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 11105db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 11115db71995Sopenharmony_ci inst.CheckCreate(); 11125db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(get_settings_location_log_message(env))); 11135db71995Sopenharmony_ci auto layer = inst.GetActiveLayers(inst.GetPhysDev(), 1); 11145db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer.at(0).layerName, explicit_layer_name)); 11155db71995Sopenharmony_ci } 11165db71995Sopenharmony_ci env.update_loader_settings( 11175db71995Sopenharmony_ci env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 11185db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 11195db71995Sopenharmony_ci .set_name(explicit_layer_name) 11205db71995Sopenharmony_ci .set_control("off") 11215db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str())))); 11225db71995Sopenharmony_ci { 11235db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); 11245db71995Sopenharmony_ci 11255db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 11265db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 11275db71995Sopenharmony_ci inst.CheckCreate(); 11285db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 11295db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); 11305db71995Sopenharmony_ci } 11315db71995Sopenharmony_ci { 11325db71995Sopenharmony_ci EnvVarWrapper vk_instance_layers{"VK_INSTANCE_LAYERS", explicit_layer_name}; 11335db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); 11345db71995Sopenharmony_ci 11355db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 11365db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 11375db71995Sopenharmony_ci inst.CheckCreate(); 11385db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 11395db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); 11405db71995Sopenharmony_ci } 11415db71995Sopenharmony_ci} 11425db71995Sopenharmony_ci// Make sure that layers disabled by settings file aren't enabled by VK_LOADER_LAYERS_ENABLE 11435db71995Sopenharmony_ciTEST(SettingsFile, EnvVarsWork_VK_LOADER_LAYERS_ENABLE) { 11445db71995Sopenharmony_ci FrameworkEnvironment env{}; 11455db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 11465db71995Sopenharmony_ci 11475db71995Sopenharmony_ci const char* explicit_layer_name = "VK_LAYER_Regular_TestLayer1"; 11485db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 11495db71995Sopenharmony_ci ManifestLayer{}.add_layer( 11505db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 11515db71995Sopenharmony_ci "explicit_test_layer1.json"}); 11525db71995Sopenharmony_ci 11535db71995Sopenharmony_ci env.update_loader_settings( 11545db71995Sopenharmony_ci env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 11555db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 11565db71995Sopenharmony_ci .set_name(explicit_layer_name) 11575db71995Sopenharmony_ci .set_control("off") 11585db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str())))); 11595db71995Sopenharmony_ci 11605db71995Sopenharmony_ci EnvVarWrapper vk_instance_layers{"VK_LOADER_LAYERS_ENABLE", explicit_layer_name}; 11615db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); 11625db71995Sopenharmony_ci 11635db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 11645db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 11655db71995Sopenharmony_ci inst.CheckCreate(); 11665db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 11675db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); 11685db71995Sopenharmony_ci} 11695db71995Sopenharmony_ci// Make sure that layers enabled by settings file aren't disabled by VK_LOADER_LAYERS_ENABLE 11705db71995Sopenharmony_ciTEST(SettingsFile, EnvVarsWork_VK_LOADER_LAYERS_DISABLE) { 11715db71995Sopenharmony_ci FrameworkEnvironment env{}; 11725db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 11735db71995Sopenharmony_ci 11745db71995Sopenharmony_ci const char* explicit_layer_name = "VK_LAYER_Regular_TestLayer1"; 11755db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 11765db71995Sopenharmony_ci ManifestLayer{}.add_layer( 11775db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 11785db71995Sopenharmony_ci "explicit_test_layer1.json"}); 11795db71995Sopenharmony_ci 11805db71995Sopenharmony_ci env.update_loader_settings( 11815db71995Sopenharmony_ci env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 11825db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 11835db71995Sopenharmony_ci .set_name(explicit_layer_name) 11845db71995Sopenharmony_ci .set_control("on") 11855db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str())))); 11865db71995Sopenharmony_ci 11875db71995Sopenharmony_ci EnvVarWrapper vk_instance_layers{"VK_LOADER_LAYERS_DISABLE", explicit_layer_name}; 11885db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 11895db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layer_props.at(0).layerName, explicit_layer_name)); 11905db71995Sopenharmony_ci 11915db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 11925db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 11935db71995Sopenharmony_ci inst.CheckCreate(); 11945db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 11955db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); 11965db71995Sopenharmony_ci} 11975db71995Sopenharmony_ci 11985db71995Sopenharmony_ci#if defined(WIN32) 11995db71995Sopenharmony_ciTEST(SettingsFile, MultipleKeysInRegistryInUnsecureLocation) { 12005db71995Sopenharmony_ci FrameworkEnvironment env{}; 12015db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 12025db71995Sopenharmony_ci env.platform_shim->add_unsecured_manifest(ManifestCategory::settings, "jank_path"); 12035db71995Sopenharmony_ci env.platform_shim->add_unsecured_manifest(ManifestCategory::settings, "jank_path2"); 12045db71995Sopenharmony_ci 12055db71995Sopenharmony_ci const char* regular_layer_name = "VK_LAYER_TestLayer_0"; 12065db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 12075db71995Sopenharmony_ci ManifestLayer{}.add_layer( 12085db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 12095db71995Sopenharmony_ci "regular_test_layer.json"} 12105db71995Sopenharmony_ci .set_discovery_type(ManifestDiscoveryType::override_folder)); 12115db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 12125db71995Sopenharmony_ci AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 12135db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 12145db71995Sopenharmony_ci .set_name(regular_layer_name) 12155db71995Sopenharmony_ci .set_path(env.get_layer_manifest_path().str()) 12165db71995Sopenharmony_ci .set_control("on")))); 12175db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); 12185db71995Sopenharmony_ci 12195db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 12205db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); 12215db71995Sopenharmony_ci 12225db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 12235db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 12245db71995Sopenharmony_ci inst.CheckCreate(); 12255db71995Sopenharmony_ci 12265db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 12275db71995Sopenharmony_ci env.debug_log.clear(); 12285db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 12295db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, regular_layer_name)); 12305db71995Sopenharmony_ci} 12315db71995Sopenharmony_ci 12325db71995Sopenharmony_ciTEST(SettingsFile, MultipleKeysInRegistryInSecureLocation) { 12335db71995Sopenharmony_ci FrameworkEnvironment env{FrameworkSettings{}.set_secure_loader_settings(true)}; 12345db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 12355db71995Sopenharmony_ci env.platform_shim->add_manifest(ManifestCategory::settings, "jank_path"); 12365db71995Sopenharmony_ci env.platform_shim->add_manifest(ManifestCategory::settings, "jank_path2"); 12375db71995Sopenharmony_ci 12385db71995Sopenharmony_ci const char* regular_layer_name = "VK_LAYER_TestLayer_0"; 12395db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 12405db71995Sopenharmony_ci ManifestLayer{}.add_layer( 12415db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(regular_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 12425db71995Sopenharmony_ci "regular_test_layer.json"} 12435db71995Sopenharmony_ci .set_discovery_type(ManifestDiscoveryType::override_folder)); 12445db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 12455db71995Sopenharmony_ci AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 12465db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 12475db71995Sopenharmony_ci .set_name(regular_layer_name) 12485db71995Sopenharmony_ci .set_path(env.get_layer_manifest_path().str()) 12495db71995Sopenharmony_ci .set_control("on")))); 12505db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); 12515db71995Sopenharmony_ci 12525db71995Sopenharmony_ci // Make sure it works if the settings file is in the HKEY_LOCAL_MACHINE 12535db71995Sopenharmony_ci env.platform_shim->set_elevated_privilege(true); 12545db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)); 12555db71995Sopenharmony_ci { 12565db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(1); 12575db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(0).layerName, regular_layer_name)); 12585db71995Sopenharmony_ci 12595db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 12605db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 12615db71995Sopenharmony_ci inst.CheckCreate(); 12625db71995Sopenharmony_ci 12635db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 12645db71995Sopenharmony_ci env.debug_log.clear(); 12655db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 12665db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, regular_layer_name)); 12675db71995Sopenharmony_ci } 12685db71995Sopenharmony_ci} 12695db71995Sopenharmony_ci#endif 12705db71995Sopenharmony_ci 12715db71995Sopenharmony_ci// Preinstance functions respect the settings file 12725db71995Sopenharmony_ciTEST(SettingsFile, PreInstanceFunctions) { 12735db71995Sopenharmony_ci FrameworkEnvironment env; 12745db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); 12755db71995Sopenharmony_ci 12765db71995Sopenharmony_ci const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; 12775db71995Sopenharmony_ci 12785db71995Sopenharmony_ci env.add_implicit_layer( 12795db71995Sopenharmony_ci ManifestLayer{}.set_file_format_version({1, 1, 2}).add_layer( 12805db71995Sopenharmony_ci ManifestLayer::LayerDescription{} 12815db71995Sopenharmony_ci .set_name(implicit_layer_name) 12825db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 12835db71995Sopenharmony_ci .set_disable_environment("DISABLE_ME") 12845db71995Sopenharmony_ci .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} 12855db71995Sopenharmony_ci .set_vk_func("vkEnumerateInstanceLayerProperties") 12865db71995Sopenharmony_ci .set_override_name("test_preinst_vkEnumerateInstanceLayerProperties")) 12875db71995Sopenharmony_ci .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} 12885db71995Sopenharmony_ci .set_vk_func("vkEnumerateInstanceExtensionProperties") 12895db71995Sopenharmony_ci .set_override_name("test_preinst_vkEnumerateInstanceExtensionProperties")) 12905db71995Sopenharmony_ci .add_pre_instance_function(ManifestLayer::LayerDescription::FunctionOverride{} 12915db71995Sopenharmony_ci .set_vk_func("vkEnumerateInstanceVersion") 12925db71995Sopenharmony_ci .set_override_name("test_preinst_vkEnumerateInstanceVersion"))), 12935db71995Sopenharmony_ci "implicit_test_layer.json"); 12945db71995Sopenharmony_ci 12955db71995Sopenharmony_ci env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 12965db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 12975db71995Sopenharmony_ci .set_name(implicit_layer_name) 12985db71995Sopenharmony_ci .set_control("on") 12995db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 13005db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true))); 13015db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 13025db71995Sopenharmony_ci { 13035db71995Sopenharmony_ci auto& layer = env.get_test_layer(0); 13045db71995Sopenharmony_ci // Check layer props 13055db71995Sopenharmony_ci uint32_t layer_props = 43; 13065db71995Sopenharmony_ci layer.set_reported_layer_props(layer_props); 13075db71995Sopenharmony_ci 13085db71995Sopenharmony_ci uint32_t count = 0; 13095db71995Sopenharmony_ci ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); 13105db71995Sopenharmony_ci ASSERT_EQ(count, layer_props); 13115db71995Sopenharmony_ci 13125db71995Sopenharmony_ci // check extension props 13135db71995Sopenharmony_ci uint32_t ext_props = 52; 13145db71995Sopenharmony_ci layer.set_reported_extension_props(ext_props); 13155db71995Sopenharmony_ci count = 0; 13165db71995Sopenharmony_ci ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); 13175db71995Sopenharmony_ci ASSERT_EQ(count, ext_props); 13185db71995Sopenharmony_ci 13195db71995Sopenharmony_ci // check version 13205db71995Sopenharmony_ci uint32_t layer_version = VK_MAKE_API_VERSION(1, 2, 3, 4); 13215db71995Sopenharmony_ci layer.set_reported_instance_version(layer_version); 13225db71995Sopenharmony_ci 13235db71995Sopenharmony_ci uint32_t version = 0; 13245db71995Sopenharmony_ci ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); 13255db71995Sopenharmony_ci ASSERT_EQ(version, layer_version); 13265db71995Sopenharmony_ci } 13275db71995Sopenharmony_ci // control is set to off 13285db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("off"); 13295db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 13305db71995Sopenharmony_ci 13315db71995Sopenharmony_ci { 13325db71995Sopenharmony_ci auto& layer = env.get_test_layer(0); 13335db71995Sopenharmony_ci // Check layer props 13345db71995Sopenharmony_ci uint32_t layer_props = 43; 13355db71995Sopenharmony_ci layer.set_reported_layer_props(layer_props); 13365db71995Sopenharmony_ci 13375db71995Sopenharmony_ci uint32_t count = 0; 13385db71995Sopenharmony_ci ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); 13395db71995Sopenharmony_ci ASSERT_EQ(count, 0U); // dont use the intercepted count 13405db71995Sopenharmony_ci 13415db71995Sopenharmony_ci // check extension props 13425db71995Sopenharmony_ci uint32_t ext_props = 52; 13435db71995Sopenharmony_ci layer.set_reported_extension_props(ext_props); 13445db71995Sopenharmony_ci count = 0; 13455db71995Sopenharmony_ci ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); 13465db71995Sopenharmony_ci ASSERT_EQ(count, 4U); // dont use the intercepted count - use default count 13475db71995Sopenharmony_ci 13485db71995Sopenharmony_ci // check version 13495db71995Sopenharmony_ci uint32_t layer_version = VK_MAKE_API_VERSION(1, 2, 3, 4); 13505db71995Sopenharmony_ci layer.set_reported_instance_version(layer_version); 13515db71995Sopenharmony_ci 13525db71995Sopenharmony_ci uint32_t version = 0; 13535db71995Sopenharmony_ci ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); 13545db71995Sopenharmony_ci ASSERT_EQ(version, VK_HEADER_VERSION_COMPLETE); 13555db71995Sopenharmony_ci } 13565db71995Sopenharmony_ci 13575db71995Sopenharmony_ci // control is set to auto 13585db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("auto"); 13595db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 13605db71995Sopenharmony_ci 13615db71995Sopenharmony_ci { 13625db71995Sopenharmony_ci auto& layer = env.get_test_layer(0); 13635db71995Sopenharmony_ci // Check layer props 13645db71995Sopenharmony_ci uint32_t layer_props = 43; 13655db71995Sopenharmony_ci layer.set_reported_layer_props(layer_props); 13665db71995Sopenharmony_ci 13675db71995Sopenharmony_ci uint32_t count = 0; 13685db71995Sopenharmony_ci ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceLayerProperties(&count, nullptr)); 13695db71995Sopenharmony_ci ASSERT_EQ(count, layer_props); 13705db71995Sopenharmony_ci 13715db71995Sopenharmony_ci // check extension props 13725db71995Sopenharmony_ci uint32_t ext_props = 52; 13735db71995Sopenharmony_ci layer.set_reported_extension_props(ext_props); 13745db71995Sopenharmony_ci count = 0; 13755db71995Sopenharmony_ci ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr)); 13765db71995Sopenharmony_ci ASSERT_EQ(count, ext_props); 13775db71995Sopenharmony_ci 13785db71995Sopenharmony_ci // check version 13795db71995Sopenharmony_ci uint32_t layer_version = VK_MAKE_API_VERSION(1, 2, 3, 4); 13805db71995Sopenharmony_ci layer.set_reported_instance_version(layer_version); 13815db71995Sopenharmony_ci 13825db71995Sopenharmony_ci uint32_t version = 0; 13835db71995Sopenharmony_ci ASSERT_EQ(VK_SUCCESS, env.vulkan_functions.vkEnumerateInstanceVersion(&version)); 13845db71995Sopenharmony_ci ASSERT_EQ(version, layer_version); 13855db71995Sopenharmony_ci } 13865db71995Sopenharmony_ci} 13875db71995Sopenharmony_ci 13885db71995Sopenharmony_ci// If an implicit layer's disable environment variable is set, but the settings file says to turn the layer on, the layer should be 13895db71995Sopenharmony_ci// activated. 13905db71995Sopenharmony_ciTEST(SettingsFile, ImplicitLayerDisableEnvironmentVariableOverriden) { 13915db71995Sopenharmony_ci auto check_log_for_insert_instance_layer_string = [](FrameworkEnvironment& env, const char* implicit_layer_name, 13925db71995Sopenharmony_ci bool check_for_enable) { 13935db71995Sopenharmony_ci { 13945db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 13955db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 13965db71995Sopenharmony_ci inst.CheckCreate(VK_SUCCESS); 13975db71995Sopenharmony_ci if (check_for_enable) { 13985db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(std::string("Insert instance layer \"") + implicit_layer_name)); 13995db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1); 14005db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers.at(0).layerName, implicit_layer_name)); 14015db71995Sopenharmony_ci } else { 14025db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(std::string("Insert instance layer \"") + implicit_layer_name)); 14035db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(inst.GetActiveLayers(inst.GetPhysDev(), 0)); 14045db71995Sopenharmony_ci } 14055db71995Sopenharmony_ci } 14065db71995Sopenharmony_ci env.debug_log.clear(); 14075db71995Sopenharmony_ci }; 14085db71995Sopenharmony_ci 14095db71995Sopenharmony_ci FrameworkEnvironment env; 14105db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA)).add_physical_device({}); 14115db71995Sopenharmony_ci const char* implicit_layer_name = "VK_LAYER_ImplicitTestLayer"; 14125db71995Sopenharmony_ci 14135db71995Sopenharmony_ci env.add_implicit_layer(ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 14145db71995Sopenharmony_ci .set_name(implicit_layer_name) 14155db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2) 14165db71995Sopenharmony_ci .set_disable_environment("DISABLE_ME") 14175db71995Sopenharmony_ci .set_enable_environment("ENABLE_ME")), 14185db71995Sopenharmony_ci "implicit_test_layer.json"); 14195db71995Sopenharmony_ci env.loader_settings.add_app_specific_setting(AppSpecificSettings{}.add_stderr_log_filter("all").add_layer_configuration( 14205db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 14215db71995Sopenharmony_ci .set_name(implicit_layer_name) 14225db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path(0).str()) 14235db71995Sopenharmony_ci .set_treat_as_implicit_manifest(true))); 14245db71995Sopenharmony_ci 14255db71995Sopenharmony_ci // control is set to on 14265db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("on"); 14275db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 14285db71995Sopenharmony_ci { 14295db71995Sopenharmony_ci EnvVarWrapper enable_env_var{"ENABLE_ME"}; 14305db71995Sopenharmony_ci EnvVarWrapper disable_env_var{"DISABLE_ME"}; 14315db71995Sopenharmony_ci 14325db71995Sopenharmony_ci auto layers = env.GetLayerProperties(1); 14335db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); 14345db71995Sopenharmony_ci 14355db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, true); 14365db71995Sopenharmony_ci 14375db71995Sopenharmony_ci enable_env_var.set_new_value("0"); 14385db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, true); 14395db71995Sopenharmony_ci 14405db71995Sopenharmony_ci enable_env_var.set_new_value("1"); 14415db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, true); 14425db71995Sopenharmony_ci 14435db71995Sopenharmony_ci enable_env_var.remove_value(); 14445db71995Sopenharmony_ci 14455db71995Sopenharmony_ci disable_env_var.set_new_value("0"); 14465db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, true); 14475db71995Sopenharmony_ci 14485db71995Sopenharmony_ci disable_env_var.set_new_value("1"); 14495db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, true); 14505db71995Sopenharmony_ci 14515db71995Sopenharmony_ci enable_env_var.set_new_value("1"); 14525db71995Sopenharmony_ci disable_env_var.set_new_value("1"); 14535db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, true); 14545db71995Sopenharmony_ci } 14555db71995Sopenharmony_ci 14565db71995Sopenharmony_ci // control is set to off 14575db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("off"); 14585db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 14595db71995Sopenharmony_ci { 14605db71995Sopenharmony_ci EnvVarWrapper enable_env_var{"ENABLE_ME"}; 14615db71995Sopenharmony_ci EnvVarWrapper disable_env_var{"DISABLE_ME"}; 14625db71995Sopenharmony_ci 14635db71995Sopenharmony_ci ASSERT_NO_FATAL_FAILURE(env.GetLayerProperties(0)); 14645db71995Sopenharmony_ci 14655db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, false); 14665db71995Sopenharmony_ci 14675db71995Sopenharmony_ci enable_env_var.set_new_value("0"); 14685db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, false); 14695db71995Sopenharmony_ci 14705db71995Sopenharmony_ci enable_env_var.set_new_value("1"); 14715db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, false); 14725db71995Sopenharmony_ci 14735db71995Sopenharmony_ci enable_env_var.remove_value(); 14745db71995Sopenharmony_ci 14755db71995Sopenharmony_ci disable_env_var.set_new_value("0"); 14765db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, false); 14775db71995Sopenharmony_ci 14785db71995Sopenharmony_ci disable_env_var.set_new_value("1"); 14795db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, false); 14805db71995Sopenharmony_ci 14815db71995Sopenharmony_ci enable_env_var.set_new_value("1"); 14825db71995Sopenharmony_ci disable_env_var.set_new_value("1"); 14835db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, false); 14845db71995Sopenharmony_ci } 14855db71995Sopenharmony_ci 14865db71995Sopenharmony_ci // control is set to auto 14875db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).layer_configurations.at(0).set_control("auto"); 14885db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 14895db71995Sopenharmony_ci { 14905db71995Sopenharmony_ci EnvVarWrapper enable_env_var{"ENABLE_ME"}; 14915db71995Sopenharmony_ci EnvVarWrapper disable_env_var{"DISABLE_ME"}; 14925db71995Sopenharmony_ci 14935db71995Sopenharmony_ci auto layers = env.GetLayerProperties(1); 14945db71995Sopenharmony_ci ASSERT_TRUE(string_eq(layers[0].layerName, implicit_layer_name)); 14955db71995Sopenharmony_ci 14965db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, false); 14975db71995Sopenharmony_ci 14985db71995Sopenharmony_ci enable_env_var.set_new_value("0"); 14995db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, false); 15005db71995Sopenharmony_ci 15015db71995Sopenharmony_ci enable_env_var.set_new_value("1"); 15025db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, true); 15035db71995Sopenharmony_ci 15045db71995Sopenharmony_ci enable_env_var.remove_value(); 15055db71995Sopenharmony_ci 15065db71995Sopenharmony_ci disable_env_var.set_new_value("0"); 15075db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, false); 15085db71995Sopenharmony_ci 15095db71995Sopenharmony_ci disable_env_var.set_new_value("1"); 15105db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, false); 15115db71995Sopenharmony_ci 15125db71995Sopenharmony_ci enable_env_var.set_new_value("1"); 15135db71995Sopenharmony_ci disable_env_var.set_new_value("1"); 15145db71995Sopenharmony_ci check_log_for_insert_instance_layer_string(env, implicit_layer_name, false); 15155db71995Sopenharmony_ci } 15165db71995Sopenharmony_ci} 15175db71995Sopenharmony_ci 15185db71995Sopenharmony_ci// Settings can say which filters to use - make sure those are propagated & treated correctly 15195db71995Sopenharmony_ciTEST(SettingsFile, StderrLogFilters) { 15205db71995Sopenharmony_ci FrameworkEnvironment env{}; 15215db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 15225db71995Sopenharmony_ci const char* explicit_layer_name = "Regular_TestLayer1"; 15235db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ 15245db71995Sopenharmony_ci ManifestLayer{}.add_layer( 15255db71995Sopenharmony_ci ManifestLayer::LayerDescription{}.set_name(explicit_layer_name).set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 15265db71995Sopenharmony_ci "explicit_test_layer1.json"}); 15275db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 15285db71995Sopenharmony_ci AppSpecificSettings{} 15295db71995Sopenharmony_ci .add_layer_configuration(LoaderSettingsLayerConfiguration{} 15305db71995Sopenharmony_ci .set_name(explicit_layer_name) 15315db71995Sopenharmony_ci .set_path(env.get_shimmed_layer_manifest_path().str()) 15325db71995Sopenharmony_ci .set_control("on")) 15335db71995Sopenharmony_ci .add_layer_configuration( 15345db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{}.set_name("VK_LAYER_missing").set_path("/road/to/nowhere").set_control("on")))); 15355db71995Sopenharmony_ci 15365db71995Sopenharmony_ci std::string expected_output_verbose; 15375db71995Sopenharmony_ci expected_output_verbose += "Layer Configurations count = 2\n"; 15385db71995Sopenharmony_ci expected_output_verbose += "---- Layer Configuration [0] ----\n"; 15395db71995Sopenharmony_ci expected_output_verbose += std::string("Name: ") + explicit_layer_name + "\n"; 15405db71995Sopenharmony_ci expected_output_verbose += "Path: " + env.get_shimmed_layer_manifest_path().str() + "\n"; 15415db71995Sopenharmony_ci expected_output_verbose += "Control: on\n"; 15425db71995Sopenharmony_ci expected_output_verbose += "---- Layer Configuration [1] ----\n"; 15435db71995Sopenharmony_ci expected_output_verbose += "Name: VK_LAYER_missing\n"; 15445db71995Sopenharmony_ci expected_output_verbose += "Path: /road/to/nowhere\n"; 15455db71995Sopenharmony_ci expected_output_verbose += "Control: on\n"; 15465db71995Sopenharmony_ci expected_output_verbose += "---------------------------------\n"; 15475db71995Sopenharmony_ci 15485db71995Sopenharmony_ci std::string expected_output_info = get_settings_location_log_message(env) + "\n"; 15495db71995Sopenharmony_ci 15505db71995Sopenharmony_ci std::string expected_output_warning = 15515db71995Sopenharmony_ci "Layer name Regular_TestLayer1 does not conform to naming standard (Policy #LLP_LAYER_3)\n"; 15525db71995Sopenharmony_ci 15535db71995Sopenharmony_ci std::string expected_output_error = "loader_get_json: Failed to open JSON file /road/to/nowhere\n"; 15545db71995Sopenharmony_ci 15555db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).stderr_log = {"all"}; 15565db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 15575db71995Sopenharmony_ci { 15585db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 15595db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 15605db71995Sopenharmony_ci inst.CheckCreate(); 15615db71995Sopenharmony_ci 15625db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(expected_output_verbose)); 15635db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(expected_output_info)); 15645db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(expected_output_warning)); 15655db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(expected_output_error)); 15665db71995Sopenharmony_ci auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); 15675db71995Sopenharmony_ci EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); 15685db71995Sopenharmony_ci } 15695db71995Sopenharmony_ci env.debug_log.clear(); 15705db71995Sopenharmony_ci env.debug_log.create_info.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT; 15715db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).stderr_log = {"info"}; 15725db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 15735db71995Sopenharmony_ci { 15745db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 15755db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 15765db71995Sopenharmony_ci inst.CheckCreate(); 15775db71995Sopenharmony_ci 15785db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(expected_output_verbose)); 15795db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_info)); 15805db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_warning)); 15815db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_error)); 15825db71995Sopenharmony_ci auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); 15835db71995Sopenharmony_ci EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); 15845db71995Sopenharmony_ci } 15855db71995Sopenharmony_ci env.debug_log.clear(); 15865db71995Sopenharmony_ci env.debug_log.create_info.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; 15875db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).stderr_log = {"debug"}; 15885db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 15895db71995Sopenharmony_ci { 15905db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 15915db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 15925db71995Sopenharmony_ci inst.CheckCreate(); 15935db71995Sopenharmony_ci 15945db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_verbose)); 15955db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(expected_output_info)); 15965db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_warning)); 15975db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_error)); 15985db71995Sopenharmony_ci auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); 15995db71995Sopenharmony_ci EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); 16005db71995Sopenharmony_ci } 16015db71995Sopenharmony_ci env.debug_log.clear(); 16025db71995Sopenharmony_ci env.debug_log.create_info.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT; 16035db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).stderr_log = {"warn"}; 16045db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 16055db71995Sopenharmony_ci { 16065db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 16075db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 16085db71995Sopenharmony_ci inst.CheckCreate(); 16095db71995Sopenharmony_ci 16105db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_verbose)); 16115db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_info)); 16125db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(expected_output_warning)); 16135db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_error)); 16145db71995Sopenharmony_ci auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); 16155db71995Sopenharmony_ci EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); 16165db71995Sopenharmony_ci } 16175db71995Sopenharmony_ci env.debug_log.clear(); 16185db71995Sopenharmony_ci env.debug_log.create_info.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; 16195db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).stderr_log = {"error"}; 16205db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 16215db71995Sopenharmony_ci { 16225db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 16235db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 16245db71995Sopenharmony_ci inst.CheckCreate(); 16255db71995Sopenharmony_ci 16265db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_verbose)); 16275db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_info)); 16285db71995Sopenharmony_ci ASSERT_FALSE(env.debug_log.find(expected_output_warning)); 16295db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(expected_output_error)); 16305db71995Sopenharmony_ci auto active_layer_props = inst.GetActiveLayers(inst.GetPhysDev(), 1); 16315db71995Sopenharmony_ci EXPECT_TRUE(string_eq(active_layer_props.at(0).layerName, explicit_layer_name)); 16325db71995Sopenharmony_ci } 16335db71995Sopenharmony_ci} 16345db71995Sopenharmony_ci 16355db71995Sopenharmony_ci// Enough layers exist that arrays need to be resized - make sure that works 16365db71995Sopenharmony_ciTEST(SettingsFile, TooManyLayers) { 16375db71995Sopenharmony_ci FrameworkEnvironment env{}; 16385db71995Sopenharmony_ci env.add_icd(TestICDDetails(TEST_ICD_PATH_VERSION_2)).add_physical_device({}); 16395db71995Sopenharmony_ci env.loader_settings.set_file_format_version({1, 0, 0}).add_app_specific_setting( 16405db71995Sopenharmony_ci AppSpecificSettings{}.add_stderr_log_filter("all")); 16415db71995Sopenharmony_ci std::string layer_name = "VK_LAYER_regular_layer_name_"; 16425db71995Sopenharmony_ci uint32_t layer_count = 40; 16435db71995Sopenharmony_ci for (uint32_t i = 0; i < layer_count; i++) { 16445db71995Sopenharmony_ci env.add_explicit_layer(TestLayerDetails{ManifestLayer{}.add_layer(ManifestLayer::LayerDescription{} 16455db71995Sopenharmony_ci .set_name(layer_name + std::to_string(i)) 16465db71995Sopenharmony_ci .set_lib_path(TEST_LAYER_PATH_EXPORT_VERSION_2)), 16475db71995Sopenharmony_ci layer_name + std::to_string(i) + ".json"} 16485db71995Sopenharmony_ci .set_discovery_type(ManifestDiscoveryType::override_folder)); 16495db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).add_layer_configuration(LoaderSettingsLayerConfiguration{} 16505db71995Sopenharmony_ci .set_name(layer_name + std::to_string(i)) 16515db71995Sopenharmony_ci .set_path(env.get_layer_manifest_path(i).str()) 16525db71995Sopenharmony_ci .set_control("on")); 16535db71995Sopenharmony_ci } 16545db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 16555db71995Sopenharmony_ci 16565db71995Sopenharmony_ci { 16575db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(40); 16585db71995Sopenharmony_ci for (uint32_t i = 0; i < layer_count; i++) { 16595db71995Sopenharmony_ci std::string expected_layer_name = layer_name + std::to_string(i); 16605db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(i).layerName, expected_layer_name.c_str())); 16615db71995Sopenharmony_ci } 16625db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 16635db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 16645db71995Sopenharmony_ci inst.CheckCreate(); 16655db71995Sopenharmony_ci 16665db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 16675db71995Sopenharmony_ci env.debug_log.clear(); 16685db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 40); 16695db71995Sopenharmony_ci for (uint32_t i = 0; i < layer_count; i++) { 16705db71995Sopenharmony_ci std::string expected_layer_name = layer_name + std::to_string(i); 16715db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layers.at(i).layerName, expected_layer_name.c_str())); 16725db71995Sopenharmony_ci } 16735db71995Sopenharmony_ci } 16745db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).layer_configurations.clear(); 16755db71995Sopenharmony_ci 16765db71995Sopenharmony_ci // Now reverse the order to make sure adding the 'last' layer first works 16775db71995Sopenharmony_ci for (uint32_t i = 0; i < layer_count; i++) { 16785db71995Sopenharmony_ci env.loader_settings.app_specific_settings.at(0).add_layer_configuration( 16795db71995Sopenharmony_ci LoaderSettingsLayerConfiguration{} 16805db71995Sopenharmony_ci .set_name(layer_name + std::to_string(layer_count - i - 1)) 16815db71995Sopenharmony_ci .set_path(env.get_layer_manifest_path(layer_count - i - 1).str()) 16825db71995Sopenharmony_ci .set_control("on")); 16835db71995Sopenharmony_ci } 16845db71995Sopenharmony_ci env.update_loader_settings(env.loader_settings); 16855db71995Sopenharmony_ci 16865db71995Sopenharmony_ci { 16875db71995Sopenharmony_ci auto layer_props = env.GetLayerProperties(40); 16885db71995Sopenharmony_ci for (uint32_t i = 0; i < layer_count; i++) { 16895db71995Sopenharmony_ci std::string expected_layer_name = layer_name + std::to_string(layer_count - i - 1); 16905db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layer_props.at(i).layerName, expected_layer_name.c_str())); 16915db71995Sopenharmony_ci } 16925db71995Sopenharmony_ci InstWrapper inst{env.vulkan_functions}; 16935db71995Sopenharmony_ci FillDebugUtilsCreateDetails(inst.create_info, env.debug_log); 16945db71995Sopenharmony_ci inst.CheckCreate(); 16955db71995Sopenharmony_ci 16965db71995Sopenharmony_ci ASSERT_TRUE(env.debug_log.find(get_settings_location_log_message(env))); 16975db71995Sopenharmony_ci env.debug_log.clear(); 16985db71995Sopenharmony_ci auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 40); 16995db71995Sopenharmony_ci for (uint32_t i = 0; i < layer_count; i++) { 17005db71995Sopenharmony_ci std::string expected_layer_name = layer_name + std::to_string(layer_count - i - 1); 17015db71995Sopenharmony_ci EXPECT_TRUE(string_eq(layers.at(i).layerName, expected_layer_name.c_str())); 17025db71995Sopenharmony_ci } 17035db71995Sopenharmony_ci } 17045db71995Sopenharmony_ci} 1705