From 5f79c13928ad6445ded652c75d0fe64a5bdd795c Mon Sep 17 00:00:00 2001 From: libretroadmin Date: Sat, 12 Aug 2023 18:59:29 +0200 Subject: [PATCH] Small cleanups --- runloop.c | 232 ++++++++++++++++++++++++++---------------------------- 1 file changed, 112 insertions(+), 120 deletions(-) diff --git a/runloop.c b/runloop.c index e3435b7ad1..4ef9c32c71 100644 --- a/runloop.c +++ b/runloop.c @@ -371,7 +371,7 @@ unsigned retro_get_perf_count_libretro(void) void runloop_performance_counter_register(struct retro_perf_counter *perf) { - if ( perf->registered + if ( perf->registered || runloop_state.perf_ptr_libretro >= MAX_COUNTERS) return; @@ -487,15 +487,15 @@ static bool runloop_environ_cb_get_system_info(unsigned cmd, void *data) subsys_rom_info[j].valid_extensions)) free((char *) subsys_rom_info[j].valid_extensions); - subsys_rom_info[j].desc = + subsys_rom_info[j].desc = strdup(info[i].roms[j].desc); - subsys_rom_info[j].valid_extensions = + subsys_rom_info[j].valid_extensions = strdup(info[i].roms[j].valid_extensions); - subsys_rom_info[j].required = + subsys_rom_info[j].required = info[i].roms[j].required; - subsys_rom_info[j].block_extract = + subsys_rom_info[j].block_extract = info[i].roms[j].block_extract; - subsys_rom_info[j].need_fullpath = + subsys_rom_info[j].need_fullpath = info[i].roms[j].need_fullpath; } @@ -557,7 +557,7 @@ void libretro_get_environment_info( runloop_st->flags &= ~RUNLOOP_FLAG_IGNORE_ENVIRONMENT_CB; } -static dylib_t load_dynamic_core(const char *path, char *buf, +static dylib_t load_dynamic_core(const char *path, char *buf, size_t size) { #if defined(ANDROID) @@ -998,7 +998,7 @@ static bool mmap_preprocess_descriptors( if ((desc->core.len & (desc->core.len - 1)) != 0) return false; - desc->core.select = top_addr + desc->core.select = top_addr & ~mmap_inflate(mmap_add_bits_down(desc->core.len - 1), desc->core.disconnect); } @@ -1017,12 +1017,12 @@ static bool mmap_preprocess_descriptors( /* Disconnect unselected bits that are too high to ever * index into the core's buffer. Higher addresses will * repeat / mirror the buffer as long as they match select */ - while (mmap_highest_bit(top_addr - & ~desc->core.select + while (mmap_highest_bit(top_addr + & ~desc->core.select & ~desc->core.disconnect) > mmap_highest_bit(highest_reachable)) - desc->core.disconnect |= mmap_highest_bit(top_addr - & ~desc->core.select + desc->core.disconnect |= mmap_highest_bit(top_addr + & ~desc->core.select & ~desc->core.disconnect); } @@ -1203,7 +1203,7 @@ static bool validate_folder_specific_options( * yet exist, provides source path from which initial * options should be extracted * - * NOTE: caller must ensure + * NOTE: caller must ensure * path and src_path are NULL-terminated * **/ @@ -1212,41 +1212,36 @@ static void runloop_init_core_options_path( char *path, size_t len, char *src_path, size_t src_len) { - char *game_options_path = NULL; - char *folder_options_path = NULL; + char *options_path = NULL; runloop_state_t *runloop_st = &runloop_state; bool game_specific_options = settings->bools.game_specific_options; /* Check whether game-specific options exist */ if ( game_specific_options - && validate_game_specific_options(&game_options_path)) + && validate_game_specific_options(&options_path)) { /* Notify system that we have a valid core options * override */ - path_set(RARCH_PATH_CORE_OPTIONS, game_options_path); + path_set(RARCH_PATH_CORE_OPTIONS, options_path); runloop_st->flags &= ~RUNLOOP_FLAG_FOLDER_OPTIONS_ACTIVE; runloop_st->flags |= RUNLOOP_FLAG_GAME_OPTIONS_ACTIVE; - /* Copy options path */ - strlcpy(path, game_options_path, len); - - free(game_options_path); + strlcpy(path, options_path, len); + free(options_path); } /* Check whether folder-specific options exist */ else if ( game_specific_options && validate_folder_specific_options( - &folder_options_path)) + &options_path)) { /* Notify system that we have a valid core options * override */ - path_set(RARCH_PATH_CORE_OPTIONS, folder_options_path); + path_set(RARCH_PATH_CORE_OPTIONS, options_path); runloop_st->flags &= ~RUNLOOP_FLAG_GAME_OPTIONS_ACTIVE; runloop_st->flags |= RUNLOOP_FLAG_FOLDER_OPTIONS_ACTIVE; - /* Copy options path */ - strlcpy(path, folder_options_path, len); - - free(folder_options_path); + strlcpy(path, options_path, len); + free(options_path); } else { @@ -1277,7 +1272,7 @@ static void runloop_init_core_options_path( /* If not using per-core options, or if a per-core options * file does not yet exist, must fetch 'global' options path */ - if ( !per_core_options + if ( !per_core_options || !per_core_options_exist) { const char *options_path = path_core_options; @@ -1358,9 +1353,10 @@ static void runloop_core_msg_queue_push( struct retro_system_av_info *av_info, const struct retro_message_ext *msg) { - double fps; - unsigned duration_frames; enum message_queue_category category; + /* Get duration in frames */ + double fps = (av_info && (av_info->timing.fps > 0)) ? av_info->timing.fps : 60.0; + unsigned duration_frames = (unsigned)((fps * (float)msg->duration / 1000.0f) + 0.5f); /* Assign category */ switch (msg->level) @@ -1378,10 +1374,6 @@ static void runloop_core_msg_queue_push( break; } - /* Get duration in frames */ - fps = (av_info && (av_info->timing.fps > 0)) ? av_info->timing.fps : 60.0; - duration_frames = (unsigned)((fps * (float)msg->duration / 1000.0f) + 0.5f); - /* Note: Do not flush the message queue here - a core * may need to send multiple notifications simultaneously */ runloop_msg_queue_push(msg->msg, @@ -1862,7 +1854,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) /* Handle 'alternate' non-queued notifications */ case RETRO_MESSAGE_TYPE_NOTIFICATION_ALT: { - video_driver_state_t *video_st = + video_driver_state_t *video_st = video_state_get_ptr(); dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); @@ -1879,7 +1871,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) /* Handle 'progress' messages */ case RETRO_MESSAGE_TYPE_PROGRESS: { - video_driver_state_t *video_st = + video_driver_state_t *video_st = video_state_get_ptr(); dispgfx_widget_t *p_dispwidget = dispwidget_get_ptr(); @@ -1898,7 +1890,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) case RETRO_MESSAGE_TYPE_NOTIFICATION: default: { - video_driver_state_t *video_st = + video_driver_state_t *video_st = video_state_get_ptr(); runloop_core_msg_queue_push( &video_st->av_info, msg); @@ -1975,7 +1967,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) const char *dir_system = settings->paths.directory_system; bool systemfiles_in_content_dir = settings->bools.systemfiles_in_content_dir; - if ( string_is_empty(dir_system) + if ( string_is_empty(dir_system) || systemfiles_in_content_dir) { const char *fullpath = path_get(RARCH_PATH_CONTENT); @@ -2030,7 +2022,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) case RETRO_ENVIRONMENT_SET_PIXEL_FORMAT: { - video_driver_state_t *video_st = + video_driver_state_t *video_st = video_state_get_ptr(); enum retro_pixel_format pix_fmt = *(const enum retro_pixel_format*)data; @@ -2186,7 +2178,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) case RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK: { - input_driver_state_t + input_driver_state_t *input_st = input_state_get_ptr(); const struct retro_keyboard_callback *info = (const struct retro_keyboard_callback*)data; @@ -2294,7 +2286,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) settings_t *settings = config_get_ptr(); struct retro_hw_render_callback *cb = (struct retro_hw_render_callback*)data; - video_driver_state_t *video_st = + video_driver_state_t *video_st = video_state_get_ptr(); struct retro_hw_render_callback *hwr = VIDEO_DRIVER_GET_HW_CONTEXT_INTERNAL(video_st); @@ -2382,11 +2374,11 @@ bool runloop_environment_cb(unsigned cmd, void *data) case RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK: #ifdef HAVE_THREADS { - recording_state_t + recording_state_t *recording_st = recording_state_get_ptr(); - audio_driver_state_t + audio_driver_state_t *audio_st = audio_state_get_ptr(); - const struct + const struct retro_audio_callback *cb = (const struct retro_audio_callback*)data; RARCH_LOG("[Environ]: SET_AUDIO_CALLBACK.\n"); #ifdef HAVE_NETWORKING @@ -2473,7 +2465,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) * without video driver initialisation) */ if (audio_latency_new != audio_latency_current) { - recording_state_t + recording_state_t *recording_st = recording_state_get_ptr(); video_driver_state_t *video_st = video_state_get_ptr(); bool video_fullscreen = settings->bools.video_fullscreen; @@ -2485,9 +2477,9 @@ bool runloop_environment_cb(unsigned cmd, void *data) command_event(CMD_EVENT_REINIT, &reinit_flags); video_driver_set_aspect_ratio(); - /* Cannot continue recording with different + /* Cannot continue recording with different * parameters. - * Take the easiest route out and just restart + * Take the easiest route out and just restart * the recording. */ if (recording_st->data) @@ -2524,7 +2516,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) case RETRO_ENVIRONMENT_GET_INPUT_DEVICE_CAPABILITIES: { uint64_t *mask = (uint64_t*)data; - input_driver_state_t + input_driver_state_t *input_st = input_state_get_ptr(); RARCH_LOG("[Environ]: GET_INPUT_DEVICE_CAPABILITIES.\n"); @@ -2571,7 +2563,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) { struct retro_location_callback *cb = (struct retro_location_callback*)data; - location_driver_state_t + location_driver_state_t *location_st = location_state_get_ptr(); RARCH_LOG("[Environ]: GET_LOCATION_INTERFACE.\n"); @@ -2657,7 +2649,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) /* First set new refresh rate and display rate, then after REINIT do * another display rate change to make sure the change stays */ - if ( video_switch_refresh_rate + if ( video_switch_refresh_rate && video_display_server_set_refresh_rate(refresh_rate)) video_monitor_set_refresh_rate(refresh_rate); @@ -2665,8 +2657,8 @@ bool runloop_environment_cb(unsigned cmd, void *data) * reinit, otherwise the input driver crashes and the menu gets * corrupted. */ if (no_video_reinit) - reinit_flags = - DRIVERS_CMD_ALL & + reinit_flags = + DRIVERS_CMD_ALL & ~(DRIVER_VIDEO_MASK | DRIVER_INPUT_MASK | DRIVER_MENU_MASK); @@ -2690,7 +2682,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) video_display_server_set_refresh_rate(refresh_rate); /* Cannot continue recording with different parameters. - * Take the easiest route out and just restart + * Take the easiest route out and just restart * the recording. */ if (recording_st->data) { @@ -2924,7 +2916,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) /* Can potentially be called every frame, * don't do anything unless required. */ if ( (geom->base_width != in_geom->base_width) - || (geom->base_height != in_geom->base_height) + || (geom->base_height != in_geom->base_height) || (geom->aspect_ratio != in_geom->aspect_ratio)) { geom->base_width = in_geom->base_width; @@ -2942,7 +2934,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) if (settings->bools.video_frame_delay_auto) video_st->frame_delay_pause = true; - /* TODO: Figure out what to do, if anything, with + /* TODO: Figure out what to do, if anything, with recording. */ } else @@ -3206,12 +3198,12 @@ bool runloop_environment_cb(unsigned cmd, void *data) bool menu_opened = false; bool core_paused = runloop_st->flags & RUNLOOP_FLAG_PAUSED; - bool no_audio = ((audio_st->flags & AUDIO_FLAG_SUSPENDED) + bool no_audio = ((audio_st->flags & AUDIO_FLAG_SUSPENDED) || !(audio_st->flags & AUDIO_FLAG_ACTIVE)); float core_fps = (float)video_st->av_info.timing.fps; #ifdef HAVE_REWIND - if (runloop_st->rewind_st.flags + if (runloop_st->rewind_st.flags & STATE_MGR_REWIND_ST_FLAG_FRAME_IS_REVERSED) { throttle_state->mode = RETRO_THROTTLE_REWINDING; @@ -3258,7 +3250,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) /* VSync overrides the mode if the rate is limited by the display. */ if ( menu_opened /* Menu currently always runs with vsync on. */ - || (settings->bools.video_vsync + || (settings->bools.video_vsync && (!(runloop_st->flags & RUNLOOP_FLAG_FORCE_NONBLOCK)) && !(input_state_get_ptr()->flags & INP_FLAG_NONBLOCKING))) { @@ -3280,7 +3272,7 @@ bool runloop_environment_cb(unsigned cmd, void *data) && throttle_state->mode != RETRO_THROTTLE_VSYNC) { /* Keep base if frame limiter matching the core is active. */ - retro_time_t core_limit = (core_fps + retro_time_t core_limit = (core_fps ? (retro_time_t)(1000000.0f / core_fps) : (retro_time_t)0); retro_time_t frame_limit = runloop_st->frame_limit_minimum_time; @@ -3749,7 +3741,7 @@ static void runloop_audio_buffer_status_free(runloop_state_t *runloop_st) static void runloop_fastmotion_override_free(runloop_state_t *runloop_st) { - video_driver_state_t + video_driver_state_t *video_st = video_state_get_ptr(); settings_t *settings = config_get_ptr(); float fastforward_ratio = settings->floats.fastforward_ratio; @@ -3959,7 +3951,7 @@ static void runloop_apply_fastmotion_override(runloop_state_t *runloop_st, setti * (required if RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE * is called during core de-initialisation) */ #if defined(HAVE_GFX_WIDGETS) - if ( p_dispwidget->active + if ( p_dispwidget->active && !(runloop_st->flags & RUNLOOP_FLAG_FASTMOTION)) video_st->flags &= ~VIDEO_FLAG_WIDGETS_FAST_FORWARD; #endif @@ -3979,7 +3971,7 @@ static void runloop_apply_fastmotion_override(runloop_state_t *runloop_st, setti void runloop_event_deinit_core(void) { - video_driver_state_t + video_driver_state_t *video_st = video_state_get_ptr(); runloop_state_t *runloop_st = &runloop_state; settings_t *settings = config_get_ptr(); @@ -4073,7 +4065,7 @@ static bool runloop_path_init_subsystem(runloop_state_t *runloop_st) { unsigned num_content = MIN(info->num_roms, subsystem_path_empty - ? 0 + ? 0 : (unsigned)runloop_st->subsystem_fullpaths->size); for (i = 0; i < num_content; i++) @@ -4117,7 +4109,7 @@ static bool runloop_path_init_subsystem(runloop_state_t *runloop_st) } } - /* Let other relevant paths be inferred + /* Let other relevant paths be inferred from the main SRAM location. */ if (!retroarch_override_setting_is_set( RARCH_OVERRIDE_SETTING_SAVE_PATH, NULL)) @@ -4155,7 +4147,7 @@ static void runloop_path_init_savefile_internal(runloop_state_t *runloop_st) static void runloop_path_init_savefile(runloop_state_t *runloop_st) { - bool should_sram_be_used = + bool should_sram_be_used = (runloop_st->flags & RUNLOOP_FLAG_USE_SRAM) && !(runloop_st->flags & RUNLOOP_FLAG_IS_SRAM_SAVE_DISABLED); @@ -4229,7 +4221,7 @@ static bool event_init_content( are true. */ #ifdef HAVE_CHEEVOS - if ( !cheevos_enable + if ( !cheevos_enable || !cheevos_hardcore_mode_enable) #endif { @@ -4239,7 +4231,7 @@ static bool event_init_content( if (!(input_st->bsv_movie_state.flags & BSV_FLAG_MOVIE_START_PLAYBACK)) #endif { - if ( runloop_st->entry_state_slot + if ( runloop_st->entry_state_slot && !command_event_load_entry_state(settings)) { /* loading the state failed, reset entry slot */ @@ -4331,7 +4323,7 @@ void runloop_set_frame_limit( runloop_st->frame_limit_minimum_time = 0.0f; else runloop_st->frame_limit_minimum_time = (retro_time_t) - roundf(1000000.0f / + roundf(1000000.0f / (av_info->timing.fps * fastforward_ratio)); } @@ -4339,7 +4331,7 @@ float runloop_get_fastforward_ratio( settings_t *settings, struct retro_fastforwarding_override *fastmotion_override) { - if ( fastmotion_override->fastforward + if ( fastmotion_override->fastforward && (fastmotion_override->ratio >= 0.0f)) return fastmotion_override->ratio; return settings->floats.fastforward_ratio; @@ -4378,7 +4370,7 @@ void runloop_set_video_swap_interval( * set swap interval to 1 */ if ( (vrr_runloop_enable) || (core_hz > timing_hz) - || (core_hz <= 0.0f) + || (core_hz <= 0.0f) || (timing_hz <= 0.0f)) { runloop_st->video_swap_interval_auto = 1; @@ -4425,7 +4417,7 @@ unsigned int retroarch_get_core_requested_rotation(void) } /* - Returns final rotation including both user chosen video rotation + Returns final rotation including both user chosen video rotation and core requested rotation if allowed by video_allow_rotate */ unsigned int retroarch_get_rotation(void) @@ -4925,7 +4917,7 @@ bool core_options_remove_override(bool game_specific) /* Sanity check 2 - can only remove an override * if the specified type is currently active */ - if ( game_specific + if ( game_specific && !(runloop_st->flags & RUNLOOP_FLAG_GAME_OPTIONS_ACTIVE) ) goto error; @@ -5114,7 +5106,7 @@ void core_options_flush(void) if (!string_is_empty(path_core_options)) { config_file_t *conf_tmp = NULL; - bool path_valid = path_is_valid(path_core_options); + bool path_valid = path_is_valid(path_core_options); /* Attempt to load existing file */ if (path_valid) @@ -5419,7 +5411,7 @@ static enum runloop_state_enum runloop_check_state( BIT256_CLEAR_ALL_PTR(¤t_bits); - input_st->flags &= ~(INP_FLAG_BLOCK_LIBRETRO_INPUT + input_st->flags &= ~(INP_FLAG_BLOCK_LIBRETRO_INPUT | INP_FLAG_BLOCK_HOTKEY); if (input_st->flags & INP_FLAG_KB_MAPPING_BLOCKED) @@ -5452,8 +5444,8 @@ static enum runloop_state_enum runloop_check_state( if (input_active || (menu_st->input_driver_flushing_input > 0)) { BIT256_CLEAR_ALL(current_bits); - if ( runloop_paused - && !runloop_paused_hotkey + if ( runloop_paused + && !runloop_paused_hotkey && settings->bools.menu_pause_libretro) BIT256_SET(current_bits, RARCH_PAUSE_TOGGLE); else if (runloop_paused_hotkey) @@ -5497,7 +5489,7 @@ static enum runloop_state_enum runloop_check_state( HOTKEY_CHECK(RARCH_GRAB_MOUSE_TOGGLE, CMD_EVENT_GRAB_MOUSE_TOGGLE, true, NULL); /* Automatic mouse grab on focus */ - if ( settings->bools.input_auto_mouse_grab + if ( settings->bools.input_auto_mouse_grab && (is_focused) && (is_focused != (((runloop_st->flags & RUNLOOP_FLAG_FOCUSED)) > 0)) && !(input_st->flags & INP_FLAG_GRAB_MOUSE_STATE)) @@ -5564,10 +5556,10 @@ static enum runloop_state_enum runloop_check_state( #endif /* - * If the Aspect Ratio is FULL then update the aspect ratio to the + * If the Aspect Ratio is FULL then update the aspect ratio to the * current video driver aspect ratio (The full window) - * - * TODO/FIXME + * + * TODO/FIXME * Should possibly be refactored to have last width & driver width & height * only be done once when we are using an overlay OR using aspect ratio * full @@ -5612,7 +5604,7 @@ static enum runloop_state_enum runloop_check_state( quit_press_twice = settings->bools.quit_press_twice; /* Check double press if enabled */ - if ( trig_quit_key + if ( trig_quit_key && quit_press_twice) { static retro_time_t quit_key_time = 0; @@ -5915,7 +5907,7 @@ static enum runloop_state_enum runloop_check_state( runloop_st->flags & RUNLOOP_FLAG_IDLE); } - if ( (menu_st->flags & MENU_ST_FLAG_ALIVE) + if ( (menu_st->flags & MENU_ST_FLAG_ALIVE) && !(runloop_st->flags & RUNLOOP_FLAG_IDLE)) if (display_menu_libretro(runloop_st, input_st, settings->floats.slowmotion_ratio, @@ -6330,7 +6322,7 @@ static enum runloop_state_enum runloop_check_state( current_bits, RARCH_FAST_FORWARD_KEY); bool new_hold_button_state = BIT256_GET( current_bits, RARCH_FAST_FORWARD_HOLD_KEY); - bool check2 = new_button_state + bool check2 = new_button_state && !old_button_state; if (!check2) @@ -6468,7 +6460,7 @@ static enum runloop_state_enum runloop_check_state( #ifdef HAVE_REWIND struct state_manager_rewind_state *rewind_st = &runloop_st->rewind_st; - if (rewind_st->flags + if (rewind_st->flags & STATE_MGR_REWIND_ST_FLAG_FRAME_IS_REVERSED) runloop_msg_queue_push( msg_hash_to_str(MSG_SLOW_MOTION_REWIND), 1, 1, false, NULL, @@ -6569,12 +6561,12 @@ static enum runloop_state_enum runloop_check_state( if (check2 && !check1 && replay_slot + addition < -1) { replay_slot = 1000; - check1 = true; + check1 = true; } } /* Wrap-around to -1 (Auto) */ else if (replay_slot + addition > 999) - replay_slot = -2; + replay_slot = -2; if (check2) { @@ -6670,10 +6662,10 @@ static enum runloop_state_enum runloop_check_state( */ if (need_to_apply) { - timer.current = current_time; + timer.current = current_time; timer.timeout_us = timer.timeout_end - timer.current; - if ( !timer.timer_end + if ( !timer.timer_end && timer.timeout_us <= 0) { timer.timer_end = true; @@ -6692,7 +6684,7 @@ static enum runloop_state_enum runloop_check_state( { runloop_st->shader_delay_timer.timeout_us = settings->uints.video_shader_delay * 1000; runloop_st->shader_delay_timer.current = cpu_features_get_time_usec(); - runloop_st->shader_delay_timer.timeout_end = runloop_st->shader_delay_timer.current + runloop_st->shader_delay_timer.timeout_end = runloop_st->shader_delay_timer.current + runloop_st->shader_delay_timer.timeout_us; runloop_st->shader_delay_timer.timer_begin = true; runloop_st->shader_delay_timer.timer_end = false; @@ -6700,7 +6692,7 @@ static enum runloop_state_enum runloop_check_state( else { runloop_st->shader_delay_timer.current = current_time; - runloop_st->shader_delay_timer.timeout_us = runloop_st->shader_delay_timer.timeout_end + runloop_st->shader_delay_timer.timeout_us = runloop_st->shader_delay_timer.timeout_end - runloop_st->shader_delay_timer.current; if (runloop_st->shader_delay_timer.timeout_us <= 0) @@ -6886,8 +6878,8 @@ int runloop_iterate(void) #ifdef HAVE_NETWORKING #ifdef HAVE_MENU /* FIXME: This is an ugly way to tell Netplay this... */ - if (menu_pause_libretro && - netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_ENABLED, NULL) + if ( menu_pause_libretro + && netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_ENABLED, NULL) ) netplay_driver_ctl(RARCH_NETPLAY_CTL_PAUSE, NULL); #endif @@ -6961,16 +6953,16 @@ int runloop_iterate(void) if (dpad_mode[i] == ANALOG_DPAD_LSTICK) { - x_plus = RARCH_ANALOG_LEFT_X_PLUS; - y_plus = RARCH_ANALOG_LEFT_Y_PLUS; - x_minus = RARCH_ANALOG_LEFT_X_MINUS; - y_minus = RARCH_ANALOG_LEFT_Y_MINUS; + x_plus = RARCH_ANALOG_LEFT_X_PLUS; + y_plus = RARCH_ANALOG_LEFT_Y_PLUS; + x_minus = RARCH_ANALOG_LEFT_X_MINUS; + y_minus = RARCH_ANALOG_LEFT_Y_MINUS; } for (k = RETRO_DEVICE_ID_JOYPAD_UP; k <= RETRO_DEVICE_ID_JOYPAD_RIGHT; k++) { - (auto_binds)[k].orig_joyaxis = (auto_binds)[k].joyaxis; - (general_binds)[k].orig_joyaxis = (general_binds)[k].joyaxis; + (auto_binds)[k].orig_joyaxis = (auto_binds)[k].joyaxis; + (general_binds)[k].orig_joyaxis = (general_binds)[k].joyaxis; } if (!INHERIT_JOYAXIS(auto_binds)) @@ -7010,9 +7002,9 @@ int runloop_iterate(void) static bool skip_delay_prev = false; bool frame_time_update = /* Skip some initial frames for stabilization */ - video_st->frame_count > frame_time_interval && + video_st->frame_count > frame_time_interval /* Only update when there are enough frames for averaging */ - video_st->frame_count % frame_time_interval == 0; + && video_st->frame_count % frame_time_interval == 0; /* A few frames must be ignored after slow+fastmotion/pause * is disabled or geometry change is triggered */ @@ -7045,17 +7037,17 @@ int runloop_iterate(void) /* Reset new desired delay target */ if (video_st->frame_delay_target != video_frame_delay) { - frame_time_update = false; - video_st->frame_delay_target = video_frame_delay_effective = video_frame_delay; + frame_time_update = false; + video_st->frame_delay_target = video_frame_delay_effective = video_frame_delay; RARCH_LOG("[Video]: Frame delay reset to %d ms.\n", video_frame_delay); } /* Decide what should happen to effective delay */ if (video_frame_delay_effective > 0 && frame_time_update) { - video_frame_delay_auto_t vfda = {0}; - vfda.frame_time_interval = frame_time_interval; - vfda.refresh_rate = refresh_rate; + video_frame_delay_auto_t vfda = {0}; + vfda.frame_time_interval = frame_time_interval; + vfda.refresh_rate = refresh_rate; video_frame_delay_auto(video_st, &vfda); if (vfda.delay_decrease > 0) @@ -7084,10 +7076,10 @@ int runloop_iterate(void) bool run_ahead_secondary_instance = settings->bools.run_ahead_secondary_instance; /* Run Ahead Feature replaces the call to core_run in this loop */ bool want_runahead = run_ahead_enabled - && (run_ahead_num_frames > 0) + && (run_ahead_num_frames > 0) && (runloop_st->flags & RUNLOOP_FLAG_RUNAHEAD_AVAILABLE); #ifdef HAVE_NETWORKING - want_runahead = want_runahead + want_runahead = want_runahead && !netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_ENABLED, NULL); #endif @@ -7204,9 +7196,9 @@ end: /* if there's a fast forward limit, inject sleeps to keep from going too fast. */ if (runloop_st->frame_limit_minimum_time) { - const retro_time_t end_frame_time = cpu_features_get_time_usec(); - const retro_time_t to_sleep_ms = ( - ( runloop_st->frame_limit_last_time + const retro_time_t end_frame_time = cpu_features_get_time_usec(); + const retro_time_t to_sleep_ms = ( + ( runloop_st->frame_limit_last_time + runloop_st->frame_limit_minimum_time) - end_frame_time) / 1000; @@ -7215,7 +7207,7 @@ end: unsigned sleep_ms = (unsigned)to_sleep_ms; /* Combat jitter a bit. */ - runloop_st->frame_limit_last_time += + runloop_st->frame_limit_last_time += runloop_st->frame_limit_minimum_time; if (sleep_ms > 0) @@ -7501,7 +7493,7 @@ bool core_set_cheat(retro_ctx_cheat_info_t *info) run_ahead_frames = settings->uints.run_ahead_frames; run_ahead_secondary_instance = settings->bools.run_ahead_secondary_instance; want_runahead = run_ahead_enabled - && (run_ahead_frames > 0) + && (run_ahead_frames > 0) && (runloop_st->flags & RUNLOOP_FLAG_RUNAHEAD_AVAILABLE); #ifdef HAVE_NETWORKING if (want_runahead) @@ -7540,8 +7532,8 @@ bool core_reset_cheat(void) run_ahead_enabled = settings->bools.run_ahead_enabled; run_ahead_frames = settings->uints.run_ahead_frames; run_ahead_secondary_instance = settings->bools.run_ahead_secondary_instance; - want_runahead = run_ahead_enabled - && (run_ahead_frames > 0) + want_runahead = run_ahead_enabled + && (run_ahead_frames > 0) && (runloop_st->flags & RUNLOOP_FLAG_RUNAHEAD_AVAILABLE); #ifdef HAVE_NETWORKING if (want_runahead) @@ -7782,7 +7774,7 @@ void core_run(void) current_core->retro_run(); - if ( late_polling + if ( late_polling && (!(current_core->flags & RETRO_CORE_FLAG_INPUT_POLLED))) input_driver_poll(); @@ -7874,7 +7866,7 @@ void runloop_path_set_names(void) sizeof(runloop_st->name.replay) - len); } #endif - + #ifdef HAVE_CHEATS if (!string_is_empty(runloop_st->runtime_content_path_basename)) { @@ -7929,7 +7921,7 @@ void runloop_path_set_redirect(settings_t *settings, #endif { /* Per-core and/or per-content-directory saves */ - if (( sort_savefiles_enable + if (( sort_savefiles_enable || sort_savefiles_by_content_enable) && !string_is_empty(old_savefile_dir)) { @@ -8008,13 +8000,13 @@ void runloop_path_set_redirect(settings_t *settings, if (string_is_empty(new_savefile_dir)) RARCH_LOG("Cannot resolve save file path.\n"); - else if (sort_savefiles_enable + else if (sort_savefiles_enable || sort_savefiles_by_content_enable) RARCH_LOG("Saving files in content directory is set. This overrides other save file directory settings.\n"); } /* Set savestate directory if empty based on content directory */ - if ( string_is_empty(new_savestate_dir) + if ( string_is_empty(new_savestate_dir) || savestates_in_content_dir) { strlcpy(new_savestate_dir, @@ -8024,7 +8016,7 @@ void runloop_path_set_redirect(settings_t *settings, if (string_is_empty(new_savestate_dir)) RARCH_LOG("Cannot resolve save state file path.\n"); - else if (sort_savestates_enable + else if (sort_savestates_enable || sort_savestates_by_content_enable) RARCH_LOG("Saving save states in content directory is set. This overrides other save state file directory settings.\n"); }