From 08bd19a9903ae139a77ec6001f7e3b59337362f4 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 28 Nov 2016 12:57:55 +0100 Subject: [PATCH] Fix compilation (mostly) on OSX, with stubs for VK WSI. --- qrenderdoc/Code/CaptureContext.cpp | 4 ++ qrenderdoc/qrenderdoc.pro | 8 +++- renderdoc/CMakeLists.txt | 1 - renderdoc/driver/gl/gl_hooks_apple.cpp | 7 +++ renderdoc/driver/gl/gl_replay_apple.cpp | 2 +- renderdoc/driver/gl/renderdoc_gl.vcxproj | 12 +++++ .../driver/gl/renderdoc_gl.vcxproj.filters | 18 ++++++++ renderdoc/driver/vulkan/CMakeLists.txt | 2 + .../driver/vulkan/renderdoc_vulkan.vcxproj | 3 ++ .../vulkan/renderdoc_vulkan.vcxproj.filters | 3 ++ renderdoc/driver/vulkan/vk_apple.cpp | 44 ++++++++++++++++++ renderdoc/driver/vulkan/vk_core.cpp | 8 ++-- renderdoc/driver/vulkan/vk_replay.h | 5 ++ renderdoc/os/posix/apple/apple_stringio.cpp | 46 +++++++++++++++++++ 14 files changed, 155 insertions(+), 8 deletions(-) create mode 100644 renderdoc/driver/vulkan/vk_apple.cpp diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index ac8d7d9c4..8447b49c6 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -413,6 +413,10 @@ void *CaptureContext::FillWindowingData(WId widget) return &xlib; } +#elif defined(RENDERDOC_PLATFORM_APPLE) + + return (void *)widget; + #else #error "Unknown platform" diff --git a/qrenderdoc/qrenderdoc.pro b/qrenderdoc/qrenderdoc.pro index 4372f3584..691efac97 100644 --- a/qrenderdoc/qrenderdoc.pro +++ b/qrenderdoc/qrenderdoc.pro @@ -79,8 +79,12 @@ win32 { QMAKE_CXXFLAGS += -std=c++11 -Wno-unused-parameter -Wno-reorder - QT += x11extras - DEFINES += RENDERDOC_PLATFORM_POSIX RENDERDOC_PLATFORM_LINUX RENDERDOC_WINDOWING_XLIB RENDERDOC_WINDOWING_XCB + macx: { + DEFINES += RENDERDOC_PLATFORM_POSIX RENDERDOC_PLATFORM_APPLE + } else { + QT += x11extras + DEFINES += RENDERDOC_PLATFORM_POSIX RENDERDOC_PLATFORM_LINUX RENDERDOC_WINDOWING_XLIB RENDERDOC_WINDOWING_XCB + } } SOURCES += 3rdparty/toolwindowmanager/ToolWindowManager.cpp \ diff --git a/renderdoc/CMakeLists.txt b/renderdoc/CMakeLists.txt index 4e499298a..a5fac0e20 100644 --- a/renderdoc/CMakeLists.txt +++ b/renderdoc/CMakeLists.txt @@ -24,7 +24,6 @@ elseif(APPLE) list(APPEND RDOC_LIBRARIES PRIVATE m PRIVATE dl - PRIVATE log PRIVATE ${CMAKE_THREAD_LIBS_INIT}) elseif(UNIX) find_package(PkgConfig REQUIRED) diff --git a/renderdoc/driver/gl/gl_hooks_apple.cpp b/renderdoc/driver/gl/gl_hooks_apple.cpp index 0ce00d2f2..2eea89535 100644 --- a/renderdoc/driver/gl/gl_hooks_apple.cpp +++ b/renderdoc/driver/gl/gl_hooks_apple.cpp @@ -33,6 +33,8 @@ #include "driver/gl/gl_hookset_defs.h" +Threading::CriticalSection glLock; + class OpenGLHook : LibraryHook { public: @@ -61,6 +63,11 @@ GLWindowingData MakeContext(GLWindowingData share) return GLWindowingData(); } +Threading::CriticalSection &GetGLLock() +{ + return glLock; +} + void DeleteContext(GLWindowingData context) { RDCUNIMPLEMENTED("DeleteContext"); diff --git a/renderdoc/driver/gl/gl_replay_apple.cpp b/renderdoc/driver/gl/gl_replay_apple.cpp index ff952777d..953384d1e 100644 --- a/renderdoc/driver/gl/gl_replay_apple.cpp +++ b/renderdoc/driver/gl/gl_replay_apple.cpp @@ -41,7 +41,7 @@ void GLReplay::CloseReplayContext() RDCUNIMPLEMENTED("GLReplay::CloseReplayContext"); } -uint64_t GLReplay::MakeOutputWindow(void *wn, bool depth) +uint64_t GLReplay::MakeOutputWindow(WindowingSystem system, void *data, bool depth) { RDCUNIMPLEMENTED("GLReplay::MakeOutputWindow"); return 0; diff --git a/renderdoc/driver/gl/renderdoc_gl.vcxproj b/renderdoc/driver/gl/renderdoc_gl.vcxproj index 9c035c191..8222582e6 100644 --- a/renderdoc/driver/gl/renderdoc_gl.vcxproj +++ b/renderdoc/driver/gl/renderdoc_gl.vcxproj @@ -41,6 +41,12 @@ + + true + + + true + true @@ -48,6 +54,12 @@ + + true + + + true + true diff --git a/renderdoc/driver/gl/renderdoc_gl.vcxproj.filters b/renderdoc/driver/gl/renderdoc_gl.vcxproj.filters index 4f6f75d07..3a9a6d940 100644 --- a/renderdoc/driver/gl/renderdoc_gl.vcxproj.filters +++ b/renderdoc/driver/gl/renderdoc_gl.vcxproj.filters @@ -31,6 +31,12 @@ {1122b6ee-006e-418b-9907-8f9d0a8b1f25} + + {28fbc354-c414-4647-9ce6-0fcea2cbe845} + + + {61304e3c-ff5e-4cb6-8c25-455f37d86b48} + @@ -155,5 +161,17 @@ OS\Linux + + OS\Apple + + + OS\Apple + + + OS\Android + + + OS\Android + \ No newline at end of file diff --git a/renderdoc/driver/vulkan/CMakeLists.txt b/renderdoc/driver/vulkan/CMakeLists.txt index 1cb680fef..f458e57fd 100644 --- a/renderdoc/driver/vulkan/CMakeLists.txt +++ b/renderdoc/driver/vulkan/CMakeLists.txt @@ -49,6 +49,8 @@ set(VULKAN_LAYER_FOLDER /etc/vulkan/implicit_layer.d CACHE PATH "Path to install if(ANDROID) list(APPEND sources vk_posix.cpp vk_android.cpp vk_tracelayer_android.cpp) list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_ANDROID_KHR) +elseif(APPLE) + list(APPEND sources vk_posix.cpp vk_apple.cpp) elseif(UNIX) list(APPEND sources vk_posix.cpp vk_linux.cpp) diff --git a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj index 9a2ae9890..b2f99f046 100644 --- a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj +++ b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj @@ -19,6 +19,9 @@ + + true + diff --git a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters index f553fa60b..cd923e5bd 100644 --- a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters +++ b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters @@ -91,6 +91,9 @@ OS\Posix + + OS\Posix + diff --git a/renderdoc/driver/vulkan/vk_apple.cpp b/renderdoc/driver/vulkan/vk_apple.cpp new file mode 100644 index 000000000..5e7dcb33a --- /dev/null +++ b/renderdoc/driver/vulkan/vk_apple.cpp @@ -0,0 +1,44 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2016 Baldur Karlsson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ + +#include "vk_core.h" +#include "vk_replay.h" + +void VulkanReplay::OutputWindow::SetWindowHandle(WindowingSystem system, void *data) +{ + RDCUNIMPLEMENTED("SetWindowHandle"); + m_WindowSystem = system; +} + +void VulkanReplay::OutputWindow::CreateSurface(VkInstance inst) +{ + RDCUNIMPLEMENTED("CreateSurface"); +} + +void VulkanReplay::GetOutputWindowDimensions(uint64_t id, int32_t &w, int32_t &h) +{ + RDCUNIMPLEMENTED("GetOutputWindowDimensions"); +} + +const char *VulkanLibraryName = "libvulkan.so"; diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 189fb42ae..f81628380 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -834,7 +834,7 @@ void WrappedVulkan::EndCaptureFrame(VkImage presentImage) RDCASSERT(call->NumLevels() < 0xff); - size_t numLevels = call->NumLevels(); + uint64_t numLevels = (uint64_t)call->NumLevels(); uint64_t *stack = (uint64_t *)call->GetAddrs(); localSerialiser->SerialisePODArray("callstack", stack, numLevels); @@ -2070,7 +2070,7 @@ void WrappedVulkan::ProcessChunk(uint64_t offset, VulkanChunkType context) if(HasCallstack) { - size_t numLevels = 0; + uint64_t numLevels = 0; uint64_t *stack = NULL; localSerialiser->SerialisePODArray("callstack", stack, numLevels); @@ -2277,7 +2277,7 @@ void WrappedVulkan::Serialise_DebugMessages(Serialiser *localSerialiser, bool is RDCASSERT(call->NumLevels() < 0xff); - size_t numLevels = call->NumLevels(); + uint64_t numLevels = (uint64_t)call->NumLevels(); uint64_t *stack = (uint64_t *)call->GetAddrs(); localSerialiser->SerialisePODArray("callstack", stack, numLevels); @@ -2286,7 +2286,7 @@ void WrappedVulkan::Serialise_DebugMessages(Serialiser *localSerialiser, bool is } else { - size_t numLevels = 0; + uint64_t numLevels = 0; uint64_t *stack = NULL; localSerialiser->SerialisePODArray("callstack", stack, numLevels); diff --git a/renderdoc/driver/vulkan/vk_replay.h b/renderdoc/driver/vulkan/vk_replay.h index 6a91b40de..c97b17d0c 100644 --- a/renderdoc/driver/vulkan/vk_replay.h +++ b/renderdoc/driver/vulkan/vk_replay.h @@ -87,6 +87,11 @@ RDCEraseEl(xlib); \ RDCEraseEl(xcb); +#elif ENABLED(RDOC_APPLE) + +#define WINDOW_HANDLE_DECL void *wnd; +#define WINDOW_HANDLE_INIT wnd = NULL; + #else #error "Unknown platform" diff --git a/renderdoc/os/posix/apple/apple_stringio.cpp b/renderdoc/os/posix/apple/apple_stringio.cpp index 5921113ab..87735d04b 100644 --- a/renderdoc/os/posix/apple/apple_stringio.cpp +++ b/renderdoc/os/posix/apple/apple_stringio.cpp @@ -23,7 +23,11 @@ ******************************************************************************/ #include +#include +#include +#include #include +#include #include "os/os_specific.h" typedef int Display; @@ -60,6 +64,18 @@ const char *GetTempRootPath() return "/tmp"; } +string GetAppFolderFilename(const string &filename) +{ + passwd *pw = getpwuid(getuid()); + const char *homedir = pw->pw_dir; + + string ret = string(homedir) + "/.renderdoc/"; + + mkdir(ret.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + + return ret + filename; +} + void GetExecutableFilename(string &selfName) { char path[512] = {0}; @@ -104,3 +120,33 @@ string Wide2UTF8(const std::wstring &s) return ""; } }; + +namespace OSUtility +{ +void WriteOutput(int channel, const char *str) +{ + if(channel == OSUtility::Output_StdOut) + fprintf(stdout, "%s", str); + else if(channel == OSUtility::Output_StdErr) + fprintf(stderr, "%s", str); +} + +uint64_t GetMachineIdent() +{ + uint64_t ret = MachineIdent_macOS; + +#if defined(_M_ARM) || defined(__arm__) + ret |= MachineIdent_Arch_ARM; +#else + ret |= MachineIdent_Arch_x86; +#endif + +#if ENABLED(RDOC_X64) + ret |= MachineIdent_64bit; +#else + ret |= MachineIdent_32bit; +#endif + + return ret; +} +};