From b0696e862956417946d8642028f877181d07ecf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Wed, 27 Sep 2023 09:39:03 +0200 Subject: [PATCH] vrclient: Inline some IVRInput override code. CW-Bug-Id: #22729 --- vrclient_x64/vrclient_x64/vrinput_manual.c | 78 ++++++++++++++-------- 1 file changed, 50 insertions(+), 28 deletions(-) diff --git a/vrclient_x64/vrclient_x64/vrinput_manual.c b/vrclient_x64/vrclient_x64/vrinput_manual.c index 252074fa..fd1bbca5 100644 --- a/vrclient_x64/vrclient_x64/vrinput_manual.c +++ b/vrclient_x64/vrclient_x64/vrinput_manual.c @@ -32,32 +32,19 @@ struct winInputDigitalActionData_t } __attribute__((ms_struct)); #pragma pack( pop ) -static EVRInputError ivrinput_get_digital_action_data( void *func, void *linux_side, VRActionHandle_t action_handle, - void *action_data, uint32_t action_data_size, +#ifndef __x86_64__ +static EVRInputError ivrinput_get_digital_action_data( VRActionHandle_t action_handle, void *action_data, uint32_t action_data_size, VRInputValueHandle_t restrict_to_device, unsigned int version ) { - EVRInputError (*cpp_func)( void *, VRActionHandle_t, struct winInputDigitalActionData_t *, - uint32_t, VRInputValueHandle_t ) = func; - -#ifdef __x86_64__ - TRACE( "%p\n", linux_side ); - return cpp_func( linux_side, action_handle, action_data, action_data_size, restrict_to_device ); -#else /* Digital action state change fixup hack. */ struct winInputDigitalActionData_t *data = action_data; LARGE_INTEGER qpf; - EVRInputError ret; unsigned int i; - ret = cpp_func( linux_side, action_handle, action_data, action_data_size, restrict_to_device ); - - TRACE( "handle %s, data %p, data_size %u, restrict %s, origin %s, state %#x, changed %#x, ret " - "%u, active %#x.\n", + TRACE( "handle %s, data %p, data_size %u, restrict %s, origin %s, state %#x, changed %#x, active %#x.\n", wine_dbgstr_longlong( action_handle ), action_data, action_data_size, wine_dbgstr_longlong( restrict_to_device ), wine_dbgstr_longlong( data->activeOrigin ), - data->bState, data->bChanged, ret, data->bActive ); - - if (ret) return ret; + data->bState, data->bChanged, data->bActive ); if (action_data_size != sizeof(*data)) { @@ -105,18 +92,25 @@ static EVRInputError ivrinput_get_digital_action_data( void *func, void *linux_s ++compositor_data.digital_action_count; return 0; -#endif } +#endif EVRInputError __thiscall winIVRInput_IVRInput_004_GetDigitalActionData( struct w_steam_iface *_this, VRActionHandle_t action, winInputDigitalActionData_t_1017 *pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) { EVRInputError _ret; + TRACE( "%p\n", _this ); - _ret = ivrinput_get_digital_action_data( cppIVRInput_IVRInput_004_GetDigitalActionData, _this->u_iface, - action, pActionData, unActionDataSize, ulRestrictToDevice, 4 ); + + _ret = cppIVRInput_IVRInput_004_GetDigitalActionData( _this->u_iface, action, pActionData, + unActionDataSize, ulRestrictToDevice ); +#ifdef __x86_64__ return _ret; +#else + if (_ret) return _ret; + return ivrinput_get_digital_action_data( action, pActionData, unActionDataSize, ulRestrictToDevice, 4 ); +#endif } EVRInputError __thiscall winIVRInput_IVRInput_005_GetDigitalActionData( struct w_steam_iface *_this, VRActionHandle_t action, @@ -124,10 +118,17 @@ EVRInputError __thiscall winIVRInput_IVRInput_005_GetDigitalActionData( struct w uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) { EVRInputError _ret; + TRACE( "%p\n", _this ); - _ret = ivrinput_get_digital_action_data( cppIVRInput_IVRInput_005_GetDigitalActionData, _this->u_iface, - action, pActionData, unActionDataSize, ulRestrictToDevice, 5 ); + + _ret = cppIVRInput_IVRInput_005_GetDigitalActionData( _this->u_iface, action, pActionData, + unActionDataSize, ulRestrictToDevice ); +#ifdef __x86_64__ return _ret; +#else + if (_ret) return _ret; + return ivrinput_get_digital_action_data( action, pActionData, unActionDataSize, ulRestrictToDevice, 5 ); +#endif } EVRInputError __thiscall winIVRInput_IVRInput_006_GetDigitalActionData( struct w_steam_iface *_this, VRActionHandle_t action, @@ -135,10 +136,17 @@ EVRInputError __thiscall winIVRInput_IVRInput_006_GetDigitalActionData( struct w uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) { EVRInputError _ret; + TRACE( "%p\n", _this ); - _ret = ivrinput_get_digital_action_data( cppIVRInput_IVRInput_006_GetDigitalActionData, _this->u_iface, - action, pActionData, unActionDataSize, ulRestrictToDevice, 6 ); + + _ret = cppIVRInput_IVRInput_006_GetDigitalActionData( _this->u_iface, action, pActionData, + unActionDataSize, ulRestrictToDevice ); +#ifdef __x86_64__ return _ret; +#else + if (_ret) return _ret; + return ivrinput_get_digital_action_data( action, pActionData, unActionDataSize, ulRestrictToDevice, 6 ); +#endif } EVRInputError __thiscall winIVRInput_IVRInput_007_GetDigitalActionData( struct w_steam_iface *_this, VRActionHandle_t action, @@ -146,10 +154,17 @@ EVRInputError __thiscall winIVRInput_IVRInput_007_GetDigitalActionData( struct w uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) { EVRInputError _ret; + TRACE( "%p\n", _this ); - _ret = ivrinput_get_digital_action_data( cppIVRInput_IVRInput_007_GetDigitalActionData, _this->u_iface, - action, pActionData, unActionDataSize, ulRestrictToDevice, 7 ); + + _ret = cppIVRInput_IVRInput_007_GetDigitalActionData( _this->u_iface, action, pActionData, + unActionDataSize, ulRestrictToDevice ); +#ifdef __x86_64__ return _ret; +#else + if (_ret) return _ret; + return ivrinput_get_digital_action_data( action, pActionData, unActionDataSize, ulRestrictToDevice, 7 ); +#endif } EVRInputError __thiscall winIVRInput_IVRInput_010_GetDigitalActionData( struct w_steam_iface *_this, VRActionHandle_t action, @@ -157,8 +172,15 @@ EVRInputError __thiscall winIVRInput_IVRInput_010_GetDigitalActionData( struct w uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) { EVRInputError _ret; + TRACE( "%p\n", _this ); - _ret = ivrinput_get_digital_action_data( cppIVRInput_IVRInput_010_GetDigitalActionData, _this->u_iface, - action, pActionData, unActionDataSize, ulRestrictToDevice, 10 ); + + _ret = cppIVRInput_IVRInput_010_GetDigitalActionData( _this->u_iface, action, pActionData, + unActionDataSize, ulRestrictToDevice ); +#ifdef __x86_64__ return _ret; +#else + if (_ret) return _ret; + return ivrinput_get_digital_action_data( action, pActionData, unActionDataSize, ulRestrictToDevice, 10 ); +#endif }