Android: Get RenderDoc compiling

This commit is contained in:
Chia-I Wu
2016-05-14 01:53:43 +02:00
committed by baldurk
parent 9c15dfc6c9
commit 3503f8a9c6
11 changed files with 129 additions and 2 deletions
+4
View File
@@ -37,6 +37,10 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
list(APPEND warning_flags -Wno-unused-but-set-variable)
endif()
if(CMAKE_CROSSCOMPILING)
list(APPEND warning_flags -Wno-error)
endif()
string(REPLACE ";" " " warning_flags "${warning_flags}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${warning_flags}")
endif()
+16 -1
View File
@@ -14,7 +14,16 @@ string(STRIP ${GIT_COMMIT_HASH} GIT_COMMIT_HASH)
list(APPEND RDOC_DEFINITIONS
PRIVATE -DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
if(UNIX)
if(ANDROID)
list(APPEND RDOC_DEFINITIONS
PUBLIC -DRENDERDOC_PLATFORM=linux
PRIVATE -DLINUX)
list(APPEND RDOC_LIBRARIES
PRIVATE m
PRIVATE dl
PRIVATE ${CMAKE_THREAD_LIBS_INIT})
elseif(UNIX)
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
find_package(X11 REQUIRED)
@@ -190,6 +199,12 @@ if(UNIX)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686")
set(bfdarch "i386")
set(bfdtarget "elf32-i386")
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
set(bfdarch "aarch64")
set(bfdtarget "elf64-littleaarch64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
set(bfdarch "arm")
set(bfdtarget "elf32-littlearm")
else()
message(FATAL_ERROR "Unknown target architecture")
endif()
+4
View File
@@ -220,7 +220,11 @@ void RenderDoc::Initialise()
m_RemoteIdent = port;
m_RemoteServerThreadShutdown = false;
#ifdef ANDROID
// TODO shutdown the thread on dlclose()
#else
m_RemoteThread = Threading::CreateThread(RemoteAccessServerThread, (void *)sock);
#endif
}
}
+4 -1
View File
@@ -40,7 +40,10 @@ set(sources
set(definitions ${RDOC_DEFINITIONS})
if(UNIX)
if(ANDROID)
list(APPEND sources vk_linux.cpp)
list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_ANDROID_KHR)
elseif(UNIX)
list(APPEND sources vk_linux.cpp)
list(APPEND definitions
+8
View File
@@ -1543,6 +1543,14 @@ public:
uint32_t queueFamilyIndex);
#endif
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
VkResult vkCreateAndroidSurfaceKHR(
VkInstance instance,
const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkSurfaceKHR* pSurface);
#endif
#if defined(VK_USE_PLATFORM_XCB_KHR)
VkResult vkCreateXcbSurfaceKHR(
VkInstance instance,
@@ -84,6 +84,10 @@ void InitInstanceReplayTables(VkInstance instance)
InstanceGPA(CreateWin32SurfaceKHR)
#endif
#ifdef VK_USE_PLATFORM_ANDROID_KHR
InstanceGPA(CreateAndroidSurfaceKHR)
#endif
#ifdef VK_USE_PLATFORM_XCB_KHR
InstanceGPA(CreateXcbSurfaceKHR)
#endif
+10
View File
@@ -29,6 +29,7 @@
#undef VK_KHR_xlib_surface
#undef VK_KHR_xcb_surface
#undef VK_KHR_win32_surface
#undef VK_KHR_android_surface
#undef VK_KHR_surface
#undef VK_KHR_swapchain
#undef VK_EXT_debug_report
@@ -44,6 +45,14 @@
HookDefine4(VkResult, vkCreateWin32SurfaceKHR, VkInstance, instance, const VkWin32SurfaceCreateInfoKHR*, pCreateInfo, const VkAllocationCallbacks*, pAllocator, VkSurfaceKHR*, pSurface); \
HookDefine2(VkBool32, vkGetPhysicalDeviceWin32PresentationSupportKHR, VkPhysicalDevice, physicalDevice, uint32_t, queueFamilyIndex); \
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
#define HookInitInstance_PlatformSpecific() \
HookInitExtension(VK_KHR_android_surface, CreateAndroidSurfaceKHR);
#define HookDefine_PlatformSpecific() \
HookDefine4(VkResult, vkCreateAndroidSurfaceKHR, VkInstance, instance, const VkAndroidSurfaceCreateInfoKHR*, pCreateInfo, const VkAllocationCallbacks*, pAllocator, VkSurfaceKHR*, pSurface);
#elif defined(VK_USE_PLATFORM_XCB_KHR) || defined(VK_USE_PLATFORM_XLIB_KHR)
#if defined(VK_USE_PLATFORM_XCB_KHR)
@@ -226,6 +235,7 @@
CheckExt(VK_KHR_xlib_surface) \
CheckExt(VK_KHR_xcb_surface) \
CheckExt(VK_KHR_win32_surface) \
CheckExt(VK_KHR_android_surface) \
CheckExt(VK_KHR_surface) \
CheckExt(VK_EXT_debug_report)
+46
View File
@@ -33,6 +33,9 @@ namespace Keyboard
void VulkanReplay::OutputWindow::SetWindowHandle(void *wn)
{
#ifdef ANDROID
wnd = (ANativeWindow*) wn;
#else
void **connectionScreenWindow = (void **)wn;
connection = (xcb_connection_t *)connectionScreenWindow[0];
@@ -44,10 +47,22 @@ void VulkanReplay::OutputWindow::SetWindowHandle(void *wn)
while (scr-- > 0) xcb_screen_next(&iter);
screen = iter.data;
#endif
}
void VulkanReplay::OutputWindow::CreateSurface(VkInstance inst)
{
#ifdef ANDROID
VkAndroidSurfaceCreateInfoKHR createInfo;
createInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
createInfo.pNext = NULL;
createInfo.flags = 0;
createInfo.window = wnd;
VkResult vkr = ObjDisp(inst)->CreateAndroidSurfaceKHR(Unwrap(inst), &createInfo, NULL, &surface);
RDCASSERTEQUAL(vkr, VK_SUCCESS);
#else
VkXcbSurfaceCreateInfoKHR createInfo;
createInfo.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
@@ -58,10 +73,13 @@ void VulkanReplay::OutputWindow::CreateSurface(VkInstance inst)
VkResult vkr = ObjDisp(inst)->CreateXcbSurfaceKHR(Unwrap(inst), &createInfo, NULL, &surface);
RDCASSERTEQUAL(vkr, VK_SUCCESS);
#endif
}
void VulkanReplay::GetOutputWindowDimensions(uint64_t id, int32_t &w, int32_t &h)
{
#ifdef ANDROID
#else
if(id == 0 || m_OutputWindows.find(id) == m_OutputWindows.end())
return;
@@ -74,6 +92,7 @@ void VulkanReplay::GetOutputWindowDimensions(uint64_t id, int32_t &w, int32_t &h
h = (int32_t)geom->height;
free(geom);
#endif
}
bool VulkanReplay::IsOutputWindowVisible(uint64_t id)
@@ -191,4 +210,31 @@ VkResult WrappedVulkan::vkCreateXlibSurfaceKHR(
#endif
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
VkResult WrappedVulkan::vkCreateAndroidSurfaceKHR(
VkInstance instance,
const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkSurfaceKHR* pSurface)
{
// should not come in here at all on replay
RDCASSERT(m_State >= WRITING);
VkResult ret = ObjDisp(instance)->CreateAndroidSurfaceKHR(Unwrap(instance), pCreateInfo, pAllocator, pSurface);
if(ret == VK_SUCCESS)
{
GetResourceManager()->WrapResource(Unwrap(instance), *pSurface);
WrappedVkSurfaceKHR *wrapped = GetWrapped(*pSurface);
// since there's no point in allocating a full resource record and storing the window
// handle under there somewhere, we just cast. We won't use the resource record for anything
wrapped->record = (VkResourceRecord *)(uintptr_t)pCreateInfo->window;
}
return ret;
}
#endif
const char *VulkanLibraryName = "libvulkan.so";
+5
View File
@@ -36,6 +36,11 @@
#define WINDOW_HANDLE_DECL HWND wnd;
#define NULL_WND_HANDLE NULL
#elif defined(ANDROID)
#define WINDOW_HANDLE_DECL ANativeWindow *wnd;
#define NULL_WND_HANDLE NULL
#elif defined(RENDERDOC_PLATFORM_LINUX)
#include <xcb/xcb.h>
+7
View File
@@ -25,7 +25,10 @@
#include "os/os_specific.h"
#ifdef ANDROID
#else
#include <execinfo.h>
#endif
#include <stdio.h>
#include <string.h>
@@ -66,7 +69,11 @@ class LinuxCallstack : public Callstack::Stackwalk
{
void *addrs_ptr[ARRAY_COUNT(addrs)];
#ifdef ANDROID
numLevels = 0;
#else
numLevels = backtrace(addrs_ptr, ARRAY_COUNT(addrs));
#endif
int offs = 0;
// if we want to trim levels of the stack, we can do that here
+21
View File
@@ -36,12 +36,21 @@
#include <unistd.h>
#include <pwd.h>
#ifdef ANDROID
typedef int Display;
typedef int xcb_connection_t;
typedef int xcb_key_symbols_t;
typedef int KeySym;
typedef int xcb_keycode_t;
typedef int *iconv_t;
#else
#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <xcb/xcb_keysyms.h>
#include <iconv.h>
#endif
// for dladdr
#include <dlfcn.h>
@@ -67,7 +76,11 @@ namespace Keyboard
void UseConnection(xcb_connection_t *conn)
{
connection = conn;
#ifdef ANDROID
symbols = NULL;
#else
symbols = xcb_key_symbols_alloc(conn);
#endif
}
void AddInputWindow(void *wnd)
@@ -81,6 +94,9 @@ namespace Keyboard
bool GetKeyState(int key)
{
#ifdef ANDROID
return false;
#else
KeySym ks = 0;
if(symbols == NULL) return false;
@@ -145,6 +161,7 @@ namespace Keyboard
free(keys);
return ret;
#endif
}
}
@@ -427,6 +444,9 @@ namespace StringFormat
{
SCOPED_LOCK(lockWide2UTF8);
#ifdef ANDROID
ret = -1;
#else
if(iconvWide2UTF8 == (iconv_t)-1)
iconvWide2UTF8 = iconv_open("UTF-8", "WCHAR_T");
@@ -442,6 +462,7 @@ namespace StringFormat
size_t outsize = len;
ret = iconv(iconvWide2UTF8, &inbuf, &insize, &outbuf, &outsize);
#endif
}
if(ret == (size_t)-1)