diff options
| author | Lenny Komow <lenny@lunarg.com> | 2016-09-30 14:15:25 -0600 |
|---|---|---|
| committer | Lenny Komow <lenny@lunarg.com> | 2016-10-05 17:33:39 -0600 |
| commit | 94decf7327ef2530cb7b623a2d261df21be4fa55 (patch) | |
| tree | 1cf0f518edb5b203f60d37d24928cbc46fbb6bf4 /layers/vk_layer_config.cpp | |
| parent | af9e373c49efaeb87c5bc54d31385e788508e461 (diff) | |
| download | usermoji-94decf7327ef2530cb7b623a2d261df21be4fa55.tar.xz | |
layers: Add environment var for settings file
Change-Id: I8a614f915ab9b61eca5b3b94f4cf43a33cacf250
Diffstat (limited to 'layers/vk_layer_config.cpp')
| -rw-r--r-- | layers/vk_layer_config.cpp | 56 |
1 files changed, 50 insertions, 6 deletions
diff --git a/layers/vk_layer_config.cpp b/layers/vk_layer_config.cpp index ec50744d..d8fe87d2 100644 --- a/layers/vk_layer_config.cpp +++ b/layers/vk_layer_config.cpp @@ -21,14 +21,15 @@ * Author: Tobin Ehlis <tobin@lunarg.com> * Author: Mark Lobodzinski <mark@lunarg.com> **************************************************************************/ +#include "vk_layer_config.h" +#include "vulkan/vk_sdk_platform.h" #include <fstream> -#include <string> +#include <iostream> #include <map> #include <string.h> +#include <string> +#include <sys/stat.h> #include <vulkan/vk_layer.h> -#include <iostream> -#include "vk_layer_config.h" -#include "vulkan/vk_sdk_platform.h" #define MAX_CHARS_PER_LINE 4096 @@ -49,6 +50,25 @@ class ConfigFile { static ConfigFile g_configFileObj; +std::string getEnvironment(const char *variable) { +#if !defined(__ANDROID__) && !defined(_WIN32) + const char *output = getenv(variable); + return output == NULL ? "" : output; +#elif defined(_WIN32) + int size = GetEnvironmentVariable(variable, NULL, 0); + if (size == 0) { + return ""; + } + char *buffer = new char[size]; + GetEnvironmentVariable(variable, buffer, size); + std::string output = buffer; + delete[] buffer; + return output; +#else + return ""; +#endif +} + const char *getLayerOption(const char *_option) { return g_configFileObj.getOption(_option); } // If option is NULL or stdout, return stdout, otherwise try to open option @@ -155,7 +175,19 @@ ConfigFile::~ConfigFile() {} const char *ConfigFile::getOption(const std::string &_option) { std::map<std::string, std::string>::const_iterator it; if (!m_fileIsParsed) { - parseFile("vk_layer_settings.txt"); + std::string envPath = getEnvironment("VK_LAYER_SETTINGS_PATH"); + + // If the path exists use it, else use vk_layer_settings + struct stat info; + if (stat(envPath.c_str(), &info) == 0) { + // If this is a directory, look for vk_layer_settings within the directory + if (info.st_mode & S_IFDIR) { + envPath += "/vk_layer_settings.txt"; + } + parseFile(envPath.c_str()); + } else { + parseFile("vk_layer_settings.txt"); + } } if ((it = m_valueMap.find(_option)) == m_valueMap.end()) @@ -166,7 +198,19 @@ const char *ConfigFile::getOption(const std::string &_option) { void ConfigFile::setOption(const std::string &_option, const std::string &_val) { if (!m_fileIsParsed) { - parseFile("vk_layer_settings.txt"); + std::string envPath = getEnvironment("VK_LAYER_SETTINGS_PATH"); + + // If the path exists use it, else use vk_layer_settings + struct stat info; + if (stat(envPath.c_str(), &info) == 0) { + // If this is a directory, look for vk_layer_settings within the directory + if (info.st_mode & S_IFDIR) { + envPath += "/vk_layer_settings.txt"; + } + parseFile(envPath.c_str()); + } else { + parseFile("vk_layer_settings.txt"); + } } m_valueMap[_option] = _val; |
