(input_driver.c) Don't keep regrabbing the same pointers in input_state_internal function

This commit is contained in:
libretroadmin 2023-06-15 14:26:41 +02:00
parent e9387193d5
commit 410242c164

View File

@ -1533,13 +1533,14 @@ static int16_t input_state_device(
} }
static int16_t input_state_internal(unsigned port, unsigned device, static int16_t input_state_internal(
input_driver_state_t *input_st,
settings_t *settings,
unsigned port, unsigned device,
unsigned idx, unsigned id) unsigned idx, unsigned id)
{ {
rarch_joypad_info_t joypad_info; rarch_joypad_info_t joypad_info;
unsigned mapped_port; unsigned mapped_port;
input_driver_state_t *input_st = &input_driver_st;
settings_t *settings = config_get_ptr();
float input_analog_deadzone = settings->floats.input_analog_deadzone; float input_analog_deadzone = settings->floats.input_analog_deadzone;
float input_analog_sensitivity = settings->floats.input_analog_sensitivity; float input_analog_sensitivity = settings->floats.input_analog_sensitivity;
unsigned *input_remap_port_map = settings->uints.input_remap_port_map[port]; unsigned *input_remap_port_map = settings->uints.input_remap_port_map[port];
@ -1552,8 +1553,8 @@ static int16_t input_state_internal(unsigned port, unsigned device,
#endif #endif
#ifdef HAVE_MENU #ifdef HAVE_MENU
struct menu_state *menu_st = menu_state_get_ptr(); struct menu_state *menu_st = menu_state_get_ptr();
bool input_blocked = (menu_st->input_driver_flushing_input > 0) || bool input_blocked = (menu_st->input_driver_flushing_input > 0)
(input_st->flags & INP_FLAG_BLOCK_LIBRETRO_INPUT); || (input_st->flags & INP_FLAG_BLOCK_LIBRETRO_INPUT);
#else #else
bool input_blocked = (input_st->flags & INP_FLAG_BLOCK_LIBRETRO_INPUT); bool input_blocked = (input_st->flags & INP_FLAG_BLOCK_LIBRETRO_INPUT);
#endif #endif
@ -1562,8 +1563,8 @@ static int16_t input_state_internal(unsigned port, unsigned device,
int16_t result = 0; int16_t result = 0;
device &= RETRO_DEVICE_MASK; device &= RETRO_DEVICE_MASK;
bitmask_enabled = (device == RETRO_DEVICE_JOYPAD) && bitmask_enabled = (device == RETRO_DEVICE_JOYPAD)
(id == RETRO_DEVICE_ID_JOYPAD_MASK); && (id == RETRO_DEVICE_ID_JOYPAD_MASK);
joypad_info.axis_threshold = settings->floats.input_axis_threshold; joypad_info.axis_threshold = settings->floats.input_axis_threshold;
/* Loop over all 'physical' ports mapped to specified /* Loop over all 'physical' ports mapped to specified
@ -1713,10 +1714,10 @@ static int16_t input_state_internal(unsigned port, unsigned device,
result = port_result; result = port_result;
else else
{ {
int16_t port_result_abs = (port_result >= 0) ? int16_t port_result_abs = (port_result >= 0)
port_result : -port_result; ? port_result : -port_result;
int16_t result_abs = (result >= 0) ? int16_t result_abs = (result >= 0)
result : -result; ? result : -result;
if (port_result_abs > result_abs) if (port_result_abs > result_abs)
result = port_result; result = port_result;
@ -1746,6 +1747,8 @@ static int16_t input_state_internal(unsigned port, unsigned device,
* @return true if an input that is pressed will change the overlay * @return true if an input that is pressed will change the overlay
*/ */
static bool input_overlay_add_inputs_inner(overlay_desc_t *desc, static bool input_overlay_add_inputs_inner(overlay_desc_t *desc,
input_driver_state_t *input_st,
settings_t *settings,
input_overlay_state_t *ol_state, unsigned port) input_overlay_state_t *ol_state, unsigned port)
{ {
switch(desc->type) switch(desc->type)
@ -1772,9 +1775,9 @@ static bool input_overlay_add_inputs_inner(overlay_desc_t *desc,
break; break;
/* Light up the button if pressed */ /* Light up the button if pressed */
if (ol_state ? if ( ol_state
!BIT256_GET(ol_state->buttons, id) : ? !BIT256_GET(ol_state->buttons, id)
!input_state_internal(port, RETRO_DEVICE_JOYPAD, 0, id)) : !input_state_internal(input_st, settings, port, RETRO_DEVICE_JOYPAD, 0, id))
{ {
/* We need ALL of the inputs to be active, /* We need ALL of the inputs to be active,
* abort. */ * abort. */
@ -1807,9 +1810,9 @@ static bool input_overlay_add_inputs_inner(overlay_desc_t *desc,
unsigned index = (desc->type == OVERLAY_TYPE_ANALOG_RIGHT) unsigned index = (desc->type == OVERLAY_TYPE_ANALOG_RIGHT)
? RETRO_DEVICE_INDEX_ANALOG_RIGHT ? RETRO_DEVICE_INDEX_ANALOG_RIGHT
: RETRO_DEVICE_INDEX_ANALOG_LEFT; : RETRO_DEVICE_INDEX_ANALOG_LEFT;
int16_t analog_x = input_state_internal(port, RETRO_DEVICE_ANALOG, int16_t analog_x = input_state_internal(input_st, settings, port, RETRO_DEVICE_ANALOG,
index, RETRO_DEVICE_ID_ANALOG_X); index, RETRO_DEVICE_ID_ANALOG_X);
int16_t analog_y = input_state_internal(port, RETRO_DEVICE_ANALOG, int16_t analog_y = input_state_internal(input_st, settings, port, RETRO_DEVICE_ANALOG,
index, RETRO_DEVICE_ID_ANALOG_Y); index, RETRO_DEVICE_ID_ANALOG_Y);
/* Only modify overlay delta_x/delta_y values /* Only modify overlay delta_x/delta_y values
@ -1834,7 +1837,8 @@ static bool input_overlay_add_inputs_inner(overlay_desc_t *desc,
tmp = true; tmp = true;
} }
else else
tmp = input_state_internal(port, RETRO_DEVICE_KEYBOARD, 0, desc->retro_key_idx); tmp = input_state_internal(input_st, settings, port,
RETRO_DEVICE_KEYBOARD, 0, desc->retro_key_idx);
if (tmp) if (tmp)
{ {
@ -1853,6 +1857,8 @@ static bool input_overlay_add_inputs_inner(overlay_desc_t *desc,
static bool input_overlay_add_inputs(input_overlay_t *ol, static bool input_overlay_add_inputs(input_overlay_t *ol,
input_overlay_state_t *ol_state, input_overlay_state_t *ol_state,
input_driver_state_t *input_st,
settings_t *settings,
bool show_touched, unsigned port) bool show_touched, unsigned port)
{ {
size_t i; size_t i;
@ -1861,8 +1867,13 @@ static bool input_overlay_add_inputs(input_overlay_t *ol,
for (i = 0; i < ol->active->size; i++) for (i = 0; i < ol->active->size; i++)
{ {
overlay_desc_t *desc = &(ol->active->descs[i]); overlay_desc_t *desc = &(ol->active->descs[i]);
button_pressed |= input_overlay_add_inputs_inner(desc, button_pressed |= input_overlay_add_inputs_inner(
show_touched ? ol_state : NULL, port); desc, input_st,
settings,
show_touched
? ol_state
: NULL,
port);
} }
return button_pressed; return button_pressed;
@ -1875,8 +1886,8 @@ static void input_overlay_get_eightway_slope_limits(
/* Sensitivity setting is the relative size of diagonal zones to /* Sensitivity setting is the relative size of diagonal zones to
* cardinal zones. Convert to fraction of 45 deg span (max diagonal). * cardinal zones. Convert to fraction of 45 deg span (max diagonal).
*/ */
float f = 2.0f * diagonal_sensitivity float f = 2.0f * diagonal_sensitivity
/ (100.0f + diagonal_sensitivity); / (100.0f + diagonal_sensitivity);
float high_angle /* 67.5 deg max */ float high_angle /* 67.5 deg max */
= (f * (0.375 * M_PI) + (1.0f - f) * (0.25 * M_PI)); = (f * (0.375 * M_PI) + (1.0f - f) * (0.25 * M_PI));
@ -1895,7 +1906,7 @@ static void input_overlay_get_eightway_slope_limits(
void input_overlay_set_eightway_diagonal_sensitivity(void) void input_overlay_set_eightway_diagonal_sensitivity(void)
{ {
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
input_driver_state_t *input_st = input_state_get_ptr(); input_driver_state_t *input_st = &input_driver_st;
input_overlay_get_eightway_slope_limits( input_overlay_get_eightway_slope_limits(
settings->uints.input_overlay_dpad_diagonal_sensitivity, settings->uints.input_overlay_dpad_diagonal_sensitivity,
@ -2857,7 +2868,8 @@ static void input_poll_overlay(
break; break;
} }
button_pressed = input_overlay_add_inputs(ol, ol_state, button_pressed = input_overlay_add_inputs(ol, ol_state, input_st,
settings,
(input_overlay_show_inputs == OVERLAY_SHOW_INPUT_TOUCHED), (input_overlay_show_inputs == OVERLAY_SHOW_INPUT_TOUCHED),
input_overlay_show_inputs_port); input_overlay_show_inputs_port);
@ -5142,7 +5154,7 @@ void bsv_movie_next_frame(input_driver_state_t *input_st)
size_t replay_get_serialize_size(void) size_t replay_get_serialize_size(void)
{ {
input_driver_state_t *input_st = input_state_get_ptr(); input_driver_state_t *input_st = &input_driver_st;
if (input_st->bsv_movie_state.flags & (BSV_FLAG_MOVIE_RECORDING | BSV_FLAG_MOVIE_PLAYBACK)) if (input_st->bsv_movie_state.flags & (BSV_FLAG_MOVIE_RECORDING | BSV_FLAG_MOVIE_PLAYBACK))
return sizeof(int32_t)+intfstream_tell(input_st->bsv_movie_state_handle->file); return sizeof(int32_t)+intfstream_tell(input_st->bsv_movie_state_handle->file);
return 0; return 0;
@ -5150,8 +5162,9 @@ size_t replay_get_serialize_size(void)
bool replay_get_serialized_data(void* buffer) bool replay_get_serialized_data(void* buffer)
{ {
input_driver_state_t *input_st = input_state_get_ptr(); input_driver_state_t *input_st = &input_driver_st;
bsv_movie_t *handle = input_st->bsv_movie_state_handle; bsv_movie_t *handle = input_st->bsv_movie_state_handle;
if (input_st->bsv_movie_state.flags & (BSV_FLAG_MOVIE_RECORDING | BSV_FLAG_MOVIE_PLAYBACK)) if (input_st->bsv_movie_state.flags & (BSV_FLAG_MOVIE_RECORDING | BSV_FLAG_MOVIE_PLAYBACK))
{ {
long file_end = intfstream_tell(handle->file); long file_end = intfstream_tell(handle->file);
@ -5175,7 +5188,7 @@ bool replay_get_serialized_data(void* buffer)
bool replay_set_serialized_data(void* buf) bool replay_set_serialized_data(void* buf)
{ {
uint8_t *buffer = buf; uint8_t *buffer = buf;
input_driver_state_t *input_st = input_state_get_ptr(); input_driver_state_t *input_st = &input_driver_st;
bool playback = input_st->bsv_movie_state.flags & BSV_FLAG_MOVIE_PLAYBACK; bool playback = input_st->bsv_movie_state.flags & BSV_FLAG_MOVIE_PLAYBACK;
bool recording = input_st->bsv_movie_state.flags & BSV_FLAG_MOVIE_RECORDING; bool recording = input_st->bsv_movie_state.flags & BSV_FLAG_MOVIE_RECORDING;
@ -5755,6 +5768,7 @@ int16_t input_driver_state_wrapper(unsigned port, unsigned device,
{ {
input_driver_state_t input_driver_state_t
*input_st = &input_driver_st; *input_st = &input_driver_st;
settings_t *settings = config_get_ptr();
int16_t result = 0; int16_t result = 0;
#ifdef HAVE_BSV_MOVIE #ifdef HAVE_BSV_MOVIE
/* Load input from BSV record, if enabled */ /* Load input from BSV record, if enabled */
@ -5776,13 +5790,13 @@ int16_t input_driver_state_wrapper(unsigned port, unsigned device,
#endif #endif
/* Read input state */ /* Read input state */
result = input_state_internal(port, device, idx, id); result = input_state_internal(input_st, settings, port, device, idx, id);
/* Register any analog stick input requests for /* Register any analog stick input requests for
* this 'virtual' (core) port */ * this 'virtual' (core) port */
if ( (device == RETRO_DEVICE_ANALOG) && if ( (device == RETRO_DEVICE_ANALOG)
( (idx == RETRO_DEVICE_INDEX_ANALOG_LEFT) || && ( (idx == RETRO_DEVICE_INDEX_ANALOG_LEFT)
(idx == RETRO_DEVICE_INDEX_ANALOG_RIGHT))) || (idx == RETRO_DEVICE_INDEX_ANALOG_RIGHT)))
input_st->analog_requested[port] = true; input_st->analog_requested[port] = true;
#ifdef HAVE_BSV_MOVIE #ifdef HAVE_BSV_MOVIE