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));