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;
+}
+};