Skip to content

Commit

Permalink
layer: Query string values in one concat string
Browse files Browse the repository at this point in the history
  • Loading branch information
christophe-lunarg committed Aug 4, 2023
1 parent 07e2779 commit 1718637
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 5 deletions.
20 changes: 16 additions & 4 deletions src/layer/vk_layer_settings_helper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -112,10 +125,9 @@ void vlGetLayerSettingValues(VlLayerSettingSet layerSettingSet, const char *pSet
}

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) {
Expand Down
22 changes: 21 additions & 1 deletion tests/layer/test_setting_cpp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,6 @@ TEST(test_layer_setting_cpp, vlGetLayerSettingValues_Double) {
vlDestroyLayerSettingSet(layerSettingSet, nullptr);
}


TEST(test_layer_setting_cpp, vlGetLayerSettingValue_String) {
const char* value_data[] = {"VALUE_A"};

Expand All @@ -352,6 +351,27 @@ TEST(test_layer_setting_cpp, vlGetLayerSettingValue_String) {
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));
Expand Down

0 comments on commit 1718637

Please sign in to comment.