layer: Query string values in one concat string
diff --git a/src/layer/vk_layer_settings_helper.cpp b/src/layer/vk_layer_settings_helper.cpp index 47e45f0..683d5ea 100644 --- a/src/layer/vk_layer_settings_helper.cpp +++ b/src/layer/vk_layer_settings_helper.cpp
@@ -8,6 +8,19 @@ // - Christophe Riccio <christophe@lunarg.com> #include "vulkan/layer/vk_layer_settings.hpp" +static std::string Merge(const std::vector<std::string> &strings) { + std::string result; + + for (std::size_t i = 0, n = strings.size(); i < n; ++i) { + if (!result.empty()) { + result += ","; + } + result += strings[i]; + } + + return result; +} + void vlGetLayerSettingValue(VlLayerSettingSet layerSettingSet, const char *pSettingName, bool &settingValue) { uint32_t value_count = 1; VkBool32 value; @@ -112,10 +125,9 @@ } void vlGetLayerSettingValue(VlLayerSettingSet layerSettingSet, const char *pSettingName, std::string &settingValue) { - uint32_t value_count = 1; - const char *value; - vlGetLayerSettingValues(layerSettingSet, pSettingName, VK_LAYER_SETTING_TYPE_STRING_EXT, &value_count, &value); - settingValue = value; + std::vector<std::string> values; + vlGetLayerSettingValues(layerSettingSet, pSettingName, values); + settingValue = Merge(values); } void vlGetLayerSettingValues(VlLayerSettingSet layerSettingSet, const char *pSettingName, std::vector<std::string> &settingValues) {
diff --git a/tests/layer/test_setting_cpp.cpp b/tests/layer/test_setting_cpp.cpp index 170615d..81fccf9 100644 --- a/tests/layer/test_setting_cpp.cpp +++ b/tests/layer/test_setting_cpp.cpp
@@ -334,7 +334,6 @@ vlDestroyLayerSettingSet(layerSettingSet, nullptr); } - TEST(test_layer_setting_cpp, vlGetLayerSettingValue_String) { const char* value_data[] = {"VALUE_A"}; @@ -352,6 +351,27 @@ vlDestroyLayerSettingSet(layerSettingSet, nullptr); } +TEST(test_layer_setting_cpp, vlGetLayerSettingValue_Strings) { + const char* values_data[] = {"VALUE_A", "VALUE_B"}; + const uint32_t value_count = static_cast<uint32_t>(std::size(values_data)); + + const VkLayerSettingEXT settings[] = { + {"VK_LAYER_LUNARG_test", "my_setting", VK_LAYER_SETTING_TYPE_STRING_EXT, value_count, {values_data}} + }; + const uint32_t settings_size = static_cast<uint32_t>(std::size(settings)); + + const VkLayerSettingsCreateInfoEXT layer_settings_create_info{VK_STRUCTURE_TYPE_LAYER_SETTINGS_EXT, nullptr, settings_size, settings}; + + VlLayerSettingSet layerSettingSet = VK_NULL_HANDLE; + vlCreateLayerSettingSet("VK_LAYER_LUNARG_test", &layer_settings_create_info, nullptr, nullptr, &layerSettingSet); + + std::string value; + vlGetLayerSettingValue(layerSettingSet, "my_setting", value); + EXPECT_STREQ("VALUE_A,VALUE_B", value.c_str()); + + vlDestroyLayerSettingSet(layerSettingSet, nullptr); +} + TEST(test_layer_setting_cpp, vlGetLayerSettingValues_String) { const char* values_data[] = {"VALUE_A", "VALUE_B"}; const uint32_t value_count = static_cast<uint32_t>(std::size(values_data));