Skip to content

Commit 63dcb0a

Browse files
Log when Filter Env-Vars act when settings file is active
The logging to indicate that VK_LOADER_LAYERS_ENABLE and VK_LOADER_LAYERS_DISABLE turned on/off layers was not occuring when the settings file was active. This is due to layer enablement being done in `enable_correct_layers_from_settings()`, a newer function. which lacked the log functions. This commit rectifies the lack of logging in the new function.
1 parent 73ea419 commit 63dcb0a

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

loader/settings.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,11 @@ VkResult enable_correct_layers_from_settings(const struct loader_instance* inst,
767767
bool enable_layer = false;
768768
struct loader_layer_properties* props = &instance_layers->list[i];
769769

770+
// Skip the sentinel unordered layer location
771+
if (props->settings_control_value == LOADER_SETTINGS_LAYER_UNORDERED_LAYER_LOCATION) {
772+
continue;
773+
}
774+
770775
// Do not enable the layer if the settings have it set as off
771776
if (props->settings_control_value == LOADER_SETTINGS_LAYER_CONTROL_OFF) {
772777
continue;
@@ -780,13 +785,20 @@ VkResult enable_correct_layers_from_settings(const struct loader_instance* inst,
780785
if ((filters->disable_filter.disable_all || filters->disable_filter.disable_all_implicit ||
781786
check_name_matches_filter_environment_var(props->info.layerName, &filters->disable_filter.additional_filters)) &&
782787
!check_name_matches_filter_environment_var(props->info.layerName, &filters->allow_filter)) {
788+
// Report a message that we've forced off a layer if it would have been enabled normally.
789+
loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0,
790+
"Layer \"%s\" forced disabled because name matches filter of env var \'%s\'.", props->info.layerName,
791+
VK_LAYERS_DISABLE_ENV_VAR);
792+
783793
continue;
784794
}
785795
}
786796
// Check the enable filter
787797
if (!enable_layer && check_name_matches_filter_environment_var(props->info.layerName, &filters->enable_filter)) {
788798
enable_layer = true;
789799
props->enabled_by_what = ENABLED_BY_WHAT_VK_LOADER_LAYERS_ENABLE;
800+
loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0,
801+
"Layer \"%s\" forced enabled due to env var \'%s\'.", props->info.layerName, VK_LAYERS_ENABLE_ENV_VAR);
790802
}
791803

792804
// First look for the old-fashion layers forced on with VK_INSTANCE_LAYERS

