aboutsummaryrefslogtreecommitdiff
path: root/layers/vk_layer_config.cpp
diff options
context:
space:
mode:
authorLenny Komow <lenny@lunarg.com>2016-09-30 14:15:25 -0600
committerLenny Komow <lenny@lunarg.com>2016-10-05 17:33:39 -0600
commit94decf7327ef2530cb7b623a2d261df21be4fa55 (patch)
tree1cf0f518edb5b203f60d37d24928cbc46fbb6bf4 /layers/vk_layer_config.cpp
parentaf9e373c49efaeb87c5bc54d31385e788508e461 (diff)
downloadusermoji-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.cpp56
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;