diff --git a/vkconfig_core/generate_layers_settings_env.cpp b/vkconfig_core/generate_layers_settings_env.cpp index 1f8f26ca9e..2400fcb829 100644 --- a/vkconfig_core/generate_layers_settings_env.cpp +++ b/vkconfig_core/generate_layers_settings_env.cpp @@ -52,35 +52,37 @@ bool GenerateSettingsEnv(Configurator& configurator, ExportEnvMode mode, const P stream << COMMENT << "\n"; stream << COMMENT << format("This code was generated by Vulkan Configurator %s\n\n", Version::VKCONFIG.str().c_str()).c_str(); - /* - stream << COMMENT << "Loader Settings:\n"; + stream << COMMENT << "Loader Settings:\n"; - const std::vector& stderr_log = ::GetLogTokens(configurator.loader_log_messages_flags); - const std::string stderr_logs = Merge(stderr_log, ","); + const std::vector& stderr_log = ::GetLogTokens(configurator.loader_log_messages_flags); + const std::string stderr_logs = Merge(stderr_log, ","); + /* if (configurator.loader_log_enabled) { + stream << COMMENT << "Vulkan Loader enabled and ordered:\n"; stream << EXPORT << "VK_LOADER_DEBUG=" << stderr_logs.c_str() << "\n"; } - - { - stream << EXPORT << "VK_INSTANCE_LAYERS="; - std::vector layer_list; - for (std::size_t i = 0, n = configuration->parameters.size(); i < n; ++i) { - const Parameter& parameter = configuration->parameters[i]; - if (parameter.builtin == LAYER_BUILTIN_UNORDERED) { - continue; - } - if (parameter.control != LAYER_CONTROL_ON) { - continue; - } - layer_list.push_back(parameter.key); + */ + // if (configurator.layers_override_enabled) + { + stream << COMMENT << "Vulkan Layers enabled and ordered:\n"; + stream << EXPORT << "VK_INSTANCE_LAYERS="; + std::vector layer_list; + for (std::size_t i = 0, n = configuration->parameters.size(); i < n; ++i) { + const Parameter& parameter = configuration->parameters[i]; + if (parameter.builtin == LAYER_BUILTIN_UNORDERED) { + continue; } - stream << Merge(layer_list, ",").c_str(); - stream << "\n"; + if (parameter.control != LAYER_CONTROL_ON) { + continue; + } + layer_list.push_back(parameter.key); } - + stream << Merge(layer_list, ",").c_str(); stream << "\n"; - */ + } + + stream << "\n"; // Loop through all the layers for (std::size_t j = 0, n = configuration->parameters.size(); j < n; ++j) { diff --git a/vkconfig_core/generate_layers_settings_hpp.cpp b/vkconfig_core/generate_layers_settings_hpp.cpp index 97538d8f3e..6e8dc8af52 100644 --- a/vkconfig_core/generate_layers_settings_hpp.cpp +++ b/vkconfig_core/generate_layers_settings_hpp.cpp @@ -278,6 +278,16 @@ bool GenerateSettingsCode(Configurator& configurator, ExportHppMode mode, const stream << "// `LayerSettings` allows initializing layer settings from Vulkan application code.\n"; stream << "struct LayerSettings {\n"; + stream << "\tstd::vector layer_list {\n"; + for (std::size_t parameter_index = 0, parameter_count = configuration->parameters.size(); parameter_index < parameter_count; + ++parameter_index) { + const Parameter& parameter = configuration->parameters[parameter_index]; + if (parameter.control == LAYER_CONTROL_ON && parameter.builtin == LAYER_BUILTIN_NONE) { + stream << format("\t\t\"%s\",\n", parameter.key.c_str()).c_str(); + } + } + stream << "\t};\n"; + for (std::size_t parameter_index = 0, parameter_count = configuration->parameters.size(); parameter_index < parameter_count; ++parameter_index) { const Parameter& parameter = configuration->parameters[parameter_index]; @@ -315,10 +325,18 @@ bool GenerateSettingsCode(Configurator& configurator, ExportHppMode mode, const stream << "\t// \tconst VkLayerSettingEXT* pSettings;\n"; stream << "\t// } VkLayerSettingsCreateInfoEXT;\n\n"; + stream << "\tstd::vector layers() {\n"; + stream << "\t\tstd::vector results;\n"; + stream << "\t\tfor (std::size_t i = 0, n = layer_list.size(); i < n; ++i) {\n"; + stream << "\t\t\tresults.push_back(layer_list[i].c_str());\n"; + stream << "\t\t};\n"; + stream << "\t\treturn results;\n"; + stream << "\t};\n\n"; + if (mode == EXPORT_HPP_VULKAN_HPP) { - stream << "\tstd::vector info() {\n"; + stream << "\tstd::vector settings() {\n"; } else { - stream << "\tstd::vector info() {\n"; + stream << "\tstd::vector settings() {\n"; } for (std::size_t parameter_index = 0, parameter_count = configuration->parameters.size(); parameter_index < parameter_count; diff --git a/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.bat b/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.bat index af20db3d03..4d712525eb 100644 --- a/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.bat +++ b/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.bat @@ -15,6 +15,10 @@ :: :: This code was generated by Vulkan Configurator 3.5.0 +:: Loader Settings: +:: Vulkan Layers enabled and ordered: +set VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_reference_1_2_1 + :: reference layer :: ========================================== diff --git a/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.sh b/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.sh index a724062d59..1e6faa28c2 100644 --- a/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.sh +++ b/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.sh @@ -15,6 +15,10 @@ #! #! This code was generated by Vulkan Configurator 3.5.0 +#! Loader Settings: +#! Vulkan Layers enabled and ordered: +export VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_reference_1_2_1 + #! reference layer #! ========================================== diff --git a/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.vulkan_h_code b/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.vulkan_h_code index 9bb12fc903..8bd3de26b0 100644 --- a/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.vulkan_h_code +++ b/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.vulkan_h_code @@ -300,6 +300,9 @@ private: // `LayerSettings` allows initializing layer settings from Vulkan application code. struct LayerSettings { + std::vector layer_list { + "VK_LAYER_LUNARG_reference_1_2_1", + }; Reference121SettingData reference_1_2_1; // Use for VkLayerSettingsCreateInfoEXT `settingCount` and `pSettings` argument @@ -311,7 +314,15 @@ struct LayerSettings { // const VkLayerSettingEXT* pSettings; // } VkLayerSettingsCreateInfoEXT; - std::vector info() { + std::vector layers() { + std::vector results; + for (std::size_t i = 0, n = layer_list.size(); i < n; ++i) { + results.push_back(layer_list[i].c_str()); + }; + return results; + }; + + std::vector settings() { this->reference_1_2_1.init(); std::vector init{ diff --git a/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.vulkan_hpp_code b/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.vulkan_hpp_code index f7ef21cc06..f75475ff92 100644 --- a/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.vulkan_hpp_code +++ b/vkconfig_core/test/generated/VK_LAYER_LUNARG_reference_1_2_1.vulkan_hpp_code @@ -300,6 +300,9 @@ private: // `LayerSettings` allows initializing layer settings from Vulkan application code. struct LayerSettings { + std::vector layer_list { + "VK_LAYER_LUNARG_reference_1_2_1", + }; Reference121SettingData reference_1_2_1; // Use for VkLayerSettingsCreateInfoEXT `settingCount` and `pSettings` argument @@ -311,7 +314,15 @@ struct LayerSettings { // const VkLayerSettingEXT* pSettings; // } VkLayerSettingsCreateInfoEXT; - std::vector info() { + std::vector layers() { + std::vector results; + for (std::size_t i = 0, n = layer_list.size(); i < n; ++i) { + results.push_back(layer_list[i].c_str()); + }; + return results; + }; + + std::vector settings() { this->reference_1_2_1.init(); std::vector init{ diff --git a/vkconfig_core/test/generated/vk_layer_settings.bat b/vkconfig_core/test/generated/vk_layer_settings.bat index af20db3d03..4d712525eb 100644 --- a/vkconfig_core/test/generated/vk_layer_settings.bat +++ b/vkconfig_core/test/generated/vk_layer_settings.bat @@ -15,6 +15,10 @@ :: :: This code was generated by Vulkan Configurator 3.5.0 +:: Loader Settings: +:: Vulkan Layers enabled and ordered: +set VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_reference_1_2_1 + :: reference layer :: ========================================== diff --git a/vkconfig_core/test/generated/vk_layer_settings.sh b/vkconfig_core/test/generated/vk_layer_settings.sh index a724062d59..1e6faa28c2 100644 --- a/vkconfig_core/test/generated/vk_layer_settings.sh +++ b/vkconfig_core/test/generated/vk_layer_settings.sh @@ -15,6 +15,10 @@ #! #! This code was generated by Vulkan Configurator 3.5.0 +#! Loader Settings: +#! Vulkan Layers enabled and ordered: +export VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_reference_1_2_1 + #! reference layer #! ========================================== diff --git a/vkconfig_core/test/generated/vulkan_hpp_layer_settings.code b/vkconfig_core/test/generated/vulkan_hpp_layer_settings.code index f7ef21cc06..f75475ff92 100644 --- a/vkconfig_core/test/generated/vulkan_hpp_layer_settings.code +++ b/vkconfig_core/test/generated/vulkan_hpp_layer_settings.code @@ -300,6 +300,9 @@ private: // `LayerSettings` allows initializing layer settings from Vulkan application code. struct LayerSettings { + std::vector layer_list { + "VK_LAYER_LUNARG_reference_1_2_1", + }; Reference121SettingData reference_1_2_1; // Use for VkLayerSettingsCreateInfoEXT `settingCount` and `pSettings` argument @@ -311,7 +314,15 @@ struct LayerSettings { // const VkLayerSettingEXT* pSettings; // } VkLayerSettingsCreateInfoEXT; - std::vector info() { + std::vector layers() { + std::vector results; + for (std::size_t i = 0, n = layer_list.size(); i < n; ++i) { + results.push_back(layer_list[i].c_str()); + }; + return results; + }; + + std::vector settings() { this->reference_1_2_1.init(); std::vector init{ diff --git a/vkconfig_core/test/generated/vulkan_layer_settings.code b/vkconfig_core/test/generated/vulkan_layer_settings.code index 9bb12fc903..8bd3de26b0 100644 --- a/vkconfig_core/test/generated/vulkan_layer_settings.code +++ b/vkconfig_core/test/generated/vulkan_layer_settings.code @@ -300,6 +300,9 @@ private: // `LayerSettings` allows initializing layer settings from Vulkan application code. struct LayerSettings { + std::vector layer_list { + "VK_LAYER_LUNARG_reference_1_2_1", + }; Reference121SettingData reference_1_2_1; // Use for VkLayerSettingsCreateInfoEXT `settingCount` and `pSettings` argument @@ -311,7 +314,15 @@ struct LayerSettings { // const VkLayerSettingEXT* pSettings; // } VkLayerSettingsCreateInfoEXT; - std::vector info() { + std::vector layers() { + std::vector results; + for (std::size_t i = 0, n = layer_list.size(); i < n; ++i) { + results.push_back(layer_list[i].c_str()); + }; + return results; + }; + + std::vector settings() { this->reference_1_2_1.init(); std::vector init{ diff --git a/vkconfig_core/test/test_generate_settings.cpp b/vkconfig_core/test/test_generate_settings.cpp index 559ac5a72c..ecfbc9f4e2 100644 --- a/vkconfig_core/test/test_generate_settings.cpp +++ b/vkconfig_core/test/test_generate_settings.cpp @@ -57,6 +57,15 @@ std::string Read(const Path& path) { return data.toStdString(); } +TEST(test_settings, init) { + const std::vector& settings = layer_settings.settings(); + std::vector layers = layer_settings.layers(); + + VkInstanceCreateInfo create_info; + create_info.enabledLayerCount = static_cast(layers.size()); + create_info.ppEnabledLayerNames = &layers[0]; +} + TEST(test_settings, config_generate_html) { const std::string path(std::string(CMAKE_CURRENT_SOURCE_DIR) + "/tmp"); diff --git a/vkconfig_gui/CHANGELOG.md b/vkconfig_gui/CHANGELOG.md index 06acf843e4..b5d3306919 100644 --- a/vkconfig_gui/CHANGELOG.md +++ b/vkconfig_gui/CHANGELOG.md @@ -22,6 +22,7 @@ - Move 'Validate Layer Manifest' settings to the preference tab - Improve keyboard shortcuts - Add layer display option to show only explicit layers #2636 +- Add enabled and ordered layers to generated configuration files #2634 #2565 ### Fixes: - Fix command line whitespace decoding #2625