about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libtools/myalign.c2
-rw-r--r--src/wrapped/generated/functions_list.txt1
-rw-r--r--src/wrapped/generated/wrapper.c2
-rw-r--r--src/wrapped/generated/wrapper.h1
-rw-r--r--src/wrapped/wrappedvulkan.c20
-rw-r--r--src/wrapped/wrappedvulkan_private.h2
6 files changed, 25 insertions, 3 deletions
diff --git a/src/libtools/myalign.c b/src/libtools/myalign.c
index 7958960f..01701346 100644
--- a/src/libtools/myalign.c
+++ b/src/libtools/myalign.c
@@ -1227,7 +1227,7 @@ typedef struct x64_xcb_connection_s {
     x64_xcb_xid_t xid;
 } x64_xcb_connection_t;
 
-#define NXCB 4
+#define NXCB 8
 my_xcb_connection_t* my_xcb_connects[NXCB] = {0};
 x64_xcb_connection_t x64_xcb_connects[NXCB] = {0};
 
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 2d64d4d7..29a30803 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -1027,6 +1027,7 @@
 #() iFpupL
 #() iFpupp
 #() iFpupV
+#() iFpubp
 #() iFpUup
 #() iFpUUU
 #() iFpULp
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 96bb1b97..c341f099 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -1065,6 +1065,7 @@ typedef int32_t (*iFpupU_t)(void*, uint32_t, void*, uint64_t);
 typedef int32_t (*iFpupL_t)(void*, uint32_t, void*, uintptr_t);
 typedef int32_t (*iFpupp_t)(void*, uint32_t, void*, void*);
 typedef int32_t (*iFpupV_t)(void*, uint32_t, void*, void*);
+typedef int32_t (*iFpubp_t)(void*, uint32_t, void*, void*);
 typedef int32_t (*iFpUup_t)(void*, uint64_t, uint32_t, void*);
 typedef int32_t (*iFpUUU_t)(void*, uint64_t, uint64_t, uint64_t);
 typedef int32_t (*iFpULp_t)(void*, uint64_t, uintptr_t, void*);
@@ -4098,6 +4099,7 @@ void iFpupU(x64emu_t *emu, uintptr_t fcn) { iFpupU_t fn = (iFpupU_t)fcn; R_RAX=(
 void iFpupL(x64emu_t *emu, uintptr_t fcn) { iFpupL_t fn = (iFpupL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); }
 void iFpupp(x64emu_t *emu, uintptr_t fcn) { iFpupp_t fn = (iFpupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void iFpupV(x64emu_t *emu, uintptr_t fcn) { iFpupV_t fn = (iFpupV_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); }
+void iFpubp(x64emu_t *emu, uintptr_t fcn) { iFpubp_t fn = (iFpubp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDX); R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, aligned_xcb, (void*)R_RCX); unalign_xcb_connection(aligned_xcb, (void*)R_RDX); }
 void iFpUup(x64emu_t *emu, uintptr_t fcn) { iFpUup_t fn = (iFpUup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); }
 void iFpUUU(x64emu_t *emu, uintptr_t fcn) { iFpUUU_t fn = (iFpUUU_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX); }
 void iFpULp(x64emu_t *emu, uintptr_t fcn) { iFpULp_t fn = (iFpULp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); }
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index b081130f..2d65e04d 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -1065,6 +1065,7 @@ void iFpupU(x64emu_t *emu, uintptr_t fnc);
 void iFpupL(x64emu_t *emu, uintptr_t fnc);
 void iFpupp(x64emu_t *emu, uintptr_t fnc);
 void iFpupV(x64emu_t *emu, uintptr_t fnc);
+void iFpubp(x64emu_t *emu, uintptr_t fnc);
 void iFpUup(x64emu_t *emu, uintptr_t fnc);
 void iFpUUU(x64emu_t *emu, uintptr_t fnc);
 void iFpULp(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedvulkan.c b/src/wrapped/wrappedvulkan.c
index 02a729b1..3c8e7b46 100644
--- a/src/wrapped/wrappedvulkan.c
+++ b/src/wrapped/wrappedvulkan.c
@@ -15,6 +15,7 @@
 #include "box64context.h"
 #include "librarian.h"
 #include "callback.h"
+#include "myalign.h"
 
 //extern char* libvulkan;
 
@@ -225,6 +226,14 @@ typedef struct my_VkDebugReportCallbackCreateInfoEXT_s {
     void*       pUserData;
 } my_VkDebugReportCallbackCreateInfoEXT_t;
 
+typedef struct my_VkXcbSurfaceCreateInfoKHR_s {
+    int         sType;
+    const void* pNext;
+    uint32_t    flags;
+    void**      connection;
+    int         window;
+} my_VkXcbSurfaceCreateInfoKHR_t;
+
 typedef struct my_VkStruct_s {
     int         sType;
     struct my_VkStruct_s* pNext;
@@ -582,7 +591,16 @@ EXPORT int my_vkCreateSharedSwapchainsKHR(x64emu_t* emu, void* device, uint32_t
 
 CREATE(vkCreateSwapchainKHR)
 CREATE(vkCreateWaylandSurfaceKHR)
-CREATE(vkCreateXcbSurfaceKHR)
+EXPORT int my_vkCreateXcbSurfaceKHR(x64emu_t* emu, void* instance, void* info, my_VkAllocationCallbacks_t* pAllocator, void* pFence)
+{
+    my_VkAllocationCallbacks_t my_alloc;
+    my_VkXcbSurfaceCreateInfoKHR_t* surfaceinfo = info;
+    void* old_conn = surfaceinfo->connection;
+    surfaceinfo->connection = align_xcb_connection(old_conn);
+    int ret = my->vkCreateXcbSurfaceKHR(instance, info, find_VkAllocationCallbacks(&my_alloc, pAllocator), pFence);
+    surfaceinfo->connection = old_conn;
+    return ret;
+}
 CREATE(vkCreateXlibSurfaceKHR)
 CREATE(vkCreateRenderPass2)
 CREATE(vkCreateRenderPass2KHR)
diff --git a/src/wrapped/wrappedvulkan_private.h b/src/wrapped/wrappedvulkan_private.h
index a7afdd59..2d0f4178 100644
--- a/src/wrapped/wrappedvulkan_private.h
+++ b/src/wrapped/wrappedvulkan_private.h
@@ -304,7 +304,7 @@ GO(vkGetPhysicalDeviceSurfaceSupportKHR, iFpuUp)
 
 // VK_KHR_xcb_surface
 GOM(vkCreateXcbSurfaceKHR, iFEpppp)
-GO(vkGetPhysicalDeviceXcbPresentationSupportKHR, iFpupp)
+GO(vkGetPhysicalDeviceXcbPresentationSupportKHR, iFpubp)
 
 // VK_KHR_xlib_surface
 GOM(vkCreateXlibSurfaceKHR, iFEpppp)