From 90604c6d9cef4aa754a7ee021aac839b80c7c72b Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 25 Aug 2016 12:57:17 +0200 Subject: [PATCH] Print custom lines of API support on the version string of renderdoccmd * An easy way to check what support is compiled into this binary. --- CMakeLists.txt | 8 ++++ renderdoccmd/CMakeLists.txt | 2 - renderdoccmd/renderdoccmd.cpp | 16 ++++++-- renderdoccmd/renderdoccmd.h | 2 + renderdoccmd/renderdoccmd_linux.cpp | 62 ++++++++++++++++++++++++++++- 5 files changed, 83 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 777926e10..2dac00d19 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,14 @@ option(ENABLE_XCB "Enable xcb windowing support" ON) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") +if(ENABLE_GL) + add_definitions(-DRENDERDOC_SUPPORT_GL) +endif() + +if(ENABLE_VULKAN) + add_definitions(-DRENDERDOC_SUPPORT_VULKAN) +endif() + if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fstrict-aliasing") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") diff --git a/renderdoccmd/CMakeLists.txt b/renderdoccmd/CMakeLists.txt index 9a421d088..8ad6dfa4b 100644 --- a/renderdoccmd/CMakeLists.txt +++ b/renderdoccmd/CMakeLists.txt @@ -12,8 +12,6 @@ elseif(UNIX) list(APPEND sources renderdoccmd_linux.cpp) if(ENABLE_GL) - add_definitions(-DRENDERDOC_SUPPORT_GL) - find_package(OpenGL REQUIRED) list(APPEND includes PRIVATE ${OPENGL_INCLUDE_DIR}) list(APPEND libraries PRIVATE ${OPENGL_gl_LIBRARY}) diff --git a/renderdoccmd/renderdoccmd.cpp b/renderdoccmd/renderdoccmd.cpp index 89190aad0..f99cf9389 100644 --- a/renderdoccmd/renderdoccmd.cpp +++ b/renderdoccmd/renderdoccmd.cpp @@ -153,6 +153,8 @@ static int command_usage(std::string command = "") return 2; } +static std::vector version_lines; + struct VersionCommand : public Command { virtual void AddOptions(cmdline::parser &parser) {} @@ -161,13 +163,21 @@ struct VersionCommand : public Command virtual bool IsCaptureCommand() { return false; } virtual int Execute(cmdline::parser &parser, const CaptureOptions &) { - std::cout << "renderdoccmd " << RENDERDOC_GetVersionString() - << (sizeof(uintptr_t) == sizeof(uint64_t) ? " x64 " : " x86 ") - << RENDERDOC_GetCommitHash() << std::endl; + std::cout << "renderdoccmd " << (sizeof(uintptr_t) == sizeof(uint64_t) ? "x64 " : "x86 ") + << RENDERDOC_GetVersionString() << "-" << RENDERDOC_GetCommitHash() << std::endl; + + for(size_t i = 0; i < version_lines.size(); i++) + std::cout << version_lines[i] << std::endl; + return 0; } }; +void add_version_line(const std::string &str) +{ + version_lines.push_back(str); +} + struct HelpCommand : public Command { virtual void AddOptions(cmdline::parser &parser) {} diff --git a/renderdoccmd/renderdoccmd.h b/renderdoccmd/renderdoccmd.h index e5d657397..0c610885c 100644 --- a/renderdoccmd/renderdoccmd.h +++ b/renderdoccmd/renderdoccmd.h @@ -50,6 +50,8 @@ struct Command extern bool usingKillSignal; extern volatile uint32_t killSignal; +void add_version_line(const std::string &str); + void add_command(const std::string &name, Command *cmd); void add_alias(const std::string &alias, const std::string &command); diff --git a/renderdoccmd/renderdoccmd_linux.cpp b/renderdoccmd/renderdoccmd_linux.cpp index 6c248a9b7..b1ea114d6 100644 --- a/renderdoccmd/renderdoccmd_linux.cpp +++ b/renderdoccmd/renderdoccmd_linux.cpp @@ -238,9 +238,67 @@ int main(int argc, char *argv[]) signal(SIGINT, sig_handler); signal(SIGTERM, sig_handler); - // do any linux-specific setup here + // add compiled-in support to version line + { + string support = "APIs supported at compile-time: "; + int count = 0; - // process any linux-specific arguments here +#if defined(RENDERDOC_SUPPORT_VULKAN) + support += "Vulkan, "; + count++; +#endif + +#if defined(RENDERDOC_SUPPORT_GL) + support += "GL, "; + count++; +#endif + + if(count == 0) + { + support += "None."; + } + else + { + // remove trailing ', ' + support.pop_back(); + support.pop_back(); + support += "."; + } + + add_version_line(support); + + support = "Windowing systems supported at compile-time: "; + count = 0; + +#if defined(RENDERDOC_WINDOWING_XLIB) + support += "xlib, "; + count++; +#endif + +#if defined(RENDERDOC_WINDOWING_XCB) + support += "XCB, "; + count++; +#endif + +#if defined(RENDERDOC_SUPPORT_VULKAN) + support += "Vulkan KHR_display, "; + count++; +#endif + + if(count == 0) + { + support += "None."; + } + else + { + // remove trailing ', ' + support.pop_back(); + support.pop_back(); + support += "."; + } + + add_version_line(support); + } return renderdoccmd(argc, argv); }