@@ -30,7 +30,6 @@ static bool g_instance_func_ptrs_inited = false;
3030static std::mutex g_vk_func_ptr_init_mutex;
3131static Anvil::LibraryUniquePtr g_vk_library_ptr;
3232
33-
3433/* * Please see header for specification */
3534Anvil::Instance::Instance (Anvil::InstanceCreateInfoUniquePtr in_create_info_ptr)
3635 :MTSafetySupportProvider(in_create_info_ptr->is_mt_safe () ),
@@ -415,6 +414,7 @@ bool Anvil::Instance::init()
415414 uint32_t api_version_to_use = 0 ;
416415 std::vector<const char *> enabled_extensions_raw;
417416 std::vector<const char *> enabled_layers;
417+ std::vector<VkLayerSettingEXT> layerSettings;
418418 std::map<std::string, bool > extension_enabled_status;
419419 bool is_device_group_creation_supported = true ;
420420 size_t n_instance_layers = 0 ;
@@ -430,6 +430,21 @@ bool Anvil::Instance::init()
430430 goto end;
431431 }
432432
433+ enabled_layers.reserve (m_create_info_ptr->get_layers ().size ());
434+ for (const auto &layer : m_create_info_ptr->get_layers ())
435+ enabled_layers.push_back (layer.c_str ());
436+
437+ layerSettings.reserve (m_create_info_ptr->get_layer_settings ().size ());
438+ for (const auto &setting : m_create_info_ptr->get_layer_settings ()) {
439+ VkLayerSettingEXT vkSetting;
440+ vkSetting.pLayerName = setting.pLayerName ;
441+ vkSetting.pSettingName = setting.pSettingName ;
442+ vkSetting.valueCount = setting.valueCount ;
443+ vkSetting.type = static_cast <VkLayerSettingTypeEXT>(setting.type );
444+ vkSetting.pValues = setting.pValues ;
445+ layerSettings.push_back (vkSetting);
446+ }
447+
433448 /* Enumerate available layers */
434449 enumerate_instance_layers ();
435450
@@ -668,11 +683,13 @@ bool Anvil::Instance::init()
668683 app_info.pNext = nullptr ;
669684 app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
670685
686+ const VkLayerSettingsCreateInfoEXT layer_settings_create_info {VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT, nullptr , layerSettings.size (), layerSettings.data ()};
687+
671688 create_info.enabledExtensionCount = static_cast <uint32_t >(enabled_extensions_raw.size () );
672689 create_info.enabledLayerCount = static_cast <uint32_t >(enabled_layers.size () );
673690 create_info.flags = 0 ;
674691 create_info.pApplicationInfo = &app_info;
675- create_info.pNext = nullptr ;
692+ create_info.pNext = &layer_settings_create_info ;
676693 create_info.ppEnabledExtensionNames = (enabled_extensions_raw.size () > 0 ) ? &enabled_extensions_raw.at (0 ) : nullptr ;
677694 create_info.ppEnabledLayerNames = (enabled_layers.size () > 0 ) ? &enabled_layers.at (0 ) : nullptr ;
678695 create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
0 commit comments