From d777f6bf9de871f454b94654de6d1eac0f96ccfe Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 12 Dec 2018 13:45:33 +0000 Subject: [PATCH] Allow sourcing data from disk in demos program --- util/test/demos/linux/linux_platform.cpp | 5 +++++ util/test/demos/test_common.cpp | 21 +++++++++++++++++++-- util/test/demos/test_common.h | 5 +++++ util/test/demos/win32/win32_platform.cpp | 12 ++++++++++++ util/test/rdtest/runner.py | 2 ++ 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/util/test/demos/linux/linux_platform.cpp b/util/test/demos/linux/linux_platform.cpp index c5b0bc6be..a7ac7e5e3 100644 --- a/util/test/demos/linux/linux_platform.cpp +++ b/util/test/demos/linux/linux_platform.cpp @@ -40,3 +40,8 @@ std::string GetCWD() return cwdstr; } + +std::string GetEnvVar(const char *var) +{ + return getenv(var); +} \ No newline at end of file diff --git a/util/test/demos/test_common.cpp b/util/test/demos/test_common.cpp index 79a541c7e..ff3dd746b 100644 --- a/util/test/demos/test_common.cpp +++ b/util/test/demos/test_common.cpp @@ -350,11 +350,15 @@ bool GraphicsTest::Init(int argc, char **argv) { srand(0U); + dataRoot = GetEnvVar("RENDERDOC_DEMOS_DATA"); + + if(dataRoot.empty()) + dataRoot = GetCWD() + "/data/demos/"; + // parse parameters for(int i = 0; i < argc; i++) { - if(!strcmp(argv[i], "--debug") || !strcmp(argv[i], "-debug") || - !strcmp(argv[i], "--validate") || !strcmp(argv[i], "-validate")) + if(!strcmp(argv[i], "--debug") || !strcmp(argv[i], "--validate")) { debugDevice = true; } @@ -364,6 +368,14 @@ bool GraphicsTest::Init(int argc, char **argv) { maxFrameCount = atoi(argv[i + 1]); } + + if(i + 1 < argc && !strcmp(argv[i], "--data")) + { + dataRoot = argv[i + 1]; + while(dataRoot.back() == '/' || dataRoot.back() == '\\') + dataRoot.pop_back(); + dataRoot += "/"; + } } #if defined(WIN32) @@ -386,6 +398,11 @@ bool GraphicsTest::Init(int argc, char **argv) return true; } +std::string GraphicsTest::GetDataPath(const std::string &filename) +{ + return dataRoot + filename; +} + bool GraphicsTest::FrameLimit() { curFrame++; diff --git a/util/test/demos/test_common.h b/util/test/demos/test_common.h index bf6bcc39c..e964fa158 100644 --- a/util/test/demos/test_common.h +++ b/util/test/demos/test_common.h @@ -151,8 +151,12 @@ struct GraphicsTest virtual bool IsSupported() { return false; } virtual bool Init(int argc, char **argv); + std::string GetDataPath(const std::string &filename); + bool FrameLimit(); + std::string dataRoot; + int curFrame = 0; int maxFrameCount = -1; @@ -239,6 +243,7 @@ void RegisterTest(TestMetadata test); static TestRegistration Anon##__LINE__; std::string GetCWD(); +std::string GetEnvVar(const char *var); #ifndef ARRAY_COUNT #define ARRAY_COUNT(arr) (sizeof(arr) / sizeof(arr[0])) diff --git a/util/test/demos/win32/win32_platform.cpp b/util/test/demos/win32/win32_platform.cpp index 4142ca787..2ca034903 100644 --- a/util/test/demos/win32/win32_platform.cpp +++ b/util/test/demos/win32/win32_platform.cpp @@ -88,3 +88,15 @@ std::wstring UTF82Wide(const std::string &s) return ret; } + +std::string GetEnvVar(const char *var) +{ + std::wstring wvar = UTF82Wide(var); + wchar_t wval[1024] = {}; + DWORD len = GetEnvironmentVariableW(wvar.c_str(), wval, 1023); + + if(len > 0 && len <= 1023) + return Wide2UTF8(wval); + + return ""; +} \ No newline at end of file diff --git a/util/test/rdtest/runner.py b/util/test/rdtest/runner.py index 3d1f03c1e..717a113a7 100644 --- a/util/test/rdtest/runner.py +++ b/util/test/rdtest/runner.py @@ -224,6 +224,8 @@ def run_tests(test_include: str, test_exclude: str, in_process: bool, slow_tests log.print("Couldn't register vulkan layer properly, might need admin rights") sys.exit(1) + os.environ['RENDERDOC_DEMOS_DATA'] = util.get_data_path('demos') + testcases = get_tests() include_regexp = re.compile(test_include, re.IGNORECASE)