Skip to content

Commit aa89097

Browse files
authored
Use RETRO_SAVESTATE_CONTEXT_RUNAHEAD_SAME_INSTANCE for rewind savestates (#18271)
1 parent cfc59db commit aa89097

File tree

3 files changed

+27
-14
lines changed

3 files changed

+27
-14
lines changed

runloop.c

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3153,29 +3153,37 @@ bool runloop_environment_cb(unsigned cmd, void *data)
31533153
{
31543154
int result = RETRO_SAVESTATE_CONTEXT_NORMAL;
31553155

3156-
#if defined(HAVE_RUNAHEAD) || defined(HAVE_NETWORKING)
3157-
if (runloop_st->flags & RUNLOOP_FLAG_REQUEST_SPECIAL_SAVESTATE)
3156+
#ifdef HAVE_REWIND
3157+
if (runloop_st->rewind_st.flags &
3158+
STATE_MGR_REWIND_ST_FLAG_IS_REWIND_SERIALIZE)
3159+
result = RETRO_SAVESTATE_CONTEXT_RUNAHEAD_SAME_INSTANCE;
3160+
else
3161+
#endif
31583162
{
3163+
#if defined(HAVE_RUNAHEAD) || defined(HAVE_NETWORKING)
3164+
if (runloop_st->flags & RUNLOOP_FLAG_REQUEST_SPECIAL_SAVESTATE)
3165+
{
31593166
#ifdef HAVE_NETWORKING
3160-
if (netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_ENABLED, NULL))
3161-
result = RETRO_SAVESTATE_CONTEXT_ROLLBACK_NETPLAY;
3162-
else
3167+
if (netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_ENABLED, NULL))
3168+
result = RETRO_SAVESTATE_CONTEXT_ROLLBACK_NETPLAY;
3169+
else
31633170
#endif
3164-
{
3171+
{
31653172
#ifdef HAVE_RUNAHEAD
31663173
#if defined(HAVE_DYNAMIC) || defined(HAVE_DYLIB)
3167-
settings_t *settings = config_get_ptr();
3168-
if ( settings->bools.run_ahead_secondary_instance
3169-
&& (runloop_st->flags & RUNLOOP_FLAG_RUNAHEAD_SECONDARY_CORE_AVAILABLE)
3170-
&& secondary_core_ensure_exists(runloop_st, settings))
3171-
result = RETRO_SAVESTATE_CONTEXT_RUNAHEAD_SAME_BINARY;
3172-
else
3174+
settings_t *settings = config_get_ptr();
3175+
if ( settings->bools.run_ahead_secondary_instance
3176+
&& (runloop_st->flags & RUNLOOP_FLAG_RUNAHEAD_SECONDARY_CORE_AVAILABLE)
3177+
&& secondary_core_ensure_exists(runloop_st, settings))
3178+
result = RETRO_SAVESTATE_CONTEXT_RUNAHEAD_SAME_BINARY;
3179+
else
31733180
#endif
31743181
result = RETRO_SAVESTATE_CONTEXT_RUNAHEAD_SAME_INSTANCE;
31753182
#endif
3183+
}
31763184
}
3177-
}
31783185
#endif
3186+
}
31793187

31803188
if (data)
31813189
*(int*)data = result;

state_manager.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,9 @@ void state_manager_event_init(
626626

627627
state_manager_push_where(rewind_st->state, &state);
628628

629+
rewind_st->flags |= STATE_MGR_REWIND_ST_FLAG_IS_REWIND_SERIALIZE;
629630
content_serialize_state_rewind(state, rewind_st->size);
631+
rewind_st->flags &= ~STATE_MGR_REWIND_ST_FLAG_IS_REWIND_SERIALIZE;
630632

631633
state_manager_push_do(rewind_st->state);
632634
}
@@ -803,7 +805,9 @@ bool state_manager_check_rewind(
803805
void *state = NULL;
804806
state_manager_push_where(rewind_st->state, &state);
805807

808+
rewind_st->flags |= STATE_MGR_REWIND_ST_FLAG_IS_REWIND_SERIALIZE;
806809
content_serialize_state_rewind(state, rewind_st->size);
810+
rewind_st->flags &= ~STATE_MGR_REWIND_ST_FLAG_IS_REWIND_SERIALIZE;
807811

808812
state_manager_push_do(rewind_st->state);
809813
}

state_manager.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ enum state_manager_rewind_st_flags
3333
STATE_MGR_REWIND_ST_FLAG_FRAME_IS_REVERSED = (1 << 0),
3434
STATE_MGR_REWIND_ST_FLAG_INIT_ATTEMPTED = (1 << 1),
3535
STATE_MGR_REWIND_ST_FLAG_HOTKEY_WAS_CHECKED = (1 << 2),
36-
STATE_MGR_REWIND_ST_FLAG_HOTKEY_WAS_PRESSED = (1 << 3)
36+
STATE_MGR_REWIND_ST_FLAG_HOTKEY_WAS_PRESSED = (1 << 3),
37+
STATE_MGR_REWIND_ST_FLAG_IS_REWIND_SERIALIZE = (1 << 4)
3738
};
3839

3940
struct state_manager

0 commit comments

Comments
 (0)