tests/loader_settings_tests.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2910,7 +2910,10 @@ TEST(SettingsFile, EnvVarsWorkTogether) {
29102910
EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer));
29112911
EXPECT_TRUE(string_eq(layers.at(2).layerName, regular_explicit_layer_settings_file_set_on));
29122912
EXPECT_TRUE(string_eq(layers.at(3).layerName, env_var_implicit_layer));
2913+
EXPECT_TRUE(env.platform_shim->find_in_log(
2914+
"env var 'VK_INSTANCE_LAYERS' defined and adding layers: VK_LAYER_regular_explicit_layer"));
29132915
}
2916+
env.platform_shim->clear_logs();
29142917
{ // VK_LOADER_LAYERS_ENABLE
29152918
EnvVarWrapper env_var_enable{"VK_LOADER_LAYERS_ENABLE", regular_explicit_layer};
29162919
InstWrapper inst{env.vulkan_functions};
@@ -2920,14 +2923,22 @@ TEST(SettingsFile, EnvVarsWorkTogether) {
29202923
EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer));
29212924
EXPECT_TRUE(string_eq(layers.at(2).layerName, regular_explicit_layer_settings_file_set_on));
29222925
EXPECT_TRUE(string_eq(layers.at(3).layerName, env_var_implicit_layer));
2926+
EXPECT_TRUE(env.platform_shim->find_in_log(
2927+
"Layer \"VK_LAYER_regular_explicit_layer\" forced enabled due to env var 'VK_LOADER_LAYERS_ENABLE'"));
29232928
}
2929+
env.platform_shim->clear_logs();
29242930
{ // VK_LOADER_LAYERS_DISABLE
29252931
EnvVarWrapper env_var_disable{"VK_LOADER_LAYERS_DISABLE", "~all~"}; // ignored by settings file
29262932
InstWrapper inst{env.vulkan_functions};
29272933
inst.CheckCreate();
29282934
auto layers = inst.GetActiveLayers(inst.GetPhysDev(), 1);
29292935
EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_explicit_layer_settings_file_set_on));
2936+
EXPECT_TRUE(
2937+
env.platform_shim->find_in_log("Layer \"VK_LAYER_env_var_implicit_layer\" forced disabled because name matches filter "
2938+
"of env var 'VK_LOADER_LAYERS_DISABLE'"));
29302939
}
2940+
env.platform_shim->clear_logs();
2941+
29312942
{ // VK_LOADER_LAYERS_ALLOW
29322943
EnvVarWrapper env_var_allow{"VK_LOADER_LAYERS_ALLOW", regular_implicit_layer};
29332944
// Allow only makes sense when the disable env-var is also set
@@ -2939,7 +2950,13 @@ TEST(SettingsFile, EnvVarsWorkTogether) {
29392950
// The regular_implicit_layer is set to "auto" so is affected by environment variables
29402951
EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_implicit_layer));
29412952
EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer_settings_file_set_on));
2953+
2954+
EXPECT_TRUE(
2955+
env.platform_shim->find_in_log("Layer \"VK_LAYER_env_var_implicit_layer\" forced disabled because name matches filter "
2956+
"of env var 'VK_LOADER_LAYERS_DISABLE'"));
29422957
}
2958+
env.platform_shim->clear_logs();
2959+
29432960
{ // VK_LAYER_PATH
29442961
// VK_LAYER_PATH is set by add_explicit_layer()
29452962
InstWrapper inst{env.vulkan_functions};
@@ -2950,7 +2967,9 @@ TEST(SettingsFile, EnvVarsWorkTogether) {
29502967
EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer_settings_file_set_on));
29512968
EXPECT_TRUE(string_eq(layers.at(2).layerName, env_var_implicit_layer));
29522969
EXPECT_TRUE(string_eq(layers.at(3).layerName, env_var_explicit_layer));
2970+
EXPECT_TRUE(env.platform_shim->find_in_log("Insert instance layer \"VK_LAYER_env_var_explicit_layer\""));
29532971
}
2972+
env.platform_shim->clear_logs();
29542973
{ // VK_IMPLICIT_LAYER_PATH
29552974
// VK_IMPLICIT_LAYER_PATH is set by add_implicit_layer()
29562975
InstWrapper inst{env.vulkan_functions};
@@ -2959,7 +2978,9 @@ TEST(SettingsFile, EnvVarsWorkTogether) {
29592978
EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_implicit_layer));
29602979
EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer_settings_file_set_on));
29612980
EXPECT_TRUE(string_eq(layers.at(2).layerName, env_var_implicit_layer));
2981+
EXPECT_TRUE(env.platform_shim->find_in_log("Insert instance layer \"VK_LAYER_env_var_implicit_layer\""));
29622982
}
2983+
env.platform_shim->clear_logs();
29632984
{ // VK_ADD_LAYER_PATH
29642985
// VK_ADD_LAYER_PATH is set by add_explicit_layer(), but we need to disable VK_LAYER_PATH
29652986
// since VK_LAYER_PATH overrides VK_ADD_LAYER_PATH
@@ -2973,7 +2994,9 @@ TEST(SettingsFile, EnvVarsWorkTogether) {
29732994
EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer_settings_file_set_on));
29742995
EXPECT_TRUE(string_eq(layers.at(2).layerName, env_var_implicit_layer));
29752996
EXPECT_TRUE(string_eq(layers.at(3).layerName, add_env_var_explicit_layer));
2997+
EXPECT_TRUE(env.platform_shim->find_in_log("Insert instance layer \"VK_LAYER_add_env_var_explicit_layer\""));
29762998
}
2999+
env.platform_shim->clear_logs();
29773000
{ // VK_ADD_IMPLICIT_LAYER_PATH
29783001
// VK_ADD_IMPLICIT_LAYER_PATH is set by add_explicit_layer(), but we need to disable VK_LAYER_PATH
29793002
// since VK_IMPLICIT_LAYER_PATH overrides VK_ADD_IMPLICIT_LAYER_PATH
@@ -2985,5 +3008,6 @@ TEST(SettingsFile, EnvVarsWorkTogether) {
29853008
EXPECT_TRUE(string_eq(layers.at(0).layerName, regular_implicit_layer));
29863009
EXPECT_TRUE(string_eq(layers.at(1).layerName, regular_explicit_layer_settings_file_set_on));
29873010
EXPECT_TRUE(string_eq(layers.at(2).layerName, add_env_var_implicit_layer));
3011+
EXPECT_TRUE(env.platform_shim->find_in_log("Insert instance layer \"VK_LAYER_add_env_var_implicit_layer\""));
29883012
}
29893013
}

0 commit comments

Comments
 (0)