From a1369f05badf1c38bdf9d9eb599b40c16ed5292c Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 21 Aug 2017 13:43:00 +0100 Subject: [PATCH] Change home vk layer path to use $XDG_DATA_HOME if present. Refs #723 --- renderdoc/driver/vulkan/vk_linux.cpp | 100 +++++++++++++++++---------- 1 file changed, 62 insertions(+), 38 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_linux.cpp b/renderdoc/driver/vulkan/vk_linux.cpp index edaefe3f7..971de1539 100644 --- a/renderdoc/driver/vulkan/vk_linux.cpp +++ b/renderdoc/driver/vulkan/vk_linux.cpp @@ -228,18 +228,37 @@ static std::string GetSOFromJSON(const std::string &json) return ret; } -enum +enum class LayerPath : int { - USR, - ETC, - HOME, - COUNT + usr, + First = usr, + etc, + home, + Count, }; -string layerRegistrationPath[COUNT] = { - "/usr/share/vulkan/implicit_layer.d/renderdoc_capture.json", - "/etc/vulkan/implicit_layer.d/renderdoc_capture.json", - string(getenv("HOME")) + "/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json"}; +ITERABLE_OPERATORS(LayerPath); + +string LayerRegistrationPath(LayerPath path) +{ + switch(path) + { + case LayerPath::usr: return "/usr/share/vulkan/implicit_layer.d/renderdoc_capture.json"; + case LayerPath::etc: return "/etc/vulkan/implicit_layer.d/renderdoc_capture.json"; + case LayerPath::home: + { + const char *xdg = getenv("XDG_DATA_HOME"); + if(xdg && FileIO::exists(xdg)) + return string(xdg) + "/vulkan/implicit_layer.d/renderdoc_capture.json"; + + return string(getenv("HOME")) + + "/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json"; + } + default: break; + } + + return ""; +} string GetThisLibPath() { @@ -374,21 +393,21 @@ bool VulkanReplay::CheckVulkanLayer(VulkanLayerFlags &flags, std::vector()]; + bool match[arraydim()]; int numExist = 0; int numMatch = 0; - for(int i = 0; i < COUNT; i++) + for(LayerPath i : values()) { - exist[i] = FileExists(layerRegistrationPath[i]); - match[i] = (GetSOFromJSON(layerRegistrationPath[i]) == librenderdoc_path); + exist[(int)i] = FileExists(LayerRegistrationPath(i)); + match[(int)i] = (GetSOFromJSON(LayerRegistrationPath(i)) == librenderdoc_path); - if(exist[i]) + if(exist[(int)i]) numExist++; - if(match[i]) + if(match[(int)i]) numMatch++; } @@ -401,33 +420,33 @@ bool VulkanReplay::CheckVulkanLayer(VulkanLayerFlags &flags, std::vector