From 4e8556ae629543145b3d33e27c007d25c8012269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Mon, 2 Oct 2023 22:19:36 +0200 Subject: [PATCH] vrclient: Move json conversion to the unix side. CW-Bug-Id: #22729 --- vrclient_x64/Makefile.in | 1 + vrclient_x64/gen_wrapper.py | 4 +-- .../cppIVRClientCore_IVRClientCore_002.cpp | 8 ----- .../cppIVRClientCore_IVRClientCore_003.cpp | 8 ----- .../cppIVRMailbox_IVRMailbox_001.cpp | 8 ----- vrclient_x64/vrclient_x64/unix_private.h | 3 ++ .../vrclient_x64/unix_vrclientcore_manual.cpp | 34 +++++++++++++++++++ vrclient_x64/vrclient_x64/vrclient_main.c | 24 ------------- vrclient_x64/vrclient_x64/vrclient_private.h | 3 -- vrclient_x64/vrclient_x64/winIVRMailbox.c | 14 +++++++- 10 files changed, 53 insertions(+), 54 deletions(-) create mode 100644 vrclient_x64/vrclient_x64/unix_vrclientcore_manual.cpp diff --git a/vrclient_x64/Makefile.in b/vrclient_x64/Makefile.in index a7dbe80f..708cc5f2 100644 --- a/vrclient_x64/Makefile.in +++ b/vrclient_x64/Makefile.in @@ -144,6 +144,7 @@ SOURCES = \ vrclient_x64/cppIVRTrackedCamera_IVRTrackedCamera_006.cpp \ vrclient_x64/json_converter.cpp \ vrclient_x64/jsoncpp.cpp \ + vrclient_x64/unix_vrclientcore_manual.cpp \ vrclient_x64/unix_vrcompositor_manual.cpp \ vrclient_x64/unix_vroverlay_manual.cpp \ vrclient_x64/unix_vrrendermodels_manual.cpp \ diff --git a/vrclient_x64/gen_wrapper.py b/vrclient_x64/gen_wrapper.py index 1bdf969a..4da79598 100755 --- a/vrclient_x64/gen_wrapper.py +++ b/vrclient_x64/gen_wrapper.py @@ -216,7 +216,7 @@ unique_structs = [] MANUAL_METHODS = { "IVRClientCore_BIsHmdPresent": lambda ver, abi: abi == 'w', - "IVRClientCore_Init": lambda ver, abi: abi == 'w', + "IVRClientCore_Init": lambda ver, abi: True, "IVRClientCore_GetGenericInterface": lambda ver, abi: abi == 'w', "IVRClientCore_Cleanup": lambda ver, abi: abi == 'w', "IVRSystem_GetDXGIOutputInfo": lambda ver, abi: abi == 'w', @@ -235,7 +235,7 @@ MANUAL_METHODS = { "IVRRenderModels_LoadRenderModel": lambda ver, abi: ver > 1, "IVRRenderModels_LoadRenderModel_Async": True, "IVRRenderModels_FreeRenderModel": lambda ver, abi: ver > 1, - "IVRMailbox_undoc3": lambda ver, abi: abi == 'w', + "IVRMailbox_undoc3": lambda ver, abi: abi == 'u', "IVROverlay_SetOverlayTexture": True, "IVRInput_GetDigitalActionData": lambda ver, abi: abi == 'w' and ver > 3, } diff --git a/vrclient_x64/vrclient_x64/cppIVRClientCore_IVRClientCore_002.cpp b/vrclient_x64/vrclient_x64/cppIVRClientCore_IVRClientCore_002.cpp index 03869c68..1734abf9 100644 --- a/vrclient_x64/vrclient_x64/cppIVRClientCore_IVRClientCore_002.cpp +++ b/vrclient_x64/vrclient_x64/cppIVRClientCore_IVRClientCore_002.cpp @@ -1,14 +1,6 @@ /* This file is auto-generated, do not edit. */ #include "unix_private.h" -NTSTATUS IVRClientCore_IVRClientCore_002_Init( void *args ) -{ - struct IVRClientCore_IVRClientCore_002_Init_params *params = (struct IVRClientCore_IVRClientCore_002_Init_params *)args; - struct u_IVRClientCore_IVRClientCore_002 *iface = (struct u_IVRClientCore_IVRClientCore_002 *)params->linux_side; - params->_ret = (uint32_t)iface->Init( params->eApplicationType ); - return 0; -} - NTSTATUS IVRClientCore_IVRClientCore_002_Cleanup( void *args ) { struct IVRClientCore_IVRClientCore_002_Cleanup_params *params = (struct IVRClientCore_IVRClientCore_002_Cleanup_params *)args; diff --git a/vrclient_x64/vrclient_x64/cppIVRClientCore_IVRClientCore_003.cpp b/vrclient_x64/vrclient_x64/cppIVRClientCore_IVRClientCore_003.cpp index 22f6cf1f..4cd7cbe2 100644 --- a/vrclient_x64/vrclient_x64/cppIVRClientCore_IVRClientCore_003.cpp +++ b/vrclient_x64/vrclient_x64/cppIVRClientCore_IVRClientCore_003.cpp @@ -1,14 +1,6 @@ /* This file is auto-generated, do not edit. */ #include "unix_private.h" -NTSTATUS IVRClientCore_IVRClientCore_003_Init( void *args ) -{ - struct IVRClientCore_IVRClientCore_003_Init_params *params = (struct IVRClientCore_IVRClientCore_003_Init_params *)args; - struct u_IVRClientCore_IVRClientCore_003 *iface = (struct u_IVRClientCore_IVRClientCore_003 *)params->linux_side; - params->_ret = (uint32_t)iface->Init( params->eApplicationType, params->pStartupInfo ); - return 0; -} - NTSTATUS IVRClientCore_IVRClientCore_003_Cleanup( void *args ) { struct IVRClientCore_IVRClientCore_003_Cleanup_params *params = (struct IVRClientCore_IVRClientCore_003_Cleanup_params *)args; diff --git a/vrclient_x64/vrclient_x64/cppIVRMailbox_IVRMailbox_001.cpp b/vrclient_x64/vrclient_x64/cppIVRMailbox_IVRMailbox_001.cpp index 0d434467..5ddcfbf5 100644 --- a/vrclient_x64/vrclient_x64/cppIVRMailbox_IVRMailbox_001.cpp +++ b/vrclient_x64/vrclient_x64/cppIVRMailbox_IVRMailbox_001.cpp @@ -17,14 +17,6 @@ NTSTATUS IVRMailbox_IVRMailbox_001_undoc2( void *args ) return 0; } -NTSTATUS IVRMailbox_IVRMailbox_001_undoc3( void *args ) -{ - struct IVRMailbox_IVRMailbox_001_undoc3_params *params = (struct IVRMailbox_IVRMailbox_001_undoc3_params *)args; - struct u_IVRMailbox_IVRMailbox_001 *iface = (struct u_IVRMailbox_IVRMailbox_001 *)params->linux_side; - params->_ret = (uint32_t)iface->undoc3( params->a, params->b, params->c ); - return 0; -} - NTSTATUS IVRMailbox_IVRMailbox_001_undoc4( void *args ) { struct IVRMailbox_IVRMailbox_001_undoc4_params *params = (struct IVRMailbox_IVRMailbox_001_undoc4_params *)args; diff --git a/vrclient_x64/vrclient_x64/unix_private.h b/vrclient_x64/vrclient_x64/unix_private.h index e76ce935..37e7998d 100644 --- a/vrclient_x64/vrclient_x64/unix_private.h +++ b/vrclient_x64/vrclient_x64/unix_private.h @@ -22,6 +22,9 @@ extern VkPhysicalDevice_T *(WINAPI *p_get_native_VkPhysicalDevice)( VkPhysicalDe extern VkPhysicalDevice_T *(WINAPI *p_get_wrapped_VkPhysicalDevice)( VkInstance_T *, VkPhysicalDevice_T * ); extern VkQueue_T *(WINAPI *p_get_native_VkQueue)( VkQueue_T * ); +extern char *json_convert_startup_info(const char *startup_info); +extern char *json_convert_paths(const char *input); + #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ diff --git a/vrclient_x64/vrclient_x64/unix_vrclientcore_manual.cpp b/vrclient_x64/vrclient_x64/unix_vrclientcore_manual.cpp new file mode 100644 index 00000000..b6910065 --- /dev/null +++ b/vrclient_x64/vrclient_x64/unix_vrclientcore_manual.cpp @@ -0,0 +1,34 @@ +#include "unix_private.h" + +#include + +NTSTATUS IVRClientCore_IVRClientCore_002_Init( void *args ) +{ + struct IVRClientCore_IVRClientCore_002_Init_params *params = (struct IVRClientCore_IVRClientCore_002_Init_params *)args; + struct u_IVRClientCore_IVRClientCore_002 *iface = (struct u_IVRClientCore_IVRClientCore_002 *)params->linux_side; + params->_ret = (uint32_t)iface->Init( params->eApplicationType ); + return 0; +} + +NTSTATUS IVRClientCore_IVRClientCore_003_Init( void *args ) +{ + struct IVRClientCore_IVRClientCore_003_Init_params *params = (struct IVRClientCore_IVRClientCore_003_Init_params *)args; + struct u_IVRClientCore_IVRClientCore_003 *iface = (struct u_IVRClientCore_IVRClientCore_003 *)params->linux_side; + const char *startup_info = json_convert_startup_info( params->pStartupInfo ); + if (!startup_info) startup_info = params->pStartupInfo; + + params->_ret = (uint32_t)iface->Init( params->eApplicationType, startup_info ); + + if (startup_info != params->pStartupInfo) free( (char *)startup_info ); + return 0; +} + +NTSTATUS IVRMailbox_IVRMailbox_001_undoc3( void *args ) +{ + struct IVRMailbox_IVRMailbox_001_undoc3_params *params = (struct IVRMailbox_IVRMailbox_001_undoc3_params *)args; + struct u_IVRMailbox_IVRMailbox_001 *iface = (struct u_IVRMailbox_IVRMailbox_001 *)params->linux_side; + char *c = json_convert_paths( params->c ); + params->_ret = (uint32_t)iface->undoc3( params->a, params->b, c ); + free( c ); + return 0; +} diff --git a/vrclient_x64/vrclient_x64/vrclient_main.c b/vrclient_x64/vrclient_x64/vrclient_main.c index dd09678e..40061b7f 100644 --- a/vrclient_x64/vrclient_x64/vrclient_main.c +++ b/vrclient_x64/vrclient_x64/vrclient_main.c @@ -533,18 +533,13 @@ uint32_t __thiscall winIVRClientCore_IVRClientCore_003_Init( struct w_steam_ifac .eApplicationType = eApplicationType, .pStartupInfo = pStartupInfo, }; - char *startup_info_converted; TRACE( "%p\n", _this ); - startup_info_converted = json_convert_startup_info( pStartupInfo ); - if (startup_info_converted) params.pStartupInfo = startup_info_converted; InitializeCriticalSection( &_this->user_data.critical_section ); VRCLIENT_CALL( IVRClientCore_IVRClientCore_003_Init, ¶ms ); - free( startup_info_converted ); - if (params._ret) WARN( "error %#x\n", params._ret ); else compositor_data.client_core_linux_side = params.linux_side; @@ -608,22 +603,3 @@ bool __thiscall winIVRClientCore_IVRClientCore_003_BIsHmdPresent( struct w_steam return TRUE; } - -uint32_t __thiscall winIVRMailbox_IVRMailbox_001_undoc3( struct w_steam_iface *_this, uint64_t a, - const char *b, const char *c ) -{ - struct IVRMailbox_IVRMailbox_001_undoc3_params params = - { - .linux_side = _this->u_iface, - .a = a, - .b = b, - .c = json_convert_paths(c), - }; - - TRACE( "%p\n", _this ); - - VRCLIENT_CALL( IVRMailbox_IVRMailbox_001_undoc3, ¶ms ); - free( (char *)params.c ); - - return params._ret; -} diff --git a/vrclient_x64/vrclient_x64/vrclient_private.h b/vrclient_x64/vrclient_x64/vrclient_private.h index 344451f6..077c5d8b 100644 --- a/vrclient_x64/vrclient_x64/vrclient_private.h +++ b/vrclient_x64/vrclient_x64/vrclient_private.h @@ -16,9 +16,6 @@ typedef void (*vtable_ptr)(void); extern "C" { #endif -char *json_convert_paths(const char *input); -char *json_convert_startup_info(const char *startup_info); - char *vrclient_dos_to_unix_path( const char *src ); void vrclient_free_path( const char *path ); diff --git a/vrclient_x64/vrclient_x64/winIVRMailbox.c b/vrclient_x64/vrclient_x64/winIVRMailbox.c index d6488584..b4745f36 100644 --- a/vrclient_x64/vrclient_x64/winIVRMailbox.c +++ b/vrclient_x64/vrclient_x64/winIVRMailbox.c @@ -38,7 +38,19 @@ uint32_t __thiscall winIVRMailbox_IVRMailbox_001_undoc2(struct w_steam_iface *_t return params._ret; } -extern uint32_t __thiscall winIVRMailbox_IVRMailbox_001_undoc3(struct w_steam_iface *_this, uint64_t a, const char *b, const char *c); +uint32_t __thiscall winIVRMailbox_IVRMailbox_001_undoc3(struct w_steam_iface *_this, uint64_t a, const char *b, const char *c) +{ + struct IVRMailbox_IVRMailbox_001_undoc3_params params = + { + .linux_side = _this->u_iface, + .a = a, + .b = b, + .c = c, + }; + TRACE("%p\n", _this); + VRCLIENT_CALL( IVRMailbox_IVRMailbox_001_undoc3, ¶ms ); + return params._ret; +} uint32_t __thiscall winIVRMailbox_IVRMailbox_001_undoc4(struct w_steam_iface *_this, uint64_t a, char *b, uint32_t c, uint32_t *d) {