@@ -2143,6 +2143,220 @@ TEST(SettingsFile, ImplicitLayersNotAccidentallyEnabled) {
21432143 ASSERT_TRUE (string_eq (layers.at (0 ).layerName , layer_names.at (9 )));
21442144 }
21452145}
2146+
2147+ TEST (SettingsFile, ImplicitLayersPreInstanceEnumInstLayerProps) {
2148+ FrameworkEnvironment env;
2149+ env.add_icd (TestICDDetails (TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
2150+ const char * implicit_layer_name = " VK_LAYER_ImplicitTestLayer" ;
2151+
2152+ env.add_implicit_layer (
2153+ ManifestLayer{}.set_file_format_version ({1 , 1 , 2 }).add_layer (
2154+ ManifestLayer::LayerDescription{}
2155+ .set_name (implicit_layer_name)
2156+ .set_lib_path (TEST_LAYER_PATH_EXPORT_VERSION_2)
2157+ .set_disable_environment (" DISABLE_ME" )
2158+ .add_pre_instance_function (ManifestLayer::LayerDescription::FunctionOverride{}
2159+ .set_vk_func (" vkEnumerateInstanceLayerProperties" )
2160+ .set_override_name (" test_preinst_vkEnumerateInstanceLayerProperties" ))),
2161+ " implicit_test_layer.json" );
2162+
2163+ env.update_loader_settings (
2164+ env.loader_settings .add_app_specific_setting (AppSpecificSettings{}.add_stderr_log_filter (" all" ).add_layer_configuration (
2165+ LoaderSettingsLayerConfiguration{}
2166+ .set_name (implicit_layer_name)
2167+ .set_path (env.get_shimmed_layer_manifest_path (0 ))
2168+ .set_control (" auto" )
2169+ .set_treat_as_implicit_manifest (true ))));
2170+
2171+ uint32_t layer_props = 43 ;
2172+ auto & layer = env.get_test_layer (0 );
2173+ layer.set_reported_layer_props (layer_props);
2174+
2175+ uint32_t count = 0 ;
2176+ ASSERT_EQ (VK_SUCCESS, env.vulkan_functions .vkEnumerateInstanceLayerProperties (&count, nullptr ));
2177+ ASSERT_EQ (count, layer_props);
2178+ }
2179+
2180+ TEST (SettingsFile, EnableEnvironmentImplicitLayersPreInstanceEnumInstLayerProps) {
2181+ FrameworkEnvironment env;
2182+ env.add_icd (TestICDDetails (TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
2183+ const char * implicit_layer_name = " VK_LAYER_ImplicitTestLayer" ;
2184+
2185+ env.add_implicit_layer (
2186+ ManifestLayer{}.set_file_format_version ({1 , 1 , 2 }).add_layer (
2187+ ManifestLayer::LayerDescription{}
2188+ .set_name (implicit_layer_name)
2189+ .set_lib_path (TEST_LAYER_PATH_EXPORT_VERSION_2)
2190+ .set_disable_environment (" DISABLE_ME" )
2191+ .set_enable_environment (" ENABLE_ME" )
2192+ .add_pre_instance_function (ManifestLayer::LayerDescription::FunctionOverride{}
2193+ .set_vk_func (" vkEnumerateInstanceLayerProperties" )
2194+ .set_override_name (" test_preinst_vkEnumerateInstanceLayerProperties" ))),
2195+ " implicit_test_layer.json" );
2196+
2197+ env.update_loader_settings (
2198+ env.loader_settings .add_app_specific_setting (AppSpecificSettings{}.add_stderr_log_filter (" all" ).add_layer_configuration (
2199+ LoaderSettingsLayerConfiguration{}
2200+ .set_name (implicit_layer_name)
2201+ .set_path (env.get_shimmed_layer_manifest_path (0 ))
2202+ .set_control (" auto" )
2203+ .set_treat_as_implicit_manifest (true ))));
2204+
2205+ uint32_t layer_props = 43 ;
2206+ auto & layer = env.get_test_layer (0 );
2207+ layer.set_reported_layer_props (layer_props);
2208+
2209+ uint32_t count = 0 ;
2210+ ASSERT_EQ (VK_SUCCESS, env.vulkan_functions .vkEnumerateInstanceLayerProperties (&count, nullptr ));
2211+ ASSERT_EQ (count, 1U );
2212+ std::array<VkLayerProperties, 1 > layers{};
2213+ ASSERT_EQ (VK_SUCCESS, env.vulkan_functions .vkEnumerateInstanceLayerProperties (&count, layers.data ()));
2214+ ASSERT_EQ (count, 1U );
2215+ ASSERT_TRUE (string_eq (layers.at (0 ).layerName , implicit_layer_name));
2216+ }
2217+
2218+ TEST (SettingsFile, ImplicitLayersPreInstanceEnumInstExtProps) {
2219+ FrameworkEnvironment env;
2220+ env.add_icd (TestICDDetails (TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
2221+ const char * implicit_layer_name = " VK_LAYER_ImplicitTestLayer" ;
2222+
2223+ env.add_implicit_layer (
2224+ ManifestLayer{}.set_file_format_version ({1 , 1 , 2 }).add_layer (
2225+ ManifestLayer::LayerDescription{}
2226+ .set_name (implicit_layer_name)
2227+ .set_lib_path (TEST_LAYER_PATH_EXPORT_VERSION_2)
2228+ .set_disable_environment (" DISABLE_ME" )
2229+ .add_pre_instance_function (ManifestLayer::LayerDescription::FunctionOverride{}
2230+ .set_vk_func (" vkEnumerateInstanceExtensionProperties" )
2231+ .set_override_name (" test_preinst_vkEnumerateInstanceExtensionProperties" ))),
2232+ " implicit_test_layer.json" );
2233+
2234+ env.update_loader_settings (
2235+ env.loader_settings .add_app_specific_setting (AppSpecificSettings{}.add_stderr_log_filter (" all" ).add_layer_configuration (
2236+ LoaderSettingsLayerConfiguration{}
2237+ .set_name (implicit_layer_name)
2238+ .set_path (env.get_shimmed_layer_manifest_path (0 ))
2239+ .set_control (" auto" )
2240+ .set_treat_as_implicit_manifest (true ))));
2241+
2242+ uint32_t ext_props = 52 ;
2243+ auto & layer = env.get_test_layer (0 );
2244+ layer.set_reported_extension_props (ext_props);
2245+
2246+ uint32_t count = 0 ;
2247+ ASSERT_EQ (VK_SUCCESS, env.vulkan_functions .vkEnumerateInstanceExtensionProperties (nullptr , &count, nullptr ));
2248+ ASSERT_EQ (count, ext_props);
2249+ }
2250+
2251+ TEST (SettingsFile, EnableEnvironmentImplicitLayersPreInstanceEnumInstExtProps) {
2252+ FrameworkEnvironment env;
2253+ env.add_icd (TestICDDetails (TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA));
2254+ const char * implicit_layer_name = " VK_LAYER_ImplicitTestLayer" ;
2255+
2256+ env.add_implicit_layer (
2257+ ManifestLayer{}.set_file_format_version ({1 , 1 , 2 }).add_layer (
2258+ ManifestLayer::LayerDescription{}
2259+ .set_name (implicit_layer_name)
2260+ .set_lib_path (TEST_LAYER_PATH_EXPORT_VERSION_2)
2261+ .set_disable_environment (" DISABLE_ME" )
2262+ .set_enable_environment (" ENABLE_ME" )
2263+ .add_pre_instance_function (ManifestLayer::LayerDescription::FunctionOverride{}
2264+ .set_vk_func (" vkEnumerateInstanceExtensionProperties" )
2265+ .set_override_name (" test_preinst_vkEnumerateInstanceExtensionProperties" ))),
2266+ " implicit_test_layer.json" );
2267+
2268+ env.update_loader_settings (
2269+ env.loader_settings .add_app_specific_setting (AppSpecificSettings{}.add_stderr_log_filter (" all" ).add_layer_configuration (
2270+ LoaderSettingsLayerConfiguration{}
2271+ .set_name (implicit_layer_name)
2272+ .set_path (env.get_shimmed_layer_manifest_path (0 ))
2273+ .set_control (" auto" )
2274+ .set_treat_as_implicit_manifest (true ))));
2275+
2276+ uint32_t ext_props = 52 ;
2277+ auto & layer = env.get_test_layer (0 );
2278+ layer.set_reported_extension_props (ext_props);
2279+
2280+ auto extensions = env.GetInstanceExtensions (4 );
2281+ EXPECT_TRUE (string_eq (extensions.at (0 ).extensionName , VK_EXT_DEBUG_REPORT_EXTENSION_NAME));
2282+ EXPECT_TRUE (string_eq (extensions.at (1 ).extensionName , VK_EXT_DEBUG_UTILS_EXTENSION_NAME));
2283+ EXPECT_TRUE (string_eq (extensions.at (2 ).extensionName , VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME));
2284+ EXPECT_TRUE (string_eq (extensions.at (3 ).extensionName , VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME));
2285+ }
2286+
2287+ TEST (SettingsFile, ImplicitLayersPreInstanceVersion) {
2288+ FrameworkEnvironment env;
2289+ env.add_icd (TestICDDetails (TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA))
2290+ .add_physical_device ({})
2291+ .set_icd_api_version (VK_MAKE_API_VERSION (0 , 1 , 2 , 3 ));
2292+
2293+ const char * implicit_layer_name = " VK_LAYER_ImplicitTestLayer" ;
2294+
2295+ env.add_implicit_layer (ManifestLayer{}.set_file_format_version ({1 , 1 , 2 }).add_layer (
2296+ ManifestLayer::LayerDescription{}
2297+ .set_name (implicit_layer_name)
2298+ .set_lib_path (TEST_LAYER_PATH_EXPORT_VERSION_2)
2299+ .set_api_version (VK_MAKE_API_VERSION (0 , 1 , 2 , 3 ))
2300+ .set_disable_environment (" DISABLE_ME" )
2301+ .add_pre_instance_function (ManifestLayer::LayerDescription::FunctionOverride{}
2302+ .set_vk_func (" vkEnumerateInstanceVersion" )
2303+ .set_override_name (" test_preinst_vkEnumerateInstanceVersion" ))),
2304+ " implicit_test_layer.json" );
2305+
2306+ env.update_loader_settings (
2307+ env.loader_settings .add_app_specific_setting (AppSpecificSettings{}.add_stderr_log_filter (" all" ).add_layer_configuration (
2308+ LoaderSettingsLayerConfiguration{}
2309+ .set_name (implicit_layer_name)
2310+ .set_path (env.get_shimmed_layer_manifest_path (0 ))
2311+ .set_control (" auto" )
2312+ .set_treat_as_implicit_manifest (true ))));
2313+
2314+ uint32_t layer_version = VK_MAKE_API_VERSION (1 , 2 , 3 , 4 );
2315+ auto & layer = env.get_test_layer (0 );
2316+ layer.set_reported_instance_version (layer_version);
2317+
2318+ uint32_t version = 0 ;
2319+ ASSERT_EQ (VK_SUCCESS, env.vulkan_functions .vkEnumerateInstanceVersion (&version));
2320+ ASSERT_EQ (version, layer_version);
2321+ }
2322+
2323+ TEST (SettingsFile, EnableEnvironmentImplicitLayersPreInstanceVersion) {
2324+ FrameworkEnvironment env;
2325+ env.add_icd (TestICDDetails (TEST_ICD_PATH_VERSION_2_EXPORT_ICD_GPDPA))
2326+ .add_physical_device ({})
2327+ .set_icd_api_version (VK_MAKE_API_VERSION (0 , 1 , 2 , 3 ));
2328+
2329+ const char * implicit_layer_name = " VK_LAYER_ImplicitTestLayer" ;
2330+
2331+ env.add_implicit_layer (ManifestLayer{}.set_file_format_version ({1 , 1 , 2 }).add_layer (
2332+ ManifestLayer::LayerDescription{}
2333+ .set_name (implicit_layer_name)
2334+ .set_lib_path (TEST_LAYER_PATH_EXPORT_VERSION_2)
2335+ .set_api_version (VK_MAKE_API_VERSION (0 , 1 , 2 , 3 ))
2336+ .set_disable_environment (" DISABLE_ME" )
2337+ .set_enable_environment (" ENABLE_ME" )
2338+ .add_pre_instance_function (ManifestLayer::LayerDescription::FunctionOverride{}
2339+ .set_vk_func (" vkEnumerateInstanceVersion" )
2340+ .set_override_name (" test_preinst_vkEnumerateInstanceVersion" ))),
2341+ " implicit_test_layer.json" );
2342+
2343+ env.update_loader_settings (
2344+ env.loader_settings .add_app_specific_setting (AppSpecificSettings{}.add_stderr_log_filter (" all" ).add_layer_configuration (
2345+ LoaderSettingsLayerConfiguration{}
2346+ .set_name (implicit_layer_name)
2347+ .set_path (env.get_shimmed_layer_manifest_path (0 ))
2348+ .set_control (" auto" )
2349+ .set_treat_as_implicit_manifest (true ))));
2350+
2351+ uint32_t layer_version = VK_MAKE_API_VERSION (1 , 2 , 3 , 4 );
2352+ auto & layer = env.get_test_layer (0 );
2353+ layer.set_reported_instance_version (layer_version);
2354+
2355+ uint32_t version = 0 ;
2356+ ASSERT_EQ (VK_SUCCESS, env.vulkan_functions .vkEnumerateInstanceVersion (&version));
2357+ ASSERT_EQ (version, VK_HEADER_VERSION_COMPLETE);
2358+ }
2359+
21462360// Settings can say which filters to use - make sure those are propagated & treated correctly
21472361TEST (SettingsFile, StderrLogFilters) {
21482362 FrameworkEnvironment env{FrameworkSettings{}.set_log_filter (" " )};
0 commit comments