1
0
mirror of https://github.com/libretro/RetroArch synced 2025-02-17 06:40:57 +00:00

Move nonblock_state to input_driver.c (NOTE: we probably need

to relocate this later on)
This commit is contained in:
twinaphex 2015-11-29 17:53:11 +01:00
parent f7bb3650d9
commit 1c867cedf0
6 changed files with 35 additions and 13 deletions

@ -233,7 +233,6 @@ void init_drivers_pre(void)
static void driver_adjust_system_rates(void) static void driver_adjust_system_rates(void)
{ {
rarch_system_info_t *system = rarch_system_info_get_ptr(); rarch_system_info_t *system = rarch_system_info_get_ptr();
driver_t *driver = driver_get_ptr();
audio_driver_ctl(RARCH_AUDIO_CTL_MONITOR_ADJUST_SYSTEM_RATES, NULL); audio_driver_ctl(RARCH_AUDIO_CTL_MONITOR_ADJUST_SYSTEM_RATES, NULL);
video_driver_ctl(RARCH_DISPLAY_CTL_MONITOR_ADJUST_SYSTEM_RATES, NULL); video_driver_ctl(RARCH_DISPLAY_CTL_MONITOR_ADJUST_SYSTEM_RATES, NULL);
@ -275,7 +274,7 @@ void driver_set_nonblock_state(void)
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
rarch_system_info_t *system = rarch_system_info_get_ptr(); rarch_system_info_t *system = rarch_system_info_get_ptr();
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
bool enable = driver->nonblock_state; bool enable = input_driver_ctl(RARCH_INPUT_CTL_IS_NONBLOCK_STATE, NULL);
/* Only apply non-block-state for video if we're using vsync. */ /* Only apply non-block-state for video if we're using vsync. */
if (driver->video_active && video_driver_get_ptr(false)) if (driver->video_active && video_driver_get_ptr(false))
@ -418,7 +417,7 @@ void init_drivers(int flags)
if (flags & (DRIVER_VIDEO | DRIVER_AUDIO)) if (flags & (DRIVER_VIDEO | DRIVER_AUDIO))
{ {
/* Keep non-throttled state as good as possible. */ /* Keep non-throttled state as good as possible. */
if (driver->nonblock_state) if (input_driver_ctl(RARCH_INPUT_CTL_IS_NONBLOCK_STATE, NULL))
driver_set_nonblock_state(); driver_set_nonblock_state();
} }
} }

@ -266,7 +266,6 @@ typedef struct driver
#ifdef HAVE_NETWORK_GAMEPAD #ifdef HAVE_NETWORK_GAMEPAD
rarch_remote_t *remote; rarch_remote_t *remote;
#endif #endif
bool nonblock_state;
/* Last message given to the video driver */ /* Last message given to the video driver */
char current_msg[PATH_MAX_LENGTH]; char current_msg[PATH_MAX_LENGTH];

