about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-10-25 22:37:37 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-10-25 22:37:37 +0200
commit2a4fe80399c86cb1af05181109766e72b7292e65 (patch)
tree146c1ec328e714c2529c20213745ebc22b2308c0 /src
parent8999713301f7e79631e65403b861dbd7eb04d0b2 (diff)
downloadbox64-2a4fe80399c86cb1af05181109766e72b7292e65.tar.gz
box64-2a4fe80399c86cb1af05181109766e72b7292e65.zip
Fixed wrapping of vkCreateDebugUtilsMessengerEXT
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/wrappedvulkan.c43
-rw-r--r--src/wrapped/wrappedvulkan_private.h4
2 files changed, 44 insertions, 3 deletions
diff --git a/src/wrapped/wrappedvulkan.c b/src/wrapped/wrappedvulkan.c
index 973b4ef1..d5567ee0 100644
--- a/src/wrapped/wrappedvulkan.c
+++ b/src/wrapped/wrappedvulkan.c
@@ -207,6 +207,15 @@ typedef struct my_VkAllocationCallbacks_s {
     void*   pfnInternalFree;
 } my_VkAllocationCallbacks_t;
 
+typedef struct my_VkDebugUtilsMessengerCreateInfoEXT_s {
+    int          sType;
+    const void*  pNext;
+    int          flags;
+    int          messageSeverity;
+    int          messageType;
+    void*        pfnUserCallback;
+    void*        pUserData;
+} my_VkDebugUtilsMessengerCreateInfoEXT_t;
 
 #define SUPER() \
 GO(0)   \
@@ -347,6 +356,28 @@ static void* find_DebugReportCallbackEXT_Fct(void* fct)
     printf_log(LOG_NONE, "Warning, no more slot for Vulkan DebugReportCallbackEXT callback\n");
     return NULL;
 }
+// DebugUtilsMessengerCallback ...
+#define GO(A)   \
+static uintptr_t my_DebugUtilsMessengerCallback_fct_##A = 0;                            \
+static int my_DebugUtilsMessengerCallback_##A(int a, int b, void* c, void* d)           \
+{                                                                                       \
+    return RunFunctionFmt(my_DebugUtilsMessengerCallback_fct_##A, "iipp", a, b, c, d);  \
+}
+SUPER()
+#undef GO
+static void* find_DebugUtilsMessengerCallback_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_DebugUtilsMessengerCallback_fct_##A == (uintptr_t)fct) return my_DebugUtilsMessengerCallback_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_DebugUtilsMessengerCallback_fct_##A == 0) {my_DebugUtilsMessengerCallback_fct_##A = (uintptr_t)fct; return my_DebugUtilsMessengerCallback_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for Vulkan DebugUtilsMessengerCallback callback\n");
+    return NULL;
+}
 
 #undef SUPER
 
@@ -559,7 +590,17 @@ DESTROY64(vkDestroySwapchainKHR)
 
 DESTROY64(vkFreeMemory)
 
-CREATE(vkCreateDebugUtilsMessengerEXT)
+EXPORT int my_vkCreateDebugUtilsMessengerEXT(x64emu_t* emu, void* device, my_VkDebugUtilsMessengerCreateInfoEXT_t* pAllocateInfo, my_VkAllocationCallbacks_t* pAllocator, void* p)
+{
+    #define VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT 1000128004
+    my_VkAllocationCallbacks_t my_alloc;
+    my_VkDebugUtilsMessengerCreateInfoEXT_t* info = pAllocateInfo;
+    while(info && info->sType==VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) {
+        info->pfnUserCallback = find_DebugUtilsMessengerCallback_Fct(info->pfnUserCallback);
+        info = (my_VkDebugUtilsMessengerCreateInfoEXT_t*)info->pNext;
+    }
+    return my->vkCreateDebugUtilsMessengerEXT(device, pAllocateInfo, find_VkAllocationCallbacks(&my_alloc, pAllocator), p); 
+}
 DESTROY(vkDestroyDebugUtilsMessengerEXT)
 
 DESTROY64(vkDestroySurfaceKHR)
diff --git a/src/wrapped/wrappedvulkan_private.h b/src/wrapped/wrappedvulkan_private.h
index cbf18879..3d2d5cff 100644
--- a/src/wrapped/wrappedvulkan_private.h
+++ b/src/wrapped/wrappedvulkan_private.h
@@ -267,7 +267,7 @@ GO(vkDebugReportMessageEXT, vFpiiULipp)
 GOM(vkDestroyDebugReportCallbackEXT, iFEppp)
 
 //VK_EXT_debug_utils
-GO(vkCmdBeginDebugUtilsLabelEXT, vFpp)  //TODO: Cehck alignement of this extension
+GO(vkCmdBeginDebugUtilsLabelEXT, vFpp)  //TODO: Check alignement of this extension
 GO(vkCmdEndDebugUtilsLabelEXT, vFp)
 GO(vkCmdInsertDebugUtilsLabelEXT, vFpp)
 GOM(vkCreateDebugUtilsMessengerEXT, iFEpppp)
@@ -277,7 +277,7 @@ GO(vkQueueEndDebugUtilsLabelEXT, vFp)
 GO(vkQueueInsertDebugUtilsLabelEXT, vFpp)
 GO(vkSetDebugUtilsObjectNameEXT, iFpp)
 GO(vkSetDebugUtilsObjectTagEXT, iFpp)
-//GOM(vkSubmitDebugUtilsMessageEXT, vFEpppp)    // callback in last arguments
+GO(vkSubmitDebugUtilsMessageEXT, vFpppp)
 
 // VK_KHR_external_memory_capabilities
 GO(vkGetPhysicalDeviceExternalBufferPropertiesKHR, vFppp)