diff --git a/gfx/common/d3d_common.c b/gfx/common/d3d_common.c index e8d4969dc6..fa7a9526ca 100644 --- a/gfx/common/d3d_common.c +++ b/gfx/common/d3d_common.c @@ -118,3 +118,48 @@ int32_t d3d_translate_filter(unsigned type) return (int32_t)D3D_TEXTURE_FILTER_POINT; } + +void d3d_input_driver(const char* input_name, const char* joypad_name, + input_driver_t** input, void** input_data) +{ +#if defined(__WINRT__) + /* Plain xinput is supported on UWP, but it + * supports joypad only (uwp driver was added later) */ + if (string_is_equal(input_name, "xinput")) + { + void *xinput = input_driver_init_wrap(&input_xinput, joypad_name); + *input = xinput ? (input_driver_t*)&input_xinput : NULL; + *input_data = xinput; + } + else + { + void *uwp = input_driver_init_wrap(&input_uwp, joypad_name); + *input = uwp ? (input_driver_t*)&input_uwp : NULL; + *input_data = uwp; + } +#elif defined(_XBOX) + void *xinput = input_driver_init_wrap(&input_xinput, joypad_name); + *input = xinput ? (input_driver_t*)&input_xinput : NULL; + *input_data = xinput; +#else +#if _WIN32_WINNT >= 0x0501 +#ifdef HAVE_WINRAWINPUT + /* winraw only available since XP */ + if (string_is_equal(input_name, "raw")) + { + *input_data = input_driver_init_wrap(&input_winraw, joypad_name); + if (*input_data) + { + *input = &input_winraw; + return; + } + } +#endif +#endif + +#ifdef HAVE_DINPUT + *input_data = input_driver_init_wrap(&input_dinput, joypad_name); + *input = *input_data ? &input_dinput : NULL; +#endif +#endif +} diff --git a/gfx/common/d3d_common.h b/gfx/common/d3d_common.h index 9c97c7bbff..4591c96a70 100644 --- a/gfx/common/d3d_common.h +++ b/gfx/common/d3d_common.h @@ -104,6 +104,9 @@ void d3d_matrix_rotation_z(void *_pout, float angle); int32_t d3d_translate_filter(unsigned type); +void d3d_input_driver(const char* input_name, + const char* joypad_name, input_driver_t** input, void** input_data); + RETRO_END_DECLS #endif diff --git a/gfx/common/win32_common.c b/gfx/common/win32_common.c index 1818d7c92b..83d5512417 100644 --- a/gfx/common/win32_common.c +++ b/gfx/common/win32_common.c @@ -2627,48 +2627,3 @@ void win32_update_title(void) } #endif } - -void win32_input_driver(const char* input_name, const char* joypad_name, - input_driver_t** input, void** input_data) -{ -#if defined(__WINRT__) - /* Plain xinput is supported on UWP, but it - * supports joypad only (uwp driver was added later) */ - if (string_is_equal(input_name, "xinput")) - { - void *xinput = input_driver_init_wrap(&input_xinput, joypad_name); - *input = xinput ? (input_driver_t*)&input_xinput : NULL; - *input_data = xinput; - } - else - { - void *uwp = input_driver_init_wrap(&input_uwp, joypad_name); - *input = uwp ? (input_driver_t*)&input_uwp : NULL; - *input_data = uwp; - } -#elif defined(_XBOX) - void *xinput = input_driver_init_wrap(&input_xinput, joypad_name); - *input = xinput ? (input_driver_t*)&input_xinput : NULL; - *input_data = xinput; -#else -#if _WIN32_WINNT >= 0x0501 -#ifdef HAVE_WINRAWINPUT - /* winraw only available since XP */ - if (string_is_equal(input_name, "raw")) - { - *input_data = input_driver_init_wrap(&input_winraw, joypad_name); - if (*input_data) - { - *input = &input_winraw; - return; - } - } -#endif -#endif - -#ifdef HAVE_DINPUT - *input_data = input_driver_init_wrap(&input_dinput, joypad_name); - *input = *input_data ? &input_dinput : NULL; -#endif -#endif -} diff --git a/gfx/common/win32_common.h b/gfx/common/win32_common.h index 3ef9ad2810..727208bb8e 100644 --- a/gfx/common/win32_common.h +++ b/gfx/common/win32_common.h @@ -183,10 +183,6 @@ void win32_set_input_userdata(void *data); void win32_update_title(void); -void win32_input_driver(const char* input_name, - const char* joypad_name, input_driver_t** input, void** input_data); - - RETRO_END_DECLS #endif diff --git a/gfx/drivers/d3d10.c b/gfx/drivers/d3d10.c index dff2758b90..bb0eba5910 100644 --- a/gfx/drivers/d3d10.c +++ b/gfx/drivers/d3d10.c @@ -706,7 +706,7 @@ static void *d3d10_gfx_init(const video_info_t* video, goto error; } - win32_input_driver(settings->arrays.input_driver, settings->arrays.input_joypad_driver, input, input_data); + d3d_input_driver(settings->arrays.input_driver, settings->arrays.input_joypad_driver, input, input_data); if (!d3d10_init_swapchain(d3d10, d3d10->vp.full_width, diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index 756d2246e1..e037833e4c 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -1149,7 +1149,7 @@ static void *d3d11_gfx_init(const video_info_t* video, goto error; } - win32_input_driver(settings->arrays.input_driver, settings->arrays.input_joypad_driver, input, input_data); + d3d_input_driver(settings->arrays.input_driver, settings->arrays.input_joypad_driver, input, input_data); #ifdef __WINRT__ DXGICreateFactory2(&d3d11->factory); diff --git a/gfx/drivers/d3d12.c b/gfx/drivers/d3d12.c index 3e750d3b76..7fdfead119 100644 --- a/gfx/drivers/d3d12.c +++ b/gfx/drivers/d3d12.c @@ -1185,7 +1185,7 @@ static void *d3d12_gfx_init(const video_info_t* video, d3d12->hdr.max_fall = 0.0f; #endif - win32_input_driver(settings->arrays.input_driver, settings->arrays.input_joypad_driver, input, input_data); + d3d_input_driver(settings->arrays.input_driver, settings->arrays.input_joypad_driver, input, input_data); if (!d3d12_init_base(d3d12)) goto error; diff --git a/gfx/drivers/d3d8.c b/gfx/drivers/d3d8.c index b6934bf37d..d689189498 100644 --- a/gfx/drivers/d3d8.c +++ b/gfx/drivers/d3d8.c @@ -1194,7 +1194,7 @@ static bool d3d8_init_internal(d3d8_video_t *d3d, if (!d3d8_initialize(d3d, &d3d->video_info)) return false; - win32_input_driver(settings->arrays.input_driver, settings->arrays.input_joypad_driver, input, input_data); + d3d_input_driver(settings->arrays.input_driver, settings->arrays.input_joypad_driver, input, input_data); return true; } diff --git a/gfx/drivers/d3d9cg.c b/gfx/drivers/d3d9cg.c index b8e0b6482c..c7b84e1475 100644 --- a/gfx/drivers/d3d9cg.c +++ b/gfx/drivers/d3d9cg.c @@ -1627,7 +1627,7 @@ static bool d3d9_cg_init_internal(d3d9_video_t *d3d, d3d9_cg_set_shader(d3d, type, shader_preset); } - win32_input_driver(settings->arrays.input_joypad_driver, + d3d_input_driver(settings->arrays.input_joypad_driver, settings->arrays.input_joypad_driver, input, input_data); { diff --git a/gfx/drivers/d3d9hlsl.c b/gfx/drivers/d3d9hlsl.c index 20f7c31437..d6f84c4e6c 100644 --- a/gfx/drivers/d3d9hlsl.c +++ b/gfx/drivers/d3d9hlsl.c @@ -1194,7 +1194,7 @@ static bool d3d9_hlsl_init_internal(d3d9_video_t *d3d, d3d9_hlsl_set_shader(d3d, type, shader_preset); } - win32_input_driver(settings->arrays.input_joypad_driver, + d3d_input_driver(settings->arrays.input_joypad_driver, settings->arrays.input_joypad_driver, input, input_data); {