Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 23 additions & 21 deletions vkconfig_core/generate_layers_settings_env.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string>& stderr_log = ::GetLogTokens(configurator.loader_log_messages_flags);
const std::string stderr_logs = Merge(stderr_log, ",");
const std::vector<std::string>& 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<std::string> 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<std::string> 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) {
Expand Down
22 changes: 20 additions & 2 deletions vkconfig_core/generate_layers_settings_hpp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string> 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];
Expand Down Expand Up @@ -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<const char*> layers() {\n";
stream << "\t\tstd::vector<const char*> 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<vk::LayerSettingEXT> info() {\n";
stream << "\tstd::vector<vk::LayerSettingEXT> settings() {\n";
} else {
stream << "\tstd::vector<VkLayerSettingEXT> info() {\n";
stream << "\tstd::vector<VkLayerSettingEXT> settings() {\n";
}

for (std::size_t parameter_index = 0, parameter_count = configuration->parameters.size(); parameter_index < parameter_count;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
:: ==========================================
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
#! ==========================================
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,9 @@ private:

// `LayerSettings` allows initializing layer settings from Vulkan application code.
struct LayerSettings {
std::vector<std::string> layer_list {
"VK_LAYER_LUNARG_reference_1_2_1",
};
Reference121SettingData reference_1_2_1;

// Use for VkLayerSettingsCreateInfoEXT `settingCount` and `pSettings` argument
Expand All @@ -311,7 +314,15 @@ struct LayerSettings {
// const VkLayerSettingEXT* pSettings;
// } VkLayerSettingsCreateInfoEXT;

std::vector<VkLayerSettingEXT> info() {
std::vector<const char*> layers() {
std::vector<const char*> 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<VkLayerSettingEXT> settings() {
this->reference_1_2_1.init();

std::vector<VkLayerSettingEXT> init{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,9 @@ private:

// `LayerSettings` allows initializing layer settings from Vulkan application code.
struct LayerSettings {
std::vector<std::string> layer_list {
"VK_LAYER_LUNARG_reference_1_2_1",
};
Reference121SettingData reference_1_2_1;

// Use for VkLayerSettingsCreateInfoEXT `settingCount` and `pSettings` argument
Expand All @@ -311,7 +314,15 @@ struct LayerSettings {
// const VkLayerSettingEXT* pSettings;
// } VkLayerSettingsCreateInfoEXT;

std::vector<vk::LayerSettingEXT> info() {
std::vector<const char*> layers() {
std::vector<const char*> 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<vk::LayerSettingEXT> settings() {
this->reference_1_2_1.init();

std::vector<vk::LayerSettingEXT> init{
Expand Down
4 changes: 4 additions & 0 deletions vkconfig_core/test/generated/vk_layer_settings.bat
Original file line number Diff line number Diff line change
Expand Up @@ -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
:: ==========================================
Expand Down
4 changes: 4 additions & 0 deletions vkconfig_core/test/generated/vk_layer_settings.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
#! ==========================================
Expand Down
13 changes: 12 additions & 1 deletion vkconfig_core/test/generated/vulkan_hpp_layer_settings.code
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,9 @@ private:

// `LayerSettings` allows initializing layer settings from Vulkan application code.
struct LayerSettings {
std::vector<std::string> layer_list {
"VK_LAYER_LUNARG_reference_1_2_1",
};
Reference121SettingData reference_1_2_1;

// Use for VkLayerSettingsCreateInfoEXT `settingCount` and `pSettings` argument
Expand All @@ -311,7 +314,15 @@ struct LayerSettings {
// const VkLayerSettingEXT* pSettings;
// } VkLayerSettingsCreateInfoEXT;

std::vector<vk::LayerSettingEXT> info() {
std::vector<const char*> layers() {
std::vector<const char*> 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<vk::LayerSettingEXT> settings() {
this->reference_1_2_1.init();

std::vector<vk::LayerSettingEXT> init{
Expand Down
13 changes: 12 additions & 1 deletion vkconfig_core/test/generated/vulkan_layer_settings.code
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,9 @@ private:

// `LayerSettings` allows initializing layer settings from Vulkan application code.
struct LayerSettings {
std::vector<std::string> layer_list {
"VK_LAYER_LUNARG_reference_1_2_1",
};
Reference121SettingData reference_1_2_1;

// Use for VkLayerSettingsCreateInfoEXT `settingCount` and `pSettings` argument
Expand All @@ -311,7 +314,15 @@ struct LayerSettings {
// const VkLayerSettingEXT* pSettings;
// } VkLayerSettingsCreateInfoEXT;

std::vector<VkLayerSettingEXT> info() {
std::vector<const char*> layers() {
std::vector<const char*> 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<VkLayerSettingEXT> settings() {
this->reference_1_2_1.init();

std::vector<VkLayerSettingEXT> init{
Expand Down
9 changes: 9 additions & 0 deletions vkconfig_core/test/test_generate_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,15 @@ std::string Read(const Path& path) {
return data.toStdString();
}

TEST(test_settings, init) {
const std::vector<VkLayerSettingEXT>& settings = layer_settings.settings();
std::vector<const char*> layers = layer_settings.layers();

VkInstanceCreateInfo create_info;
create_info.enabledLayerCount = static_cast<uint32_t>(layers.size());
create_info.ppEnabledLayerNames = &layers[0];
}

TEST(test_settings, config_generate_html) {
const std::string path(std::string(CMAKE_CURRENT_SOURCE_DIR) + "/tmp");

Expand Down
1 change: 1 addition & 0 deletions vkconfig_gui/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading