diff --git a/renderdoc/driver/vulkan/vk_linux.cpp b/renderdoc/driver/vulkan/vk_linux.cpp index 429ce3d8b..cd3ccf77e 100644 --- a/renderdoc/driver/vulkan/vk_linux.cpp +++ b/renderdoc/driver/vulkan/vk_linux.cpp @@ -135,3 +135,14 @@ void VulkanReplay::GetOutputWindowDimensions(uint64_t id, int32_t &w, int32_t &h } const char *VulkanLibraryName = "libvulkan.so.1"; + +// embedded data file + +extern unsigned char driver_vulkan_renderdoc_json[]; +extern int driver_vulkan_renderdoc_json_len; + +extern "C" __attribute__((visibility("default"))) void RENDERDOC_GetLayerJSON(char **txt, int *len) +{ + *txt = (char *)driver_vulkan_renderdoc_json; + *len = driver_vulkan_renderdoc_json_len; +} diff --git a/renderdoccmd/renderdoccmd_linux.cpp b/renderdoccmd/renderdoccmd_linux.cpp index 4ec264ac6..b13ccc7f3 100644 --- a/renderdoccmd/renderdoccmd_linux.cpp +++ b/renderdoccmd/renderdoccmd_linux.cpp @@ -51,14 +51,34 @@ void Daemonise() daemon(1, 0); } -// this is included as a data file in librenderdoc.so -extern unsigned char driver_vulkan_renderdoc_json[]; -extern int driver_vulkan_renderdoc_json_len; +// this is exported from vk_linux.cpp + +#if defined(RENDERDOC_SUPPORT_VULKAN) + +extern "C" void RENDERDOC_GetLayerJSON(char **txt, int *len); + +#else + +// just for ease of compiling, define a dummy function + +void RENDERDOC_GetLayerJSON(char **txt, int *len) +{ + static char dummy[] = ""; + *txt = dummy; + *len = 0; +} + +#endif static string GenerateJSON(const string &sopath) { - char *txt = (char *)driver_vulkan_renderdoc_json; - int len = driver_vulkan_renderdoc_json_len; + char *txt = NULL; + int len = 0; + + RENDERDOC_GetLayerJSON(&txt, &len); + + if(len <= 0) + return ""; string json = string(txt, txt + len); @@ -277,7 +297,7 @@ struct VulkanRegisterCommand : public Command string libPath; }; -static void VerifyVulkanLayer(int argc, char *argv[]) +void VerifyVulkanLayer(int argc, char *argv[]) { // see if the user has suppressed all this checking as a "I know what I'm doing" measure