about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorxctan <xctan@cirno.icu>2025-02-19 00:33:55 +0800
committerGitHub <noreply@github.com>2025-02-18 17:33:55 +0100
commitfdd1509ee5392f28a0c6d1021269a5d22c34933b (patch)
treeaf67d8468cab2145e8296603a0c0b7a089102e3a
parent52a9443f5316bd6484206ea81c4f4c7b7436ca50 (diff)
downloadbox64-fdd1509ee5392f28a0c6d1021269a5d22c34933b.tar.gz
box64-fdd1509ee5392f28a0c6d1021269a5d22c34933b.zip
[WRAPPER] Display Box64 version in Vulkan driver info (#2385)
-rw-r--r--src/build_info.h15
-rw-r--r--src/wrapped/generated/functions_list.txt1
-rw-r--r--src/wrapped/generated/wrappedvulkantypes.h1
-rw-r--r--src/wrapped/wrappedvulkan.c29
-rw-r--r--src/wrapped/wrappedvulkan_private.h2
5 files changed, 47 insertions, 1 deletions
diff --git a/src/build_info.h b/src/build_info.h
index 18456a4b..17a02bb1 100644
--- a/src/build_info.h
+++ b/src/build_info.h
@@ -1,6 +1,21 @@
+#include "box64version.h"
+#ifdef NOGIT
+#define GITREV "nogit"
+#else
+#include "git_head.h"
+#endif
+
 #ifndef __BUILD_INFO_H__
 #define __BUILD_INFO_H__
 
 void PrintBox64Version(void);
 
+#define BOX64_BUILD_INFO_STR_HELPER(x) #x
+#define BOX64_BUILD_INFO_STR(x) BOX64_BUILD_INFO_STR_HELPER(x)
+
+#define BOX64_BUILD_INFO_STRING \
+    "Box64" \
+    " v" BOX64_BUILD_INFO_STR(BOX64_MAJOR) "." BOX64_BUILD_INFO_STR(BOX64_MINOR) "." BOX64_BUILD_INFO_STR(BOX64_REVISION) \
+    " " GITREV
+
 #endif //__BUILD_INFO_H__
\ No newline at end of file
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 0f92e7df..5883e4c2 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -6058,6 +6058,7 @@ wrappedvulkan:
   - vkDestroyInstance
   - vkGetPhysicalDeviceMemoryProperties
   - vkGetPhysicalDeviceProperties
+  - vkGetPhysicalDeviceProperties2
 - pFpp:
   - vkGetDeviceProcAddr
   - vkGetInstanceProcAddr
diff --git a/src/wrapped/generated/wrappedvulkantypes.h b/src/wrapped/generated/wrappedvulkantypes.h
index 76fabe63..7bd22649 100644
--- a/src/wrapped/generated/wrappedvulkantypes.h
+++ b/src/wrapped/generated/wrappedvulkantypes.h
@@ -32,6 +32,7 @@ typedef void (*vFpuuuupupup_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, vo
 	GO(vkDestroyInstance, vFpp_t) \
 	GO(vkGetPhysicalDeviceMemoryProperties, vFpp_t) \
 	GO(vkGetPhysicalDeviceProperties, vFpp_t) \
+	GO(vkGetPhysicalDeviceProperties2, vFpp_t) \
 	GO(vkGetDeviceProcAddr, pFpp_t) \
 	GO(vkGetInstanceProcAddr, pFpp_t) \
 	GO(vkDestroyAccelerationStructureKHR, vFpUp_t) \
diff --git a/src/wrapped/wrappedvulkan.c b/src/wrapped/wrappedvulkan.c
index 7fa89794..1fb003c1 100644
--- a/src/wrapped/wrappedvulkan.c
+++ b/src/wrapped/wrappedvulkan.c
@@ -16,6 +16,7 @@
 #include "librarian.h"
 #include "callback.h"
 #include "myalign.h"
+#include "build_info.h"
 
 //extern char* libvulkan;
 
@@ -233,6 +234,18 @@ typedef struct my_VkXcbSurfaceCreateInfoKHR_s {
     int         window;
 } my_VkXcbSurfaceCreateInfoKHR_t;
 
+#define VK_MAX_DRIVER_NAME_SIZE 256
+#define VK_MAX_DRIVER_INFO_SIZE 256
+
+typedef struct my_VkPhysicalDeviceVulkan12Properties_s {
+    int   sType;
+    void* pNext;
+    int   driverID;
+    char  driverName[VK_MAX_DRIVER_NAME_SIZE];
+    char  driverInfo[VK_MAX_DRIVER_INFO_SIZE];
+    uint32_t __others[49];
+} my_VkPhysicalDeviceVulkan12Properties_t;
+
 typedef struct my_VkStruct_s {
     int         sType;
     struct my_VkStruct_s* pNext;
@@ -799,3 +812,19 @@ EXPORT void my_vkDestroyDebugReportCallbackEXT(x64emu_t* emu, void* instance, vo
 }
 
 CREATE(vkCreateHeadlessSurfaceEXT)
+
+EXPORT void my_vkGetPhysicalDeviceProperties2(x64emu_t* emu, void* device, void* pProps)
+{
+    my->vkGetPhysicalDeviceProperties2(device, pProps);
+    my_VkStruct_t *p = pProps;
+    while (p != NULL) {
+        // find VkPhysicalDeviceVulkan12Properties
+        // VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES = 52
+        if(p->sType == 52) {
+            my_VkPhysicalDeviceVulkan12Properties_t *pp = (my_VkPhysicalDeviceVulkan12Properties_t*)p;
+            strncat(pp->driverInfo, " with " BOX64_BUILD_INFO_STRING, VK_MAX_DRIVER_INFO_SIZE - strlen(pp->driverInfo) - 1);
+            break;
+        }
+        p = p->pNext;
+    }
+}
\ No newline at end of file
diff --git a/src/wrapped/wrappedvulkan_private.h b/src/wrapped/wrappedvulkan_private.h
index 93982f13..603f76bd 100644
--- a/src/wrapped/wrappedvulkan_private.h
+++ b/src/wrapped/wrappedvulkan_private.h
@@ -200,7 +200,7 @@ GO(vkGetPhysicalDeviceFeatures2, vFpp)
 GO(vkGetPhysicalDeviceFormatProperties2, vFpip)
 GO(vkGetPhysicalDeviceImageFormatProperties2, iFppp)
 GO(vkGetPhysicalDeviceMemoryProperties2, vFpp)
-GO(vkGetPhysicalDeviceProperties2, vFpp)
+GOM(vkGetPhysicalDeviceProperties2, vFEpp)
 GO(vkGetPhysicalDeviceQueueFamilyProperties2, vFppp)    //VkQueueFamilyProperties2 seems OK
 GO(vkGetPhysicalDeviceSparseImageFormatProperties2, vFpppp) //VkSparseImageFormatProperties2 seems OK
 GO(vkGetPhysicalDeviceToolProperties, iFppp)