From: Józef Kucia jkucia@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- libs/vkd3d/device.c | 7 +++++-- libs/vkd3d/utils.c | 31 +++++++++++++++++++++++++++++++ libs/vkd3d/vkd3d_private.h | 2 ++ 3 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 3476fdead708..4b5e4492ac3f 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -527,8 +527,6 @@ static HRESULT vkd3d_instance_init(struct vkd3d_instance *instance,
application_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; application_info.pNext = NULL; - application_info.pApplicationName = NULL; - application_info.applicationVersion = 0; application_info.pEngineName = PACKAGE_NAME; application_info.engineVersion = vkd3d_get_vk_version(); application_info.apiVersion = VK_API_VERSION_1_0; @@ -543,6 +541,11 @@ static HRESULT vkd3d_instance_init(struct vkd3d_instance *instance, application_info.engineVersion = vkd3d_application_info->engine_version; } } + else + { + application_info.pApplicationName = vkd3d_get_program_name(); + application_info.applicationVersion = 0; + }
if (!(extensions = vkd3d_calloc(extension_count, sizeof(*extensions)))) { diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c index ea468b37d37d..21919815537a 100644 --- a/libs/vkd3d/utils.c +++ b/libs/vkd3d/utils.c @@ -602,6 +602,37 @@ HRESULT vkd3d_load_vk_device_procs(struct vkd3d_vk_device_procs *procs, return S_OK; }
+const char *vkd3d_get_program_name(void) +{ +#ifdef _GNU_SOURCE + char *name; + + if ((name = strrchr(program_invocation_name, '/'))) + { + const char *path = realpath("/proc/self/exe", NULL); + + /* Try to strip command line arguments. */ + if (path && !strncmp(path, program_invocation_name, strlen(path))) + { + const char *p = strrchr(path, '/'); + + if (p) + return p + 1; + } + + return name + 1; + } + + if ((name = strrchr(program_invocation_name, '\'))) + return name + 1; + + return program_invocation_name; + +#else + return NULL; +#endif +} + static struct vkd3d_private_data *vkd3d_private_store_get_private_data( const struct vkd3d_private_store *store, const GUID *tag) { diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 057a0a7c0dea..da177d346ec9 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -1126,6 +1126,8 @@ HRESULT vkd3d_load_vk_device_procs(struct vkd3d_vk_device_procs *procs,
extern const char vkd3d_build[];
+const char *vkd3d_get_program_name(void) DECLSPEC_HIDDEN; + static inline void vkd3d_set_thread_name(const char *name) { #if defined(HAVE_PTHREAD_SETNAME_NP_2)