From fdd1509ee5392f28a0c6d1021269a5d22c34933b Mon Sep 17 00:00:00 2001 From: xctan Date: Wed, 19 Feb 2025 00:33:55 +0800 Subject: [PATCH] [WRAPPER] Display Box64 version in Vulkan driver info (#2385) --- src/build_info.h | 15 +++++++++++ src/wrapped/generated/functions_list.txt | 1 + src/wrapped/generated/wrappedvulkantypes.h | 1 + src/wrapped/wrappedvulkan.c | 29 ++++++++++++++++++++++ src/wrapped/wrappedvulkan_private.h | 2 +- 5 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/build_info.h b/src/build_info.h index 18456a4b4a..17a02bb1b9 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 0f92e7dfbd..5883e4c28d 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 76fabe63d3..7bd22649d3 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 7fa8979421..1fb003c108 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 93982f13b6..603f76bd99 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)