mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-12 16:55:49 +00:00
Android: Get RenderDoc compiling
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user