@@ -41,25 +41,40 @@ std::string get_settings_location_log_message([[maybe_unused]] FrameworkEnvironm
4141 return s + " /home/fake_home/.local/share/vulkan/loader_settings.d/vk_loader_settings.json" ;
4242#endif
4343}
44-
45- const char * add_layer_and_settings (FrameworkEnvironment& env, const char * layer_name, bool implicit_layer, const char * control) {
46- if (implicit_layer) {
47- env.add_implicit_layer (ManifestLayer{}.add_layer (ManifestLayer::LayerDescription{}
48- .set_name (layer_name)
49- .set_lib_path (TEST_LAYER_PATH_EXPORT_VERSION_2)
50- .set_disable_environment (" BADGER" )),
51- std::string (layer_name) + std::to_string (env.layers .size ()) + " .json" );
52- } else {
44+ enum class LayerType {
45+ exp,
46+ imp,
47+ imp_with_enable_env,
48+ };
49+ const char * add_layer_and_settings (FrameworkEnvironment& env, const char * layer_name, LayerType layer_type, const char * control) {
50+ if (layer_type == LayerType::imp) {
51+ env.add_implicit_layer (
52+ ManifestLayer{}.add_layer (ManifestLayer::LayerDescription{}
53+ .set_name (layer_name)
54+ .set_lib_path (TEST_LAYER_PATH_EXPORT_VERSION_2)
55+ .set_disable_environment (" BADGER" + std::to_string (env.layers .size ()))),
56+ std::string (layer_name) + std::to_string (env.layers .size ()) + " .json" );
57+ } else if (layer_type == LayerType::imp_with_enable_env) {
58+ env.add_implicit_layer (
59+ ManifestLayer{}.add_layer (ManifestLayer::LayerDescription{}
60+ .set_name (layer_name)
61+ .set_lib_path (TEST_LAYER_PATH_EXPORT_VERSION_2)
62+ .set_disable_environment (" BADGER" + std::to_string (env.layers .size ()))
63+ .set_enable_environment (" MUSHROOM" + std::to_string (env.layers .size ()))),
64+ std::string (layer_name) + std::to_string (env.layers .size ()) + " .json" );
65+ } else if (layer_type == LayerType::exp) {
5366 env.add_explicit_layer (TestLayerDetails{
5467 ManifestLayer{}.add_layer (
5568 ManifestLayer::LayerDescription{}.set_name (layer_name).set_lib_path (TEST_LAYER_PATH_EXPORT_VERSION_2)),
5669 std::string (layer_name) + std::to_string (env.layers .size ()) + " .json" });
70+ } else {
71+ abort ();
5772 }
5873 env.loader_settings .app_specific_settings .back ().add_layer_configuration (
5974 LoaderSettingsLayerConfiguration{}
6075 .set_name (layer_name)
6176 .set_control (control)
62- .set_treat_as_implicit_manifest (implicit_layer )
77+ .set_treat_as_implicit_manifest (layer_type != LayerType::exp )
6378 .set_path (env.get_shimmed_layer_manifest_path (env.layers .size () - 1 )));
6479 return layer_name;
6580}
@@ -69,7 +84,7 @@ TEST(SettingsFile, FileExist) {
6984 FrameworkEnvironment env{};
7085 env.add_icd (TestICDDetails (TEST_ICD_PATH_VERSION_2)).add_physical_device ({});
7186 env.loader_settings .add_app_specific_setting (AppSpecificSettings{}.add_stderr_log_filter (" all" ));
72- const char * regular_layer_name = add_layer_and_settings (env, " VK_LAYER_TestLayer_0" , false , " on" );
87+ const char * regular_layer_name = add_layer_and_settings (env, " VK_LAYER_TestLayer_0" , LayerType::exp , " on" );
7388 env.update_loader_settings (env.loader_settings );
7489 {
7590 auto layer_props = env.GetLayerProperties (1 );
@@ -453,7 +468,6 @@ TEST(SettingsFile, ApplicationEnablesIgnored) {
453468 {
454469 ASSERT_NO_FATAL_FAILURE (env.GetLayerProperties (0 ));
455470 InstWrapper inst{env.vulkan_functions };
456- FillDebugUtilsCreateDetails (inst.create_info , env.debug_log );
457471 inst.create_info .add_layer (explicit_layer_name);
458472 ASSERT_NO_FATAL_FAILURE (inst.CheckCreate (VK_ERROR_LAYER_NOT_PRESENT));
459473 }
@@ -1480,7 +1494,6 @@ TEST(SettingsFile, EnvVarsWork_VK_INSTANCE_LAYERS) {
14801494 ASSERT_TRUE (string_eq (layer_props.at (1 ).layerName , explicit_layer_name));
14811495
14821496 InstWrapper inst{env.vulkan_functions };
1483- FillDebugUtilsCreateDetails (inst.create_info , env.debug_log );
14841497 inst.CheckCreate ();
14851498 auto layers = inst.GetActiveLayers (inst.GetPhysDev (), 1 );
14861499 ASSERT_TRUE (string_eq (layers.at (0 ).layerName , explicit_layer_name));
@@ -1572,7 +1585,6 @@ TEST(SettingsFile, EnvVarsWork_VK_INSTANCE_LAYERS_multiple_layers) {
15721585 ASSERT_TRUE (string_eq (layer_props.at (1 ).layerName , explicit_layer_name3));
15731586
15741587 InstWrapper inst{env.vulkan_functions };
1575- FillDebugUtilsCreateDetails (inst.create_info , env.debug_log );
15761588 inst.CheckCreate ();
15771589 auto layers = inst.GetActiveLayers (inst.GetPhysDev (), 1 );
15781590 ASSERT_TRUE (string_eq (layers.at (0 ).layerName , explicit_layer_name1));
@@ -1600,7 +1612,6 @@ TEST(SettingsFile, EnvVarsWork_VK_INSTANCE_LAYERS_multiple_layers) {
16001612 ASSERT_TRUE (string_eq (layer_props.at (1 ).layerName , explicit_layer_name3));
16011613
16021614 InstWrapper inst{env.vulkan_functions };
1603- FillDebugUtilsCreateDetails (inst.create_info , env.debug_log );
16041615 inst.CheckCreate ();
16051616 auto layers = inst.GetActiveLayers (inst.GetPhysDev (), 1 );
16061617 ASSERT_TRUE (string_eq (layers.at (0 ).layerName , explicit_layer_name2));
@@ -1613,7 +1624,6 @@ TEST(SettingsFile, EnvVarsWork_VK_INSTANCE_LAYERS_multiple_layers) {
16131624 ASSERT_TRUE (string_eq (layer_props.at (1 ).layerName , explicit_layer_name3));
16141625
16151626 InstWrapper inst{env.vulkan_functions };
1616- FillDebugUtilsCreateDetails (inst.create_info , env.debug_log );
16171627 inst.CheckCreate ();
16181628 auto layers = inst.GetActiveLayers (inst.GetPhysDev (), 1 );
16191629 ASSERT_TRUE (string_eq (layers.at (0 ).layerName , explicit_layer_name2));
@@ -1627,7 +1637,6 @@ TEST(SettingsFile, EnvVarsWork_VK_INSTANCE_LAYERS_multiple_layers) {
16271637 ASSERT_TRUE (string_eq (layer_props.at (2 ).layerName , explicit_layer_name3));
16281638
16291639 InstWrapper inst{env.vulkan_functions };
1630- FillDebugUtilsCreateDetails (inst.create_info , env.debug_log );
16311640 inst.CheckCreate ();
16321641 auto layers = inst.GetActiveLayers (inst.GetPhysDev (), 2 );
16331642 ASSERT_TRUE (string_eq (layers.at (0 ).layerName , explicit_layer_name1));
@@ -1641,7 +1650,7 @@ TEST(SettingsFile, EnvVarsWork_VK_LOADER_LAYERS_ENABLE) {
16411650 env.add_icd (TestICDDetails (TEST_ICD_PATH_VERSION_2)).add_physical_device ({});
16421651
16431652 env.loader_settings .add_app_specific_setting (AppSpecificSettings{}.add_stderr_log_filter (" all" ));
1644- const char * explicit_layer_name = add_layer_and_settings (env, " VK_LAYER_Regular_TestLayer1" , false , " off" );
1653+ const char * explicit_layer_name = add_layer_and_settings (env, " VK_LAYER_Regular_TestLayer1" , LayerType::exp , " off" );
16451654 env.update_loader_settings (env.loader_settings );
16461655
16471656 EnvVarWrapper vk_instance_layers{" VK_LOADER_LAYERS_ENABLE" , explicit_layer_name};
@@ -1659,20 +1668,20 @@ TEST(SettingsFile, settings_disable_layer_enabled_by_env_vars) {
16591668 env.add_icd (TestICDDetails (TEST_ICD_PATH_VERSION_2)).add_physical_device ({});
16601669 env.loader_settings .add_app_specific_setting (AppSpecificSettings{}.add_stderr_log_filter (" all" ));
16611670 std::vector<const char *> layer_names;
1662- layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_alpha" , true , " auto" ));
1663- layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_bravo" , true , " auto" ));
1664- layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_charlie" , true , " auto" ));
1671+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_alpha" , LayerType::imp , " auto" ));
1672+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_bravo" , LayerType::imp , " auto" ));
1673+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_charlie" , LayerType::imp , " auto" ));
16651674 env.loader_settings .app_specific_settings .back ().add_layer_configuration (
16661675 LoaderSettingsLayerConfiguration{}.set_control (" unordered_layer_location" ));
1667- layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_delta" , false , " auto" ));
1668- layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_echo" , false , " auto" ));
1669- layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_foxtrot" , false , " auto" ));
1670- layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_gamma" , false , " auto" ));
1671- layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_indigo" , false , " auto" ));
1672- auto disable_layer_name = add_layer_and_settings (env, " VK_LAYER_juniper" , false , " off" );
1673- layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_kangaroo" , false , " on" ));
1674- layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_lima" , false , " auto" ));
1675- layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_mango" , false , " auto" ));
1676+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_delta" , LayerType::exp , " auto" ));
1677+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_echo" , LayerType::exp , " auto" ));
1678+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_foxtrot" , LayerType::exp , " auto" ));
1679+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_gamma" , LayerType::exp , " auto" ));
1680+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_indigo" , LayerType::exp , " auto" ));
1681+ auto disable_layer_name = add_layer_and_settings (env, " VK_LAYER_juniper" , LayerType::exp , " off" );
1682+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_kangaroo" , LayerType::exp , " on" ));
1683+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_lima" , LayerType::exp , " auto" ));
1684+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_mango" , LayerType::exp , " auto" ));
16761685
16771686 env.update_loader_settings (env.loader_settings );
16781687 {
@@ -1682,7 +1691,6 @@ TEST(SettingsFile, settings_disable_layer_enabled_by_env_vars) {
16821691 ASSERT_TRUE (string_eq (layer_names.at (i), layer_props.at (i).layerName ));
16831692 }
16841693 InstWrapper inst{env.vulkan_functions };
1685- FillDebugUtilsCreateDetails (inst.create_info , env.debug_log );
16861694 inst.CheckCreate ();
16871695 auto layers = inst.GetActiveLayers (inst.GetPhysDev (), 4 );
16881696 ASSERT_TRUE (string_eq (layer_names.at (0 ), layers.at (0 ).layerName ));
@@ -1697,7 +1705,6 @@ TEST(SettingsFile, settings_disable_layer_enabled_by_env_vars) {
16971705 ASSERT_TRUE (string_eq (layer_names.at (i), layer_props.at (i).layerName ));
16981706 }
16991707 InstWrapper inst{env.vulkan_functions };
1700- FillDebugUtilsCreateDetails (inst.create_info , env.debug_log );
17011708 inst.CheckCreate ();
17021709 auto layers = inst.GetActiveLayers (inst.GetPhysDev (), 4 );
17031710 ASSERT_TRUE (string_eq (layer_names.at (0 ), layers.at (0 ).layerName ));
@@ -1712,7 +1719,6 @@ TEST(SettingsFile, settings_disable_layer_enabled_by_env_vars) {
17121719 }
17131720 InstWrapper inst{env.vulkan_functions };
17141721 inst.create_info .add_layer (disable_layer_name);
1715- FillDebugUtilsCreateDetails (inst.create_info , env.debug_log );
17161722 inst.CheckCreate (VK_ERROR_LAYER_NOT_PRESENT);
17171723 }
17181724}
@@ -2076,6 +2082,67 @@ TEST(SettingsFile, ImplicitLayerDisableEnvironmentVariableOverriden) {
20762082 }
20772083}
20782084
2085+ TEST (SettingsFile, ImplicitLayersNotAccidentallyEnabled) {
2086+ FrameworkEnvironment env{};
2087+ env.add_icd (TestICDDetails (TEST_ICD_PATH_VERSION_2)).add_physical_device ({});
2088+ env.loader_settings .add_app_specific_setting (AppSpecificSettings{}.add_stderr_log_filter (" all" ));
2089+ std::vector<const char *> layer_names;
2090+
2091+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_alpha" , LayerType::imp, " auto" ));
2092+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_bravo" , LayerType::imp_with_enable_env, " auto" ));
2093+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_charlie" , LayerType::imp_with_enable_env, " auto" ));
2094+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_delta" , LayerType::imp_with_enable_env, " auto" ));
2095+
2096+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_echo" , LayerType::exp, " auto" ));
2097+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_foxtrot" , LayerType::exp, " auto" ));
2098+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_gamma" , LayerType::exp, " auto" ));
2099+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_indigo" , LayerType::exp, " auto" ));
2100+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_juniper" , LayerType::exp, " auto" ));
2101+
2102+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_kangaroo" , LayerType::exp, " on" ));
2103+
2104+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_lima" , LayerType::exp, " auto" ));
2105+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_mango" , LayerType::exp, " auto" ));
2106+ layer_names.push_back (add_layer_and_settings (env, " VK_LAYER_niagara" , LayerType::exp, " auto" ));
2107+
2108+ env.update_loader_settings (env.loader_settings );
2109+ {
2110+ auto layer_props = env.GetLayerProperties (13 );
2111+ for (size_t i = 0 ; i < layer_props.size (); i++) {
2112+ ASSERT_TRUE (string_eq (layer_names.at (i), layer_props.at (i).layerName ));
2113+ }
2114+ InstWrapper inst{env.vulkan_functions };
2115+ inst.CheckCreate ();
2116+ auto layers = inst.GetActiveLayers (inst.GetPhysDev (), 2 );
2117+ ASSERT_TRUE (string_eq (layers.at (0 ).layerName , layer_names.at (0 )));
2118+ ASSERT_TRUE (string_eq (layers.at (1 ).layerName , layer_names.at (9 )));
2119+ }
2120+
2121+ {
2122+ EnvVarWrapper env_var{" MUSHROOM1" , " 1" };
2123+ auto layer_props = env.GetLayerProperties (13 );
2124+ for (size_t i = 0 ; i < layer_props.size (); i++) {
2125+ ASSERT_TRUE (string_eq (layer_names.at (i), layer_props.at (i).layerName ));
2126+ }
2127+ InstWrapper inst{env.vulkan_functions };
2128+ inst.CheckCreate ();
2129+ auto layers = inst.GetActiveLayers (inst.GetPhysDev (), 3 );
2130+ ASSERT_TRUE (string_eq (layers.at (0 ).layerName , layer_names.at (0 )));
2131+ ASSERT_TRUE (string_eq (layers.at (1 ).layerName , layer_names.at (1 )));
2132+ ASSERT_TRUE (string_eq (layers.at (2 ).layerName , layer_names.at (9 )));
2133+ }
2134+ {
2135+ EnvVarWrapper env_var{" BADGER0" , " 1" };
2136+ auto layer_props = env.GetLayerProperties (13 );
2137+ for (size_t i = 0 ; i < layer_props.size (); i++) {
2138+ ASSERT_TRUE (string_eq (layer_names.at (i), layer_props.at (i).layerName ));
2139+ }
2140+ InstWrapper inst{env.vulkan_functions };
2141+ inst.CheckCreate ();
2142+ auto layers = inst.GetActiveLayers (inst.GetPhysDev (), 1 );
2143+ ASSERT_TRUE (string_eq (layers.at (0 ).layerName , layer_names.at (9 )));
2144+ }
2145+ }
20792146// Settings can say which filters to use - make sure those are propagated & treated correctly
20802147TEST (SettingsFile, StderrLogFilters) {
20812148 FrameworkEnvironment env{FrameworkSettings{}.set_log_filter (" " )};
@@ -2444,7 +2511,6 @@ TEST(SettingsFile, ManyLayersEnabledInManyWays) {
24442511 ASSERT_TRUE (string_eq (layers[4 ].layerName , layer5));
24452512
24462513 InstWrapper inst{env.vulkan_functions };
2447- FillDebugUtilsCreateDetails (inst.create_info , env.debug_log );
24482514 inst.CheckCreate ();
24492515
24502516 auto active_layer_props = inst.GetActiveLayers (inst.GetPhysDev (), 3 );
0 commit comments