@ -1846,7 +1846,7 @@ static bool gl_frame(void *data, const void *frame,
* and pause to prevent flicker. */ * and pause to prevent flicker. */
if ( if (
settings->video.black_frame_insertion settings->video.black_frame_insertion
&& !driver->nonblock_state && !input_driver_ctl(RARCH_INPUT_CTL_IS_NONBLOCK_STATE, NULL)
&& !is_slowmotion && !is_paused) && !is_slowmotion && !is_paused)
{ {
gfx_ctx_swap_buffers(gl); gfx_ctx_swap_buffers(gl);

@ -85,6 +85,7 @@ struct turbo_buttons
static bool flushing_input; static bool flushing_input;
static bool block_libretro_input; static bool block_libretro_input;
static bool block_hotkey; static bool block_hotkey;
static bool nonblock_state;
static turbo_buttons_t turbo_btns; static turbo_buttons_t turbo_btns;
/** /**
@ -689,6 +690,7 @@ bool input_driver_ctl(enum rarch_input_ctl_state state, void *data)
case RARCH_INPUT_CTL_DESTROY: case RARCH_INPUT_CTL_DESTROY:
flushing_input = false; flushing_input = false;
block_hotkey = false; block_hotkey = false;
nonblock_state = false;
memset(&turbo_btns, 0, sizeof(turbo_buttons_t)); memset(&turbo_btns, 0, sizeof(turbo_buttons_t));
if (!driver) if (!driver)
return false; return false;
@ -744,6 +746,14 @@ bool input_driver_ctl(enum rarch_input_ctl_state state, void *data)
break; break;
case RARCH_INPUT_CTL_IS_LIBRETRO_INPUT_BLOCKED: case RARCH_INPUT_CTL_IS_LIBRETRO_INPUT_BLOCKED:
return block_libretro_input; return block_libretro_input;
case RARCH_INPUT_CTL_SET_NONBLOCK_STATE:
nonblock_state = true;
break;
case RARCH_INPUT_CTL_UNSET_NONBLOCK_STATE:
nonblock_state = false;
break;
case RARCH_INPUT_CTL_IS_NONBLOCK_STATE:
return nonblock_state;
case RARCH_INPUT_CTL_NONE: case RARCH_INPUT_CTL_NONE:
default: default:
break; break;

@ -62,7 +62,10 @@ enum rarch_input_ctl_state
RARCH_INPUT_CTL_IS_FLUSHING_INPUT, RARCH_INPUT_CTL_IS_FLUSHING_INPUT,
RARCH_INPUT_CTL_SET_LIBRETRO_INPUT_BLOCKED, RARCH_INPUT_CTL_SET_LIBRETRO_INPUT_BLOCKED,
RARCH_INPUT_CTL_UNSET_LIBRETRO_INPUT_BLOCKED, RARCH_INPUT_CTL_UNSET_LIBRETRO_INPUT_BLOCKED,
RARCH_INPUT_CTL_IS_LIBRETRO_INPUT_BLOCKED RARCH_INPUT_CTL_IS_LIBRETRO_INPUT_BLOCKED,
RARCH_INPUT_CTL_SET_NONBLOCK_STATE,
RARCH_INPUT_CTL_UNSET_NONBLOCK_STATE,
RARCH_INPUT_CTL_IS_NONBLOCK_STATE
}; };
struct retro_keybind struct retro_keybind

@ -230,8 +230,7 @@ static bool check_pause(settings_t *settings,
* Checks if the fast forward key has been pressed for this frame. * Checks if the fast forward key has been pressed for this frame.
* *
**/ **/
static void check_fast_forward_button(driver_t *driver, static void check_fast_forward_button(bool fastforward_pressed,
bool fastforward_pressed,
bool hold_pressed, bool old_hold_pressed) bool hold_pressed, bool old_hold_pressed)
{ {
/* To avoid continous switching if we hold the button down, we require /* To avoid continous switching if we hold the button down, we require
@ -239,9 +238,19 @@ static void check_fast_forward_button(driver_t *driver,
* to be able to toggle between then. * to be able to toggle between then.
*/ */
if (fastforward_pressed) if (fastforward_pressed)
driver->nonblock_state = !driver->nonblock_state; {
if (input_driver_ctl(RARCH_INPUT_CTL_IS_NONBLOCK_STATE, NULL))
input_driver_ctl(RARCH_INPUT_CTL_UNSET_NONBLOCK_STATE, NULL);
else
input_driver_ctl(RARCH_INPUT_CTL_SET_NONBLOCK_STATE, NULL);
}
else if (old_hold_pressed != hold_pressed) else if (old_hold_pressed != hold_pressed)
driver->nonblock_state = hold_pressed; {
if (hold_pressed)
input_driver_ctl(RARCH_INPUT_CTL_SET_NONBLOCK_STATE, NULL);
else
input_driver_ctl(RARCH_INPUT_CTL_UNSET_NONBLOCK_STATE, NULL);
}
else else
return; return;
@ -523,7 +532,7 @@ bool rarch_main_ctl(enum rarch_main_ctl_state state, void *data)
if (!rarch_main_ctl(RARCH_MAIN_CTL_CHECK_IDLE_STATE, data)) if (!rarch_main_ctl(RARCH_MAIN_CTL_CHECK_IDLE_STATE, data))
return false; return false;
check_fast_forward_button(driver, check_fast_forward_button(
cmd->fastforward_pressed, cmd->fastforward_pressed,
cmd->hold_pressed, cmd->old_hold_pressed); cmd->hold_pressed, cmd->old_hold_pressed);
check_stateslots(settings, cmd->state_slot_increase, check_stateslots(settings, cmd->state_slot_increase,
@ -997,7 +1006,8 @@ int rarch_main_iterate(unsigned *sleep_ms)
retro_time_t current = retro_get_time_usec(); retro_time_t current = retro_get_time_usec();
retro_time_t delta = current - system->frame_time_last; retro_time_t delta = current - system->frame_time_last;
bool is_locked_fps = (main_is_paused || driver->nonblock_state) | bool is_locked_fps = (main_is_paused ||
input_driver_ctl(RARCH_INPUT_CTL_IS_NONBLOCK_STATE, NULL)) |
!!driver->recording_data; !!driver->recording_data;
if (!system->frame_time_last || is_locked_fps) if (!system->frame_time_last || is_locked_fps)
@ -1115,7 +1125,8 @@ int rarch_main_iterate(unsigned *sleep_ms)
settings->input.analog_dpad_mode[i]); settings->input.analog_dpad_mode[i]);
} }
if ((settings->video.frame_delay > 0) && !driver->nonblock_state) if ((settings->video.frame_delay > 0) &&
!input_driver_ctl(RARCH_INPUT_CTL_IS_NONBLOCK_STATE, NULL))
retro_sleep(settings->video.frame_delay); retro_sleep(settings->video.frame_delay);
/* Run libretro for one frame. */ /* Run libretro for one frame. */