mirror of
https://github.com/ValveSoftware/Proton.git
synced 2025-02-04 17:50:42 +03:00
parent
cf89fdf018
commit
fd5711e93b
@ -214,6 +214,12 @@ all_versions = {}
|
|||||||
unique_structs = []
|
unique_structs = []
|
||||||
|
|
||||||
|
|
||||||
|
UNIX_FUNCS = [
|
||||||
|
'vrclient_init',
|
||||||
|
'vrclient_HmdSystemFactory',
|
||||||
|
'vrclient_VRClientCoreFactory',
|
||||||
|
]
|
||||||
|
|
||||||
MANUAL_METHODS = {
|
MANUAL_METHODS = {
|
||||||
"IVRClientCore_BIsHmdPresent": lambda ver, abi: abi == 'w',
|
"IVRClientCore_BIsHmdPresent": lambda ver, abi: abi == 'w',
|
||||||
"IVRClientCore_Init": lambda ver, abi: True,
|
"IVRClientCore_Init": lambda ver, abi: True,
|
||||||
@ -1583,6 +1589,8 @@ with open(u"vrclient_x64/unixlib_generated.h", "w") as file:
|
|||||||
|
|
||||||
out(u'enum unix_funcs\n')
|
out(u'enum unix_funcs\n')
|
||||||
out(u'{\n')
|
out(u'{\n')
|
||||||
|
for func in UNIX_FUNCS:
|
||||||
|
out(f' unix_{func},\n')
|
||||||
for klass, method in all_methods:
|
for klass, method in all_methods:
|
||||||
sdkver = klass._sdkver
|
sdkver = klass._sdkver
|
||||||
if type(method) is Destructor:
|
if type(method) is Destructor:
|
||||||
@ -1604,6 +1612,8 @@ with open('vrclient_x64/unixlib_generated.cpp', 'w') as file:
|
|||||||
|
|
||||||
out(u'extern "C" const unixlib_entry_t __wine_unix_call_funcs[] =\n')
|
out(u'extern "C" const unixlib_entry_t __wine_unix_call_funcs[] =\n')
|
||||||
out(u'{\n')
|
out(u'{\n')
|
||||||
|
for func in UNIX_FUNCS:
|
||||||
|
out(f' {func},\n')
|
||||||
for klass, method in all_methods:
|
for klass, method in all_methods:
|
||||||
sdkver = klass._sdkver
|
sdkver = klass._sdkver
|
||||||
if type(method) is Destructor:
|
if type(method) is Destructor:
|
||||||
|
@ -25,6 +25,10 @@ extern VkQueue_T *(WINAPI *p_get_native_VkQueue)( VkQueue_T * );
|
|||||||
extern char *json_convert_startup_info(const char *startup_info);
|
extern char *json_convert_startup_info(const char *startup_info);
|
||||||
extern char *json_convert_paths(const char *input);
|
extern char *json_convert_paths(const char *input);
|
||||||
|
|
||||||
|
extern NTSTATUS vrclient_init( void *args );
|
||||||
|
extern NTSTATUS vrclient_HmdSystemFactory( void *args );
|
||||||
|
extern NTSTATUS vrclient_VRClientCoreFactory( void *args );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
@ -67,23 +67,28 @@ static void load_vk_unwrappers( HMODULE winevulkan )
|
|||||||
dlclose(unix_handle);
|
dlclose(unix_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool unix_vrclient_init( struct vrclient_init_params *params )
|
NTSTATUS vrclient_init( void *args )
|
||||||
{
|
{
|
||||||
|
struct vrclient_init_params *params = (struct vrclient_init_params *)args;
|
||||||
static void *vrclient;
|
static void *vrclient;
|
||||||
|
|
||||||
if (vrclient) return true;
|
if (vrclient)
|
||||||
|
{
|
||||||
|
params->_ret = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(vrclient = dlopen( params->unix_path, RTLD_NOW )))
|
if (!(vrclient = dlopen( params->unix_path, RTLD_NOW )))
|
||||||
{
|
{
|
||||||
TRACE( "unable to load %s\n", params->unix_path );
|
TRACE( "unable to load %s\n", params->unix_path );
|
||||||
return false;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LOAD_FUNC( x ) \
|
#define LOAD_FUNC( x ) \
|
||||||
if (!(p_##x = (decltype(p_##x))dlsym( vrclient, #x ))) \
|
if (!(p_##x = (decltype(p_##x))dlsym( vrclient, #x ))) \
|
||||||
{ \
|
{ \
|
||||||
ERR( "unable to load " #x "\n" ); \
|
ERR( "unable to load " #x "\n" ); \
|
||||||
return false; \
|
return -1; \
|
||||||
}
|
}
|
||||||
|
|
||||||
LOAD_FUNC( HmdSystemFactory );
|
LOAD_FUNC( HmdSystemFactory );
|
||||||
@ -92,15 +97,20 @@ bool unix_vrclient_init( struct vrclient_init_params *params )
|
|||||||
#undef LOAD_FUNC
|
#undef LOAD_FUNC
|
||||||
|
|
||||||
load_vk_unwrappers( params->winevulkan );
|
load_vk_unwrappers( params->winevulkan );
|
||||||
return true;
|
params->_ret = true;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *unix_HmdSystemFactory( const char *name, int *return_code )
|
NTSTATUS vrclient_HmdSystemFactory( void *args )
|
||||||
{
|
{
|
||||||
return p_HmdSystemFactory( name, return_code );
|
struct vrclient_HmdSystemFactory_params *params = (struct vrclient_HmdSystemFactory_params *)args;
|
||||||
|
params->_ret = p_HmdSystemFactory( params->name, params->return_code );
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *unix_VRClientCoreFactory( const char *name, int *return_code )
|
NTSTATUS vrclient_VRClientCoreFactory( void *args )
|
||||||
{
|
{
|
||||||
return p_VRClientCoreFactory( name, return_code );
|
struct vrclient_VRClientCoreFactory_params *params = (struct vrclient_VRClientCoreFactory_params *)args;
|
||||||
|
params->_ret = p_VRClientCoreFactory( params->name, params->return_code );
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -45,13 +45,24 @@ struct render_model_texture_map
|
|||||||
|
|
||||||
struct vrclient_init_params
|
struct vrclient_init_params
|
||||||
{
|
{
|
||||||
|
bool _ret;
|
||||||
HMODULE winevulkan;
|
HMODULE winevulkan;
|
||||||
char *unix_path;
|
char *unix_path;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern bool unix_vrclient_init( struct vrclient_init_params *params );
|
struct vrclient_HmdSystemFactory_params
|
||||||
extern void *unix_HmdSystemFactory( const char *name, int *return_code );
|
{
|
||||||
extern void *unix_VRClientCoreFactory( const char *name, int *return_code );
|
void *_ret;
|
||||||
|
const char *name;
|
||||||
|
int *return_code;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct vrclient_VRClientCoreFactory_params
|
||||||
|
{
|
||||||
|
void *_ret;
|
||||||
|
const char *name;
|
||||||
|
int *return_code;
|
||||||
|
};
|
||||||
|
|
||||||
typedef NTSTATUS (*unixlib_entry_t)( void *args );
|
typedef NTSTATUS (*unixlib_entry_t)( void *args );
|
||||||
extern const unixlib_entry_t __wine_unix_call_funcs[];
|
extern const unixlib_entry_t __wine_unix_call_funcs[];
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
|
|
||||||
extern "C" const unixlib_entry_t __wine_unix_call_funcs[] =
|
extern "C" const unixlib_entry_t __wine_unix_call_funcs[] =
|
||||||
{
|
{
|
||||||
|
vrclient_init,
|
||||||
|
vrclient_HmdSystemFactory,
|
||||||
|
vrclient_VRClientCoreFactory,
|
||||||
IVRApplications_IVRApplications_001_AddApplicationManifest,
|
IVRApplications_IVRApplications_001_AddApplicationManifest,
|
||||||
IVRApplications_IVRApplications_001_RemoveApplicationManifest,
|
IVRApplications_IVRApplications_001_RemoveApplicationManifest,
|
||||||
IVRApplications_IVRApplications_001_IsApplicationInstalled,
|
IVRApplications_IVRApplications_001_IsApplicationInstalled,
|
||||||
|
@ -28859,6 +28859,9 @@ struct IVRTrackedCamera_IVRTrackedCamera_006_GetCameraTrackingSpace_params
|
|||||||
|
|
||||||
enum unix_funcs
|
enum unix_funcs
|
||||||
{
|
{
|
||||||
|
unix_vrclient_init,
|
||||||
|
unix_vrclient_HmdSystemFactory,
|
||||||
|
unix_vrclient_VRClientCoreFactory,
|
||||||
unix_IVRApplications_IVRApplications_001_AddApplicationManifest,
|
unix_IVRApplications_IVRApplications_001_AddApplicationManifest,
|
||||||
unix_IVRApplications_IVRApplications_001_RemoveApplicationManifest,
|
unix_IVRApplications_IVRApplications_001_RemoveApplicationManifest,
|
||||||
unix_IVRApplications_IVRApplications_001_IsApplicationInstalled,
|
unix_IVRApplications_IVRApplications_001_IsApplicationInstalled,
|
||||||
|
@ -260,7 +260,8 @@ static int load_vrclient(void)
|
|||||||
|
|
||||||
TRACE( "got openvr runtime path: %s\n", params.unix_path );
|
TRACE( "got openvr runtime path: %s\n", params.unix_path );
|
||||||
|
|
||||||
if (unix_vrclient_init( ¶ms )) loaded = TRUE;
|
VRCLIENT_CALL( vrclient_init, ¶ms );
|
||||||
|
if (params._ret) loaded = TRUE;
|
||||||
|
|
||||||
HeapFree( GetProcessHeap(), 0, params.unix_path );
|
HeapFree( GetProcessHeap(), 0, params.unix_path );
|
||||||
return loaded;
|
return loaded;
|
||||||
@ -268,16 +269,20 @@ static int load_vrclient(void)
|
|||||||
|
|
||||||
void *CDECL HmdSystemFactory(const char *name, int *return_code)
|
void *CDECL HmdSystemFactory(const char *name, int *return_code)
|
||||||
{
|
{
|
||||||
|
struct vrclient_HmdSystemFactory_params params = {.name = name, .return_code = return_code};
|
||||||
TRACE("name: %s, return_code: %p\n", name, return_code);
|
TRACE("name: %s, return_code: %p\n", name, return_code);
|
||||||
if (!load_vrclient()) return NULL;
|
if (!load_vrclient()) return NULL;
|
||||||
return create_win_interface( name, unix_HmdSystemFactory( name, return_code ) );
|
VRCLIENT_CALL( vrclient_HmdSystemFactory, ¶ms );
|
||||||
|
return create_win_interface( name, params._ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
void *CDECL VRClientCoreFactory(const char *name, int *return_code)
|
void *CDECL VRClientCoreFactory(const char *name, int *return_code)
|
||||||
{
|
{
|
||||||
|
struct vrclient_VRClientCoreFactory_params params = {.name = name, .return_code = return_code};
|
||||||
TRACE("name: %s, return_code: %p\n", name, return_code);
|
TRACE("name: %s, return_code: %p\n", name, return_code);
|
||||||
if (!load_vrclient()) return NULL;
|
if (!load_vrclient()) return NULL;
|
||||||
return create_win_interface( name, unix_VRClientCoreFactory( name, return_code ) );
|
VRCLIENT_CALL( vrclient_VRClientCoreFactory, ¶ms );
|
||||||
|
return create_win_interface( name, params._ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_hmd_present_reg(void)
|
static bool is_hmd_present_reg(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user