Grab settings pointer only once inside wrapper 'input_driver' function

This commit is contained in:
twinaphex 2017-01-16 00:13:57 +01:00
parent e29fcd566a
commit 666534cc74
22 changed files with 70 additions and 64 deletions

View File

@ -38,7 +38,6 @@
#include "../../frontend/drivers/platform_linux.h" #include "../../frontend/drivers/platform_linux.h"
#include "../../configuration.h"
#include "../../runloop.h" #include "../../runloop.h"
static enum gfx_ctx_api android_api = GFX_CTX_NONE; static enum gfx_ctx_api android_api = GFX_CTX_NONE;
@ -366,10 +365,10 @@ static bool android_gfx_ctx_set_video_mode(void *data,
} }
static void android_gfx_ctx_input_driver(void *data, static void android_gfx_ctx_input_driver(void *data,
const char *joypad_name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
settings_t *settings = config_get_ptr(); void *androidinput = input_android.init(joypad_name);
void *androidinput = input_android.init(settings->input.joypad_driver);
*input = androidinput ? &input_android : NULL; *input = androidinput ? &input_android : NULL;
*input_data = androidinput; *input_data = androidinput;

View File

@ -154,7 +154,9 @@ static void gfx_ctx_cgl_destroy(void *data)
free(cgl); free(cgl);
} }
static void gfx_ctx_cgl_input_driver(void *data, const input_driver_t **input, void **input_data) static void gfx_ctx_cgl_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data)
{ {
(void)data; (void)data;
(void)input; (void)input;

View File

@ -588,10 +588,11 @@ static bool cocoagl_gfx_ctx_set_resize(void *data, unsigned width, unsigned heig
return false; return false;
} }
static void cocoagl_gfx_ctx_input_driver(void *data, const input_driver_t **input, void **input_data) static void cocoagl_gfx_ctx_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data)
{ {
(void)data; *input = NULL;
*input = NULL;
*input_data = NULL; *input_data = NULL;
} }

View File

@ -29,7 +29,6 @@
#include "../drivers/d3d.h" #include "../drivers/d3d.h"
#include "../common/win32_common.h" #include "../common/win32_common.h"
#include "../../configuration.h"
#include "../../runloop.h" #include "../../runloop.h"
#include "../../verbosity.h" #include "../../verbosity.h"
#include "../../ui/ui_companion_driver.h" #include "../../ui/ui_companion_driver.h"
@ -182,15 +181,15 @@ static void gfx_ctx_d3d_destroy(void *data)
} }
static void gfx_ctx_d3d_input_driver(void *data, static void gfx_ctx_d3d_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
settings_t *settings = config_get_ptr();
#ifdef _XBOX #ifdef _XBOX
void *xinput = input_xinput.init(settings->input.joypad_driver); void *xinput = input_xinput.init(joypad_name);
*input = xinput ? (const input_driver_t*)&input_xinput : NULL; *input = xinput ? (const input_driver_t*)&input_xinput : NULL;
*input_data = xinput; *input_data = xinput;
#else #else
dinput = input_dinput.init(settings->input.joypad_driver); dinput = input_dinput.init(joypad_name);
*input = dinput ? &input_dinput : NULL; *input = dinput ? &input_dinput : NULL;
*input_data = dinput; *input_data = dinput;
#endif #endif

View File

@ -746,10 +746,10 @@ static void gfx_ctx_drm_destroy(void *data)
} }
static void gfx_ctx_drm_input_driver(void *data, static void gfx_ctx_drm_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
(void)data; *input = NULL;
*input = NULL;
*input_data = NULL; *input_data = NULL;
} }

View File

@ -222,23 +222,22 @@ static bool gfx_ctx_emscripten_bind_api(void *data,
static void gfx_ctx_emscripten_input_driver(void *data, static void gfx_ctx_emscripten_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
(void)data; void *rwebinput = NULL;
*input = NULL; *input = NULL;
*input_data = NULL; *input_data = NULL;
#ifndef HAVE_SDL2 #ifndef HAVE_SDL2
{ rwebinput = input_rwebinput.init();
void *rwebinput = input_rwebinput.init();
if (!rwebinput) if (!rwebinput)
return; return;
*input = &input_rwebinput; *input = &input_rwebinput;
*input_data = rwebinput; *input_data = rwebinput;
}
#endif #endif
} }

View File

