diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/libtools/myalign.c | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 1 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 1 | ||||
| -rw-r--r-- | src/wrapped/wrappedvulkan.c | 20 | ||||
| -rw-r--r-- | src/wrapped/wrappedvulkan_private.h | 2 |
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) |