vk_layer_config.cpp revision 329ca9eb16cdbee7a7644fb08ade7b3d3bb32e23
147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn/************************************************************************** 247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * 3c5a5d63c7c7ef3d2238233fedf3be675934e30c9Jon Ashburn * Copyright 2014 Valve Software 49268944f0ecf9da8e9e49e014d2fb45faedb64ceMichael Lentine * Copyright 2015 Google Inc. 547e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * All Rights Reserved. 647e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * 747e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * Permission is hereby granted, free of charge, to any person obtaining a copy 847e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * of this software and associated documentation files (the "Software"), to deal 947e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * in the Software without restriction, including without limitation the rights 1047e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * copies of the Software, and to permit persons to whom the Software is 1247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * furnished to do so, subject to the following conditions: 1347e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * 1447e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * The above copyright notice and this permission notice shall be included in 1547e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * all copies or substantial portions of the Software. 1647e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * 1747e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1847e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1947e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 2047e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 2147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 2247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 2347e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * THE SOFTWARE. 2447e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn * 25c5a5d63c7c7ef3d2238233fedf3be675934e30c9Jon Ashburn * Author: Jon Ashburn <jon@lunarg.com> 26c5a5d63c7c7ef3d2238233fedf3be675934e30c9Jon Ashburn * Author: Courtney Goeltzenleuchter <courtney@LunarG.com> 27c5a5d63c7c7ef3d2238233fedf3be675934e30c9Jon Ashburn * Author: Tobin Ehlis <tobin@lunarg.com> 2847e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn **************************************************************************/ 2947e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn#include <fstream> 3047e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn#include <string> 3147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn#include <map> 3247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn#include <string.h> 33329ca9eb16cdbee7a7644fb08ade7b3d3bb32e23David Pinedo#include <vulkan/vk_layer.h> 34b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis#include <iostream> 3556d204acf07fe1639103ab9326886f3c06dbbb76Tobin Ehlis#include "vk_layer_config.h" 36329ca9eb16cdbee7a7644fb08ade7b3d3bb32e23David Pinedo#include "vulkan/vk_sdk_platform.h" 3747e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 3847e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn#define MAX_CHARS_PER_LINE 4096 3947e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 4047e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburnclass ConfigFile 4147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn{ 4247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburnpublic: 4347e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn ConfigFile(); 4447e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn ~ConfigFile(); 4547e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 4647e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn const char *getOption(const std::string &_option); 470f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn void setOption(const std::string &_option, const std::string &_val); 480f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn 4947e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburnprivate: 5047e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn bool m_fileIsParsed; 5147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn std::map<std::string, std::string> m_valueMap; 5247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 5347e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn void parseFile(const char *filename); 5447e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn}; 5547e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 5647e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburnstatic ConfigFile g_configFileObj; 570f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn 581c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchterstatic VkLayerDbgAction stringToDbgAction(const char *_enum) 590f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn{ 600f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn // only handles single enum values 619cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter if (!strcmp(_enum, "VK_DBG_LAYER_ACTION_IGNORE")) 629cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return VK_DBG_LAYER_ACTION_IGNORE; 639cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter else if (!strcmp(_enum, "VK_DBG_LAYER_ACTION_LOG_MSG")) 649cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return VK_DBG_LAYER_ACTION_LOG_MSG; 65b94f051b39bc65e1110f1250b2ef0404f7104ab0Courtney Goeltzenleuchter#ifdef WIN32 66b94f051b39bc65e1110f1250b2ef0404f7104ab0Courtney Goeltzenleuchter else if (!strcmp(_enum, "VK_DBG_LAYER_ACTION_DEBUG_OUTPUT")) 67b94f051b39bc65e1110f1250b2ef0404f7104ab0Courtney Goeltzenleuchter return VK_DBG_LAYER_ACTION_DEBUG_OUTPUT; 68b94f051b39bc65e1110f1250b2ef0404f7104ab0Courtney Goeltzenleuchter#endif 699cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter else if (!strcmp(_enum, "VK_DBG_LAYER_ACTION_BREAK")) 709cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter return VK_DBG_LAYER_ACTION_BREAK; 711c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter return (VkLayerDbgAction) 0; 721c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter} 731c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter 741c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchterstatic VkFlags stringToDbgReportFlags(const char *_enum) 751c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter{ 761c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter // only handles single enum values 771c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter if (!strcmp(_enum, "VK_DBG_REPORT_INFO")) 781c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter return VK_DBG_REPORT_INFO_BIT; 791c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter else if (!strcmp(_enum, "VK_DBG_REPORT_WARN")) 801c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter return VK_DBG_REPORT_WARN_BIT; 811c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter else if (!strcmp(_enum, "VK_DBG_REPORT_PERF_WARN")) 821c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter return VK_DBG_REPORT_PERF_WARN_BIT; 831c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter else if (!strcmp(_enum, "VK_DBG_REPORT_ERROR")) 841c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter return VK_DBG_REPORT_ERROR_BIT; 8535b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter else if (!strcmp(_enum, "VK_DBG_REPORT_DEBUG")) 8635b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter return VK_DBG_REPORT_DEBUG_BIT; 871c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter return (VkFlags) 0; 881c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter} 891c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter 901c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchterstatic unsigned int convertStringEnumVal(const char *_enum) 911c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter{ 921c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter unsigned int ret; 931c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter 941c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter ret = stringToDbgAction(_enum); 951c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter if (ret) 961c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter return ret; 971c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter 981c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter return stringToDbgReportFlags(_enum); 990f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn} 1001c7c65d3f9d68d5869da97ceb1a365a739623fe9Courtney Goeltzenleuchter 10147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburnconst char *getLayerOption(const char *_option) 10247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn{ 10347e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn return g_configFileObj.getOption(_option); 10447e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn} 10547e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 106b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis// If option is NULL or stdout, return stdout, otherwise try to open option 107b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis// as a filename. If successful, return file handle, otherwise stdout 108b4b6e7c2412a10c2df40493141229f79970e51bbTobin EhlisFILE* getLayerLogOutput(const char *_option, const char *layerName) 109b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis{ 110b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis FILE* log_output = NULL; 111b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis if (!_option || !strcmp("stdout", _option)) 112b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis log_output = stdout; 113b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis else { 114b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis log_output = fopen(_option, "w"); 115b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis if (log_output == NULL) { 116b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis if (_option) 117b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis std::cout << std::endl << layerName << " ERROR: Bad output filename specified: " << _option << ". Writing to STDOUT instead" << std::endl << std::endl; 118b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis log_output = stdout; 119b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis } 120b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis } 121866bb9c87ab16a0055978eff4e9ebd9c2a828b04Cody Northrop return log_output; 122b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis} 123b4b6e7c2412a10c2df40493141229f79970e51bbTobin Ehlis 12435b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchteruint32_t getLayerOptionFlags(const char *_option, uint32_t optionDefault) 12535b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter{ 12635b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter uint32_t flags = optionDefault; 12735b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter const char *option = (g_configFileObj.getOption(_option)); 12835b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter 12935b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter /* parse comma-separated options */ 13035b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter while (option) { 13135b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter const char *p = strchr(option, ','); 13235b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter size_t len; 13335b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter 13435b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter if (p) 13535b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter len = p - option; 13635b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter else 13735b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter len = strlen(option); 13835b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter 13935b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter if (len > 0) { 14035b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter if (strncmp(option, "warn", len) == 0) { 14135b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter flags |= VK_DBG_REPORT_WARN_BIT; 14235b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter } else if (strncmp(option, "info", len) == 0) { 14335b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter flags |= VK_DBG_REPORT_INFO_BIT; 14435b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter } else if (strncmp(option, "perf", len) == 0) { 14535b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter flags |= VK_DBG_REPORT_PERF_WARN_BIT; 14635b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter } else if (strncmp(option, "error", len) == 0) { 14735b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter flags |= VK_DBG_REPORT_ERROR_BIT; 14835b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter } else if (strncmp(option, "debug", len) == 0) { 14935b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter flags |= VK_DBG_REPORT_DEBUG_BIT; 15035b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter } 15135b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter } 15235b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter 15335b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter if (!p) 15435b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter break; 15535b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter 15635b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter option = p + 1; 15735b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter } 15835b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter return flags; 15935b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter} 16035b4da96505de43ebb11978acf9859ca4bbdbe3bCourtney Goeltzenleuchter 161e4722391d23e3d4127f527c9ea046ac4bfe74766Jon Ashburnbool getLayerOptionEnum(const char *_option, uint32_t *optionDefault) 162c5eaea6af58e5c83c1ec48ca066e30ea0a020d2cMark Lobodzinski{ 163e4722391d23e3d4127f527c9ea046ac4bfe74766Jon Ashburn bool res; 164c5eaea6af58e5c83c1ec48ca066e30ea0a020d2cMark Lobodzinski const char *option = (g_configFileObj.getOption(_option)); 165c5eaea6af58e5c83c1ec48ca066e30ea0a020d2cMark Lobodzinski if (option != NULL) { 166e4722391d23e3d4127f527c9ea046ac4bfe74766Jon Ashburn *optionDefault = convertStringEnumVal(option); 167e4722391d23e3d4127f527c9ea046ac4bfe74766Jon Ashburn res = false; 1681ee9f3ab923d677625e744d7fd70cb9db097a245Mark Lobodzinski } else { 169e4722391d23e3d4127f527c9ea046ac4bfe74766Jon Ashburn res = true; 170c5eaea6af58e5c83c1ec48ca066e30ea0a020d2cMark Lobodzinski } 171e4722391d23e3d4127f527c9ea046ac4bfe74766Jon Ashburn return res; 172c5eaea6af58e5c83c1ec48ca066e30ea0a020d2cMark Lobodzinski} 173c5eaea6af58e5c83c1ec48ca066e30ea0a020d2cMark Lobodzinski 1740f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburnvoid setLayerOptionEnum(const char *_option, const char *_valEnum) 1750f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn{ 1760f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn unsigned int val = convertStringEnumVal(_valEnum); 1770f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn char strVal[24]; 1780f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn snprintf(strVal, 24, "%u", val); 1790f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn g_configFileObj.setOption(_option, strVal); 1800f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn} 1810f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn 1820f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburnvoid setLayerOption(const char *_option, const char *_val) 1830f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn{ 1840f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn g_configFileObj.setOption(_option, _val); 1850f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn} 1860f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn 18747e9289b849a08f0830ddf729fe6637ec081c731Jon AshburnConfigFile::ConfigFile() : m_fileIsParsed(false) 18847e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn{ 18947e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn} 19047e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 19147e9289b849a08f0830ddf729fe6637ec081c731Jon AshburnConfigFile::~ConfigFile() 19247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn{ 19347e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn} 19447e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 19547e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburnconst char *ConfigFile::getOption(const std::string &_option) 19647e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn{ 19747e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn std::map<std::string, std::string>::const_iterator it; 19847e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn if (!m_fileIsParsed) 19947e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn { 2009cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter parseFile("vk_layer_settings.txt"); 20147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn } 20247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 20347e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn if ((it = m_valueMap.find(_option)) == m_valueMap.end()) 20447e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn return NULL; 20547e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn else 20647e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn return it->second.c_str(); 20747e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn} 20847e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 2090f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburnvoid ConfigFile::setOption(const std::string &_option, const std::string &_val) 2100f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn{ 2110f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn if (!m_fileIsParsed) 2120f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn { 2139cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter parseFile("vk_layer_settings.txt"); 2140f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn } 2150f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn 2160f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn m_valueMap[_option] = _val; 2170f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn} 2180f1dbf15031846dee079e13a243de1ddfb65aaffJon Ashburn 21947e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburnvoid ConfigFile::parseFile(const char *filename) 22047e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn{ 22147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn std::ifstream file; 22247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn char buf[MAX_CHARS_PER_LINE]; 22347e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 22447e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn m_fileIsParsed = true; 22547e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn m_valueMap.clear(); 22647e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 22747e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn file.open(filename); 22847e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn if (!file.good()) 22947e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn return; 23047e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 23147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn // read tokens from the file and form option, value pairs 23247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn file.getline(buf, MAX_CHARS_PER_LINE); 23347e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn while (!file.eof()) 23447e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn { 23547e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn char option[512]; 23647e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn char value[512]; 23747e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 23847e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn char *pComment; 23947e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 24047e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn //discard any comments delimited by '#' in the line 24147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn pComment = strchr(buf, '#'); 24247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn if (pComment) 24347e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn *pComment = '\0'; 24447e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 24547e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn if (sscanf(buf, " %511[^\n\t =] = %511[^\n \t]", option, value) == 2) 24647e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn { 24747e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn std::string optStr(option); 24847e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn std::string valStr(value); 24947e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn m_valueMap[optStr] = valStr; 25047e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn } 25147e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn file.getline(buf, MAX_CHARS_PER_LINE); 25247e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn } 25347e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn} 25447e9289b849a08f0830ddf729fe6637ec081c731Jon Ashburn 255065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchtervoid print_msg_flags(VkFlags msgFlags, char *msg_flags) 256065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter{ 257065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter bool separator = false; 258065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter 259065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter msg_flags[0] = 0; 260065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter if (msgFlags & VK_DBG_REPORT_DEBUG_BIT) { 261065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter strcat(msg_flags, "DEBUG"); 262065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter separator = true; 263065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter } 264065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter if (msgFlags & VK_DBG_REPORT_INFO_BIT) { 265065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter if (separator) strcat(msg_flags, ","); 266065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter strcat(msg_flags, "INFO"); 267065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter separator = true; 268065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter } 269065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter if (msgFlags & VK_DBG_REPORT_WARN_BIT) { 270065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter if (separator) strcat(msg_flags, ","); 271065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter strcat(msg_flags, "WARN"); 272065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter separator = true; 273065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter } 274065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter if (msgFlags & VK_DBG_REPORT_PERF_WARN_BIT) { 275065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter if (separator) strcat(msg_flags, ","); 276065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter strcat(msg_flags, "PERF"); 277065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter separator = true; 278065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter } 279065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter if (msgFlags & VK_DBG_REPORT_ERROR_BIT) { 280065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter if (separator) strcat(msg_flags, ","); 281065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter strcat(msg_flags, "ERROR"); 282065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter } 283065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter} 284065843de24ab65bd78d4eae587661db57ef78af7Courtney Goeltzenleuchter 285