@ -79,7 +79,9 @@ static void gfx_ctx_null_destroy(void *data)
(void)data; (void)data;
} }
static void gfx_ctx_null_input_driver(void *data, const input_driver_t **input, void **input_data) static void gfx_ctx_null_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data)
{ {
(void)data; (void)data;
(void)input; (void)input;

View File

@ -155,10 +155,10 @@ error:
} }
static void gfx_ctx_khr_display_input_driver(void *data, static void gfx_ctx_khr_display_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
(void)data; *input = NULL;
*input = NULL;
*input_data = NULL; *input_data = NULL;
} }

View File

@ -226,10 +226,10 @@ error:
} }
static void gfx_ctx_mali_fbdev_input_driver(void *data, static void gfx_ctx_mali_fbdev_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
(void)data; *input = NULL;
*input = NULL;
*input_data = NULL; *input_data = NULL;
} }

View File

@ -199,10 +199,10 @@ error:
} }
static void gfx_ctx_opendingux_input_driver(void *data, static void gfx_ctx_opendingux_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
(void)data; *input = NULL;
*input = NULL;
*input_data = NULL; *input_data = NULL;
} }

View File

@ -372,9 +372,10 @@ static void osmesa_ctx_swap_buffers(void *data, video_frame_info_t video_info)
#endif #endif
} }
static void osmesa_ctx_input_driver(void *data, const input_driver_t **input, void **input_data) static void osmesa_ctx_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data)
{ {
(void)data;
*input = NULL; *input = NULL;
*input_data = NULL; *input_data = NULL;
} }

View File

@ -339,10 +339,10 @@ static void gfx_ctx_ps3_destroy(void *data)
} }
static void gfx_ctx_ps3_input_driver(void *data, static void gfx_ctx_ps3_input_driver(void *data,
const char *joypad_name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
settings_t *settings = config_get_ptr(); void *ps3input = input_ps3.init(joypad_name);
void *ps3input = input_ps3.init(settings->input.joypad_driver);
*input = ps3input ? &input_ps3 : NULL; *input = ps3input ? &input_ps3 : NULL;
*input_data = ps3input; *input_data = ps3input;

View File

@ -346,10 +346,10 @@ static bool gfx_ctx_qnx_set_video_mode(void *data,
static void gfx_ctx_qnx_input_driver(void *data, static void gfx_ctx_qnx_input_driver(void *data,
const char *joypad_name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
settings_t *settings = config_get_ptr(); void *qnxinput = input_qnx.init(joypad_name);
void *qnxinput = input_qnx.init(settings->input.joypad_driver);
*input = qnxinput ? &input_qnx : NULL; *input = qnxinput ? &input_qnx : NULL;
*input_data = qnxinput; *input_data = qnxinput;

View File

@ -391,10 +391,11 @@ static void sdl_ctx_swap_buffers(void *data, video_frame_info_t video_info)
(void)data; (void)data;
} }
static void sdl_ctx_input_driver(void *data, const input_driver_t **input, void **input_data) static void sdl_ctx_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data)
{ {
(void)data; *input = NULL;
*input = NULL;
*input_data = NULL; *input_data = NULL;
} }

View File

@ -451,10 +451,10 @@ static void gfx_ctx_vc_destroy(void *data)
} }
static void gfx_ctx_vc_input_driver(void *data, static void gfx_ctx_vc_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
(void)data; *input = NULL;
*input = NULL;
*input_data = NULL; *input_data = NULL;
} }

View File

@ -204,10 +204,10 @@ error:
} }
static void gfx_ctx_vivante_input_driver(void *data, static void gfx_ctx_vivante_input_driver(void *data,
const char *name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
(void)data; *input = NULL;
*input = NULL;
*input_data = NULL; *input_data = NULL;
} }

View File

