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
15 changes: 11 additions & 4 deletions vkconfig_core/command_line.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -762,7 +762,7 @@ void CommandLine::usage() const {
printf("\tGenerate layer settings files either for system configuration or documentation of a layers configuration.\n");
printf("\n");
printf("Arguments\n");
printf("\t`[--generate (html | markdown | txt | bash | bat | hpp)]`\n");
printf("\t`[--generate (html | markdown | txt | bash | bat | hpp | hxx)]`\n");
printf("\t\tSpecify the layer settings generation mode, the default value is 'txt':\n");
printf(
"\t\t- 'html' to generate the HTML layer settings documentation, the default filename is "
Expand All @@ -779,7 +779,12 @@ void CommandLine::usage() const {
printf(
"\t\t- 'bat' to generate the environment variables layer settings script for 'command prompt', the default "
"filename is 'vk_layer_settings.bat'\n");
printf("\t\t- 'hpp' to generate the C++ layer settings helper code, the default filename is 'vk_layer_settings.hpp'\n");
printf(
"\t\t- 'hpp' to generate the C++ layer settings helper code using 'vulkan.h', the default filename is "
"'vk_layer_settings.hpp'\n");
printf(
"\t\t- 'hxx' to generate the C++ layer settings helper code using 'vulkan.hpp', the default filename is "
"'vk_layer_settings.hpp'\n");
printf("\t (Run 'vkconfig layers --list' to enumerate the available layers.)\n");
printf("\n");
printf("\t`[--configuration [<configuration_index> | <configuration_name> | default]]`\n");
Expand All @@ -803,7 +808,8 @@ void CommandLine::usage() const {
printf("\t\t- If the 'generate' is set to 'txt', the default filename is 'vk_layer_settings.txt'\n");
printf("\t\t- If the 'generate' is set to 'bash', the default filename is 'vk_layer_settings.sh'\n");
printf("\t\t- If the 'generate' is set to 'bat', the default filename is 'vk_layer_settings.bat'\n");
printf("\t\t- If the 'generate' is set to 'hpp', the default filename is 'vk_layer_settings.hpp'\n");
printf("\t\t- If the 'generate' is set to 'hpp', the default filename is 'vulkan_layer_settings.hpp'\n");
printf("\t\t- If the 'generate' is set to 'hxx', the default filename is 'vulkan_hpp_layer_settings.hpp'\n");
printf("\n");
printf("\t`[(--output | -o) <output_file>]`\n");
printf("\t\tSpecify the output file path. If <output_dir> is set, then <output_file> must be the filename only.\n");
Expand All @@ -812,7 +818,8 @@ void CommandLine::usage() const {
printf("\t\t- If the 'generate' is set to 'txt', the default filename is 'vk_layer_settings.txt'\n");
printf("\t\t- If the 'generate' is set to 'bash', the default filename is 'vk_layer_settings.sh'\n");
printf("\t\t- If the 'generate' is set to 'bat', the default filename is 'vk_layer_settings.bat'\n");
printf("\t\t- If the 'generate' is set to 'hpp', the default filename is 'vk_layer_settings.hpp'\n");
printf("\t\t- If the 'generate' is set to 'hpp', the default filename is 'vulkan_layer_settings.hpp'\n");
printf("\t\t- If the 'generate' is set to 'hxx', the default filename is 'vulkan_hpp_layer_settings.hpp'\n");
printf("\n");
printf("\t`[--dry-run]`\n");
printf("\t\tRun without affecting the system and Vulkan Configurator files.\n");
Expand Down
7 changes: 5 additions & 2 deletions vkconfig_core/configurator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -395,8 +395,11 @@ bool Configurator::Generate(GenerateSettingsMode mode, const Path& output_path)
case GENERATE_SETTINGS_CMD: {
result = ::GenerateSettingsEnv(*this, EXPORT_ENV_CMD, output_path);
} break;
case GENERATE_SETTINGS_HPP: {
result = ::GenerateSettingsCode(*this, output_path);
case GENERATE_SETTINGS_HPP_VULKAN_H: {
result = ::GenerateSettingsCode(*this, EXPORT_HPP_VULKAN_H, output_path);
} break;
case GENERATE_SETTINGS_HPP_VULKAN_HPP: {
result = ::GenerateSettingsCode(*this, EXPORT_HPP_VULKAN_HPP, output_path);
} break;
}

Expand Down
1 change: 1 addition & 0 deletions vkconfig_core/configurator.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ enum EnabledUI {
};

enum ExportEnvMode { EXPORT_ENV_BASH = 0, EXPORT_ENV_CMD };
enum ExportHppMode { EXPORT_HPP_VULKAN_H = 0, EXPORT_HPP_VULKAN_HPP };

struct LayersSettings {
std::string configuration_name;
Expand Down
64 changes: 43 additions & 21 deletions vkconfig_core/generate_layers_settings_hpp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

#include <QTextStream>

bool GenerateSettingsCode(Configurator& configurator, const Path& export_path) {
bool GenerateSettingsCode(Configurator& configurator, ExportHppMode mode, const Path& export_path) {
QFile file(export_path.AbsolutePath().c_str());

const bool result_layers_file = file.open(QIODevice::WriteOnly | QIODevice::Text);
Expand Down Expand Up @@ -60,7 +60,11 @@ bool GenerateSettingsCode(Configurator& configurator, const Path& export_path) {
stream << "#include <vector>\n";
stream << "#include <string>\n";
stream << "\n";
stream << "#include <vulkan/vulkan.h>\n";
if (mode == EXPORT_HPP_VULKAN_HPP) {
stream << "#include <vulkan/vulkan.hpp>\n";
} else {
stream << "#include <vulkan/vulkan.h>\n";
}
stream << "\n";
stream << "struct LayerSettings;\n";
stream << "\n";
Expand Down Expand Up @@ -241,25 +245,31 @@ bool GenerateSettingsCode(Configurator& configurator, const Path& export_path) {
for (std::size_t setting_index = 0, setting_count = parameter.settings.size(); setting_index < setting_count;
++setting_index) {
SettingData* setting = parameter.settings[setting_index];
if (setting->type != SETTING_LIST && setting->type != SETTING_FLAGS) {
if (IsInfoStringArrayRequired(setting->type)) {
stream << format("\tstd::vector<const char*> %s_info;\n", setting->key.c_str()).c_str();
continue;
} else if (IsInfoStringRequired(setting->type)) {
stream << format("\tconst char* %s_info = nullptr;\n", setting->key.c_str()).c_str();
continue;
}

stream << format("\tstd::vector<const char*> %s_info;\n", setting->key.c_str()).c_str();
}

stream << "\n";
stream << "\tvoid init() {\n";
for (std::size_t setting_index = 0, setting_count = parameter.settings.size(); setting_index < setting_count;
++setting_index) {
SettingData* setting = parameter.settings[setting_index];
if (setting->type != SETTING_LIST && setting->type != SETTING_FLAGS) {
if (IsInfoStringArrayRequired(setting->type)) {
stream
<< format("\t\tthis->%s_info.resize(this->%s.size());\n", setting->key.c_str(), setting->key.c_str()).c_str();
stream << format("\t\tfor (std::size_t i = 0, n = %s_info.size(); i < n; ++i) {\n", setting->key.c_str()).c_str();
stream << format("\t\t\tthis->%s_info[i] = this->%s[i].c_str();\n", setting->key.c_str(), setting->key.c_str())
.c_str();
stream << "\t\t}\n";
continue;
} else if (IsInfoStringRequired(setting->type)) {
stream << format("\t\tthis->%s_info = this->%s.c_str();\n", setting->key.c_str(), setting->key.c_str()).c_str();
}

stream << format("\t\tthis->%s_info.resize(this->%s.size());\n", setting->key.c_str(), setting->key.c_str()).c_str();
stream << format("\t\tfor (std::size_t i = 0, n = %s_info.size(); i < n; ++i) {\n", setting->key.c_str()).c_str();
stream << format("\t\t\tthis->%s_info[i] = this->%s[i].c_str();\n", setting->key.c_str(), setting->key.c_str()).c_str();
stream << "\t\t}\n";
}
stream << "\t}\n";

Expand Down Expand Up @@ -303,8 +313,14 @@ bool GenerateSettingsCode(Configurator& configurator, const Path& export_path) {
stream << "\t// \tconst void* pNext;\n";
stream << "\t// \tuint32_t settingCount;\n";
stream << "\t// \tconst VkLayerSettingEXT* pSettings;\n";
stream << "\t// } VkLayerSettingsCreateInfoEXT;\n";
stream << "\tstd::vector<VkLayerSettingEXT> info() {\n";
stream << "\t// } VkLayerSettingsCreateInfoEXT;\n\n";

if (mode == EXPORT_HPP_VULKAN_HPP) {
stream << "\tstd::vector<vk::LayerSettingEXT> info() {\n";
} else {
stream << "\tstd::vector<VkLayerSettingEXT> info() {\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 @@ -333,7 +349,11 @@ bool GenerateSettingsCode(Configurator& configurator, const Path& export_path) {
}

stream << "\n";
stream << "\t\tstd::vector<VkLayerSettingEXT> init{\n";
if (mode == EXPORT_HPP_VULKAN_HPP) {
stream << "\t\tstd::vector<vk::LayerSettingEXT> init{\n";
} else {
stream << "\t\tstd::vector<VkLayerSettingEXT> init{\n";
}

for (std::size_t parameter_index = 0, parameter_count = configuration->parameters.size(); parameter_index < parameter_count;
++parameter_index) {
Expand Down Expand Up @@ -366,22 +386,24 @@ bool GenerateSettingsCode(Configurator& configurator, const Path& export_path) {
continue;
}

std::string layer_settings_type = mode == EXPORT_HPP_VULKAN_HPP ? ::GetLayerSettingTypeHPPString(setting->type)
: ::GetLayerSettingTypeString(setting->type);
if (IsArray(setting->type)) {
stream << format(
"\t\t\t{\"%s\", \"%s\", %s, static_cast<uint32_t>(this->%s.%s_info.size()), &this->%s.%s_info[0]},\n",
parameter.key.c_str(), setting->key.c_str(), ::GetLayerSettingTypeString(setting->type),
"\t\t\t{\"%s\", \"%s\", %s, static_cast<uint32_t>(this->%s.%s_info.size()), this->%s.%s_info.empty() "
"? nullptr : &this->%s.%s_info[0]},\n",
parameter.key.c_str(), setting->key.c_str(), layer_settings_type.c_str(),
::GetCodeData(parameter.key).c_str(), setting->key.c_str(), ::GetCodeData(parameter.key).c_str(),
setting->key.c_str())
setting->key.c_str(), ::GetCodeData(parameter.key).c_str(), setting->key.c_str())
.c_str();
} else if (IsString(setting->type)) {
stream << format("\t\t\t{\"%s\", \"%s\", %s, 1, this->%s.%s.c_str()},\n", parameter.key.c_str(),
setting->key.c_str(), ::GetLayerSettingTypeString(setting->type),
::GetCodeData(parameter.key).c_str(), setting->key.c_str())
setting->key.c_str(), layer_settings_type.c_str(), ::GetCodeData(parameter.key).c_str(),
setting->key.c_str())
.c_str();
} else {
stream << format("\t\t\t{\"%s\", \"%s\", %s, 1, &this->%s.%s},\n", parameter.key.c_str(), setting->key.c_str(),
::GetLayerSettingTypeString(setting->type), ::GetCodeData(parameter.key).c_str(),
setting->key.c_str())
layer_settings_type.c_str(), ::GetCodeData(parameter.key).c_str(), setting->key.c_str())
.c_str();
}
}
Expand Down
2 changes: 1 addition & 1 deletion vkconfig_core/generate_layers_settings_hpp.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@

#include "configurator.h"

bool GenerateSettingsCode(Configurator& configurator, const Path& export_path);
bool GenerateSettingsCode(Configurator& configurator, ExportHppMode mode, const Path& export_path);
28 changes: 26 additions & 2 deletions vkconfig_core/setting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ const char* GetLayerSettingTypeString(SettingType type) {

static const char* table[] = {
"VK_LAYER_SETTING_TYPE_STRING_EXT", // SETTING_STRING
"VK_LAYER_SETTING_TYPE_INT32_EXT", // SETTING_INT
"VK_LAYER_SETTING_TYPE_INT64_EXT", // SETTING_INT
"VK_LAYER_SETTING_TYPE_FLOAT32_EXT", // SETTING_FLOAT
"N/A", // SETTING_GROUP
"VK_LAYER_SETTING_TYPE_STRING_EXT", // SETTING_SAVE_FILE
Expand All @@ -96,12 +96,36 @@ const char* GetLayerSettingTypeString(SettingType type) {
return table[type];
}

const char* GetLayerSettingTypeHPPString(SettingType type) {
assert(type >= SETTING_FIRST && type <= SETTING_LAST);

static const char* table[] = {
"vk::LayerSettingTypeEXT::eString", // SETTING_STRING
"vk::LayerSettingTypeEXT::eInt64", // SETTING_INT
"vk::LayerSettingTypeEXT::eFloat32", // SETTING_FLOAT
"N/A", // SETTING_GROUP
"vk::LayerSettingTypeEXT::eString", // SETTING_SAVE_FILE
"vk::LayerSettingTypeEXT::eString", // SETTING_LOAD_FILE
"vk::LayerSettingTypeEXT::eString", // SETTING_SAVE_FOLDER
"vk::LayerSettingTypeEXT::eString", // SETTING_LOAD_FOLDER
"vk::LayerSettingTypeEXT::eBool32", // SETTING_BOOL
"vk::LayerSettingTypeEXT::eInt32", // SETTING_BOOL_NUMERIC_DEPRECATED
"vk::LayerSettingTypeEXT::eString", // SETTING_ENUM
"vk::LayerSettingTypeEXT::eString", // SETTING_FLAGS
"vk::LayerSettingTypeEXT::eUint32", // SETTING_FRAMES
"vk::LayerSettingTypeEXT::eString" // SETTING_LIST
};
static_assert(std::size(table) == SETTING_COUNT, "The tranlation table size doesn't match the enum number of elements");

return table[type];
}

const char* GetCodeTypeString(SettingType type) {
assert(type >= SETTING_FIRST && type <= SETTING_LAST);

static const char* table[] = {
"const char*", // SETTING_STRING
"int32_t", // SETTING_INT
"int64_t", // SETTING_INT
"float", // SETTING_FLOAT
"N/A", // SETTING_GROUP
"const char*", // SETTING_SAVE_FILE
Expand Down
8 changes: 8 additions & 0 deletions vkconfig_core/setting.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,17 @@ enum SettingType { // Enum value can't be changed

enum { SETTING_COUNT = SETTING_LAST - SETTING_FIRST + 1 };

inline bool IsInfoStringArrayRequired(SettingType type) { return type == SETTING_LIST || type == SETTING_FLAGS; }

inline bool IsInfoStringRequired(SettingType type) {
return type != SETTING_INT && type != SETTING_FLOAT && type != SETTING_GROUP && type != SETTING_BOOL &&
type != SETTING_BOOL_NUMERIC_DEPRECATED && type != SETTING_FLAGS && type != SETTING_LIST;
}

SettingType GetSettingType(const char* token);
const char* GetToken(SettingType type);
const char* GetLayerSettingTypeString(SettingType type);
const char* GetLayerSettingTypeHPPString(SettingType type);
const char* GetCodeTypeString(SettingType type);
bool IsString(SettingType type);
bool IsArray(SettingType type);
Expand Down
8 changes: 4 additions & 4 deletions vkconfig_core/setting_flags.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,8 @@ std::string SettingDataEnum::Export(ExportMode export_mode) const {

const std::string& value_name = ::GetSettingValueName(this->meta->layer_key, this->key, value.key);

result +=
format("static %s %s = \"%s\";\n", ::GetCodeTypeString(this->type), value_name.c_str(), value.key.c_str());
result += format("[[maybe_unused]] static %s %s = \"%s\";\n", ::GetCodeTypeString(this->type), value_name.c_str(),
value.key.c_str());
}

if (!this->meta->enum_values.empty()) {
Expand Down Expand Up @@ -314,8 +314,8 @@ std::string SettingDataFlags::Export(ExportMode export_mode) const {

const std::string& value_name = ::GetSettingValueName(this->meta->layer_key, this->key, value.key);

result +=
format("static %s %s = \"%s\";\n", ::GetCodeTypeString(this->type), value_name.c_str(), value.key.c_str());
result += format("[[maybe_unused]] static %s %s = \"%s\";\n", ::GetCodeTypeString(this->type), value_name.c_str(),
value.key.c_str());
}

if (!this->meta->enum_values.empty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
:: See the License for the specific language governing permissions and
:: limitations under the License.
::
:: This code was generated by Vulkan Configurator 3.4.2
:: This code was generated by Vulkan Configurator 3.4.3


:: reference layer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ <h3><a id="int_required_only-detailed" href="#int_required_only">Integer</a></h3
<table>
<thead><tr><th><a href="https://vulkan.lunarg.com/doc/sdk/1.4.333.0/windows/layer_configuration.html">Methods:</a></th><th></th></tr></thead>
<tbody>
<tr><td><span class="code">VK_EXT_layer_settings</span>:</td><td><span class="code">int32_t data[] = { 76 };<br>VkLayerSettingEXT setting {<br>&emsp;"VK_LAYER_LUNARG_reference_1_2_1", "int_required_only", VK_LAYER_SETTING_TYPE_INT32_EXT,<br>&emsp;static_cast<uint32_t>(std::size(data)), data };
<tr><td><span class="code">VK_EXT_layer_settings</span>:</td><td><span class="code">int64_t data[] = { 76 };<br>VkLayerSettingEXT setting {<br>&emsp;"VK_LAYER_LUNARG_reference_1_2_1", "int_required_only", VK_LAYER_SETTING_TYPE_INT64_EXT,<br>&emsp;static_cast<uint32_t>(std::size(data)), data };
</span></td></tr>
<tr><td><span class="code">vk_layer_settings.txt</span>:</td><td><span class="code">lunarg_reference_1_2_1.int_required_only = 76</span></td></tr>
<tr><td> Environment variables : </ td><td><span class ="code">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ Integer Description.

| Methods: | |
| --- | --- |
| `VK_EXT_layer_settings`: | <pre>int32_t data[] = { 76 };<br>VkLayerSettingEXT setting {<br>&emsp;"VK_LAYER_LUNARG_reference_1_2_1", "int_required_only", VK_LAYER_SETTING_TYPE_INT32_EXT,<br>&emsp;static_cast<uint32_t>(std::size(data)), data };</pre> |
| `VK_EXT_layer_settings`: | <pre>int64_t data[] = { 76 };<br>VkLayerSettingEXT setting {<br>&emsp;"VK_LAYER_LUNARG_reference_1_2_1", "int_required_only", VK_LAYER_SETTING_TYPE_INT64_EXT,<br>&emsp;static_cast<uint32_t>(std::size(data)), data };</pre> |
| `vk_layer_settings.txt`: | <pre>lunarg_reference_1_2_1.int_required_only = 76</pre> |
| Environment variables: | <pre>export VK_LUNARG_REFERENCE_1_2_1_INT_REQUIRED_ONLY=76<br>export VK_REFERENCE_1_2_1_INT_REQUIRED_ONLY=76<br>export VK_INT_REQUIRED_ONLY=76</pre> |
| Android system properties: | <pre>adb shell setprop debug.vulkan.lunarg_reference_1_2_1.int_required_only 76<br>adb shell setprop debug.vulkan.reference_1_2_1.int_required_only 76<br>adb shell setprop debug.vulkan.int_required_only 76</pre> |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#! See the License for the specific language governing permissions and
#! limitations under the License.
#!
#! This code was generated by Vulkan Configurator 3.4.2
#! This code was generated by Vulkan Configurator 3.4.3


#! reference layer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This code was generated by Vulkan Configurator 3.4.2
# This code was generated by Vulkan Configurator 3.4.3

# reference layer
# ==========================================
Expand Down
Loading