@ -42,7 +42,6 @@
#include "../common/gl_common.h" #include "../common/gl_common.h"
#endif #endif
#include "../../configuration.h"
#include "../../frontend/frontend_driver.h" #include "../../frontend/frontend_driver.h"
#include "../../runloop.h" #include "../../runloop.h"
#include "../../input/input_keyboard.h" #include "../../input/input_keyboard.h"
@ -1365,13 +1364,18 @@ static void input_wl_free(void *data)
wl->joypad->destroy(); wl->joypad->destroy();
} }
static bool input_wl_init(void *data) static bool input_wl_init(void *data, const char *joypad_name)
{ {
gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data; gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data;
settings_t *settings = config_get_ptr();
wl->joypad = input_joypad_init_driver(settings->input.joypad_driver, wl); if (!wl)
return false;
wl->joypad = input_joypad_init_driver(joypad_name, wl);
if (!wl->joypad) if (!wl->joypad)
return false; return false;
input_keymaps_init_keyboard_lut(rarch_key_map_linux); input_keymaps_init_keyboard_lut(rarch_key_map_linux);
return true; return true;
} }
@ -1455,10 +1459,11 @@ static const input_driver_t input_wayland = {
}; };
static void gfx_ctx_wl_input_driver(void *data, static void gfx_ctx_wl_input_driver(void *data,
const char *joypad_name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
/* Input is heavily tied to the window stuff on Wayland, so just implement the input driver here. */ /* Input is heavily tied to the window stuff on Wayland, so just implement the input driver here. */
if (!input_wl_init(data)) if (!input_wl_init(data, joypad_name))
{ {
*input = NULL; *input = NULL;
*input_data = NULL; *input_data = NULL;

View File

@ -559,10 +559,10 @@ error:
static void gfx_ctx_wgl_input_driver(void *data, static void gfx_ctx_wgl_input_driver(void *data,
const char *joypad_name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
settings_t *settings = config_get_ptr(); dinput_wgl = input_dinput.init(joypad_name);
dinput_wgl = input_dinput.init(settings ? settings->input.joypad_driver : NULL);
*input = dinput_wgl ? &input_dinput : NULL; *input = dinput_wgl ? &input_dinput : NULL;
*input_data = dinput_wgl; *input_data = dinput_wgl;

View File

@ -36,8 +36,6 @@
#endif #endif
#include "../../configuration.h"
#include "../../frontend/frontend_driver.h" #include "../../frontend/frontend_driver.h"
#include "../common/gl_common.h" #include "../common/gl_common.h"
#include "../common/x11_common.h" #include "../common/x11_common.h"
@ -877,12 +875,10 @@ error:
} }
static void gfx_ctx_x_input_driver(void *data, static void gfx_ctx_x_input_driver(void *data,
const char *joypad_name,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
settings_t *settings = config_get_ptr(); void *xinput = input_x.init(joypad_name);
void *xinput = input_x.init(settings->input.joypad_driver);
(void)data;
*input = xinput ? &input_x : NULL; *input = xinput ? &input_x : NULL;
*input_data = xinput; *input_data = xinput;

View File

@ -23,7 +23,6 @@
#include "../../config.h" #include "../../config.h"
#endif #endif
#include "../../configuration.h"
#include "../../frontend/frontend_driver.h" #include "../../frontend/frontend_driver.h"
#include "../common/egl_common.h" #include "../common/egl_common.h"
@ -424,12 +423,10 @@ error:
static void gfx_ctx_xegl_input_driver(void *data, static void gfx_ctx_xegl_input_driver(void *data,
const input_driver_t **input, void **input_data) const char *joypad_name,
const input_driver_t **input, void **input_data)
{ {
settings_t *settings = config_get_ptr(); void *xinput = input_x.init(joypad_name);
void *xinput = input_x.init(settings->input.joypad_driver);
(void)data;
*input = xinput ? &input_x : NULL; *input = xinput ? &input_x : NULL;
*input_data = xinput; *input_data = xinput;

View File

@ -412,10 +412,14 @@ bool video_context_driver_get_metrics(gfx_ctx_metrics_t *metrics)
bool video_context_driver_input_driver(gfx_ctx_input_t *inp) bool video_context_driver_input_driver(gfx_ctx_input_t *inp)
{ {
settings_t *settings = config_get_ptr();
const char *joypad_name = settings ? settings->input.joypad_driver : NULL;
if (!current_video_context || !current_video_context->input_driver) if (!current_video_context || !current_video_context->input_driver)
return false; return false;
current_video_context->input_driver( current_video_context->input_driver(
video_context_data, inp->input, inp->input_data); video_context_data, joypad_name,
inp->input, inp->input_data);
return true; return true;
} }

View File

@ -126,7 +126,7 @@ typedef struct gfx_ctx_driver
/* Most video backends will want to use a certain input driver. /* Most video backends will want to use a certain input driver.
* Checks for it here. */ * Checks for it here. */
void (*input_driver)(void*, const input_driver_t**, void**); void (*input_driver)(void*, const char *, const input_driver_t**, void**);
/* Wraps whatever gl_proc_address() there is. /* Wraps whatever gl_proc_address() there is.
* Does not take opaque, to avoid lots of ugly wrapper code. */ * Does not take opaque, to avoid lots of ugly wrapper code. */