Turn core boolean variables into flags

This commit is contained in:
LibretroAdmin 2022-10-27 00:29:24 +02:00
parent c0d6d6e750
commit c7eee86fd5
5 changed files with 71 additions and 48 deletions

View File

@ -860,13 +860,13 @@ void retroarch_deinit_drivers(struct retro_callbacks *cbs)
wifi_driver_ctl(RARCH_WIFI_CTL_DESTROY, NULL);
#endif
cbs->frame_cb = retro_frame_null;
cbs->poll_cb = retro_input_poll_null;
cbs->sample_cb = NULL;
cbs->sample_batch_cb = NULL;
cbs->state_cb = NULL;
cbs->frame_cb = retro_frame_null;
cbs->poll_cb = retro_input_poll_null;
cbs->sample_cb = NULL;
cbs->sample_batch_cb = NULL;
cbs->state_cb = NULL;
runloop_st->current_core.inited = false;
runloop_st->current_core.flags &= ~RETRO_CORE_FLAG_INITED;
}
bool driver_ctl(enum driver_ctl_state state, void *data)

View File

@ -55,6 +55,16 @@ const struct retro_controller_description *
libretro_find_controller_description(
const struct retro_controller_info *info, unsigned id);
enum retro_core_flags
{
RETRO_CORE_FLAG_INITED = (1 << 0),
RETRO_CORE_FLAG_SYMBOLS_INITED = (1 << 1),
RETRO_CORE_FLAG_GAME_LOADED = (1 << 2),
RETRO_CORE_FLAG_INPUT_POLLED = (1 << 3),
RETRO_CORE_FLAG_HAS_SET_SUBSYSTEMS = (1 << 4),
RETRO_CORE_FLAG_HAS_SET_INPUT_DESCRIPTORS = (1 << 5)
};
struct retro_core_t
{
uint64_t serialization_quirks_v;
@ -86,12 +96,7 @@ struct retro_core_t
size_t (*retro_get_memory_size)(unsigned);
unsigned poll_type;
bool inited;
bool symbols_inited;
bool game_loaded;
bool input_polled;
bool has_set_subsystems;
bool has_set_input_descriptors;
uint8_t flags;
};
RETRO_END_DECLS

View File

@ -2665,7 +2665,7 @@ void video_driver_cached_frame(void)
/* Cannot allow recording when pushing duped frames. */
recording_st->data = NULL;
if (runloop_st->current_core.inited)
if (runloop_st->current_core.flags & RETRO_CORE_FLAG_INITED)
cbs->frame_cb(
(video_st->frame_cache_data != RETRO_HW_FRAME_BUFFER_VALID)
? video_st->frame_cache_data
@ -2813,7 +2813,8 @@ VIDEO_FLAG_WIDGETS_FAST_FORWARD;
settings->floats.menu_framebuffer_opacity;
video_info->overlay_behind_menu = settings->bools.input_overlay_behind_menu;
video_info->libretro_running = runloop_st->current_core.game_loaded;
video_info->libretro_running = runloop_st->current_core.flags &
RETRO_CORE_FLAG_GAME_LOADED;
#else
video_info->menu_is_alive = false;
video_info->menu_screensaver_active = false;
@ -3572,7 +3573,7 @@ VIDEO_DRIVER_IS_THREADED_INTERNAL(video_st);
}
#endif
if (!runloop_st->current_core.game_loaded)
if (!(runloop_st->current_core.flags & RETRO_CORE_FLAG_GAME_LOADED))
video_driver_cached_frame_set(&dummy_pixels, 4, 4, 8);
#if defined(PSP)

View File

@ -3629,8 +3629,8 @@ static void global_free(struct rarch_state *p_rarch)
| RUNLOOP_FLAG_REMAPS_CONTENT_DIR_ACTIVE);
#endif
runloop_st->current_core.has_set_input_descriptors = false;
runloop_st->current_core.has_set_subsystems = false;
runloop_st->current_core.flags &= ~(RETRO_CORE_FLAG_HAS_SET_INPUT_DESCRIPTORS
| RETRO_CORE_FLAG_HAS_SET_SUBSYSTEMS);
global = global_get_ptr();
path_clear_all();
@ -4729,8 +4729,8 @@ static bool retroarch_parse_input_and_config(
/* Flush out some states that could have been set
* by core environment variables. */
runloop_st->current_core.has_set_input_descriptors = false;
runloop_st->current_core.has_set_subsystems = false;
runloop_st->current_core.flags &= ~(RETRO_CORE_FLAG_HAS_SET_INPUT_DESCRIPTORS
| RETRO_CORE_FLAG_HAS_SET_SUBSYSTEMS);
/* Load the config file now that we know what it is */
#ifdef HAVE_CONFIGFILE
@ -5577,7 +5577,8 @@ bool retroarch_ctl(enum rarch_ctl_state state, void *data)
switch(state)
{
case RARCH_CTL_HAS_SET_SUBSYSTEMS:
return runloop_st->current_core.has_set_subsystems;
return ((runloop_st->current_core.flags &
RETRO_CORE_FLAG_HAS_SET_SUBSYSTEMS) > 0);
#ifdef HAVE_BSV_MOVIE
case RARCH_CTL_BSV_MOVIE_IS_INITED:
return (input_state_get_ptr()->bsv_movie_state_handle != NULL);

View File

@ -2146,7 +2146,8 @@ bool runloop_environment_cb(unsigned cmd, void *data)
}
}
runloop_st->current_core.has_set_input_descriptors = true;
runloop_st->current_core.flags |=
RETRO_CORE_FLAG_HAS_SET_INPUT_DESCRIPTORS;
}
break;
@ -2718,7 +2719,8 @@ bool runloop_environment_cb(unsigned cmd, void *data)
memcpy(system->subsystem.data, info,
i * sizeof(*system->subsystem.data));
system->subsystem.size = i;
runloop_st->current_core.has_set_subsystems = true;
runloop_st->current_core.flags |=
RETRO_CORE_FLAG_HAS_SET_SUBSYSTEMS;
}
break;
}
@ -4063,16 +4065,19 @@ static bool secondary_core_create(runloop_state_t *runloop_st,
&runloop_st->secondary_lib_handle))
return false;
runloop_st->secondary_core.symbols_inited = true;
runloop_st->secondary_core.flags |= RETRO_CORE_FLAG_SYMBOLS_INITED;
runloop_st->secondary_core.retro_set_environment(
runloop_environment_secondary_core_hook);
#ifdef HAVE_RUNAHEAD
runloop_st->flags |= RUNLOOP_FLAG_HAS_VARIABLE_UPDATE;
runloop_st->flags |= RUNLOOP_FLAG_HAS_VARIABLE_UPDATE;
#endif
runloop_st->secondary_core.retro_init();
runloop_st->secondary_core.inited = (flags & CONTENT_ST_FLAG_IS_INITED);
if (flags & CONTENT_ST_FLAG_IS_INITED)
runloop_st->secondary_core.flags |= RETRO_CORE_FLAG_INITED;
else
runloop_st->secondary_core.flags &= ~RETRO_CORE_FLAG_INITED;
/* Load Content */
/* disabled due to crashes */
@ -4083,23 +4088,29 @@ static bool secondary_core_create(runloop_state_t *runloop_st,
if ( (runloop_st->load_content_info->content->size > 0) &&
runloop_st->load_content_info->content->elems[0].data)
{
runloop_st->secondary_core.game_loaded =
runloop_st->secondary_core.retro_load_game(
runloop_st->load_content_info->info);
if (!runloop_st->secondary_core.game_loaded)
if (runloop_st->secondary_core.retro_load_game(
runloop_st->load_content_info->info))
runloop_st->secondary_core.flags |= RETRO_CORE_FLAG_GAME_LOADED;
else
{
runloop_st->secondary_core.flags &= ~RETRO_CORE_FLAG_GAME_LOADED;
goto error;
}
}
else if (flags & CONTENT_ST_FLAG_CORE_DOES_NOT_NEED_CONTENT)
{
runloop_st->secondary_core.game_loaded =
runloop_st->secondary_core.retro_load_game(NULL);
if (!runloop_st->secondary_core.game_loaded)
if (runloop_st->secondary_core.retro_load_game(NULL))
runloop_st->secondary_core.flags |= RETRO_CORE_FLAG_GAME_LOADED;
else
{
runloop_st->secondary_core.flags &= ~RETRO_CORE_FLAG_GAME_LOADED;
goto error;
}
}
else
runloop_st->secondary_core.game_loaded = false;
runloop_st->secondary_core.flags &= ~RETRO_CORE_FLAG_GAME_LOADED;
if (!runloop_st->secondary_core.inited)
if (!(runloop_st->secondary_core.flags & RETRO_CORE_FLAG_INITED))
goto error;
core_set_default_callbacks(&runloop_st->secondary_callbacks);
@ -4982,12 +4993,12 @@ static bool core_unload_game(void)
video_driver_set_cached_frame_ptr(NULL);
if (runloop_st->current_core.game_loaded)
if ((runloop_st->current_core.flags & RETRO_CORE_FLAG_GAME_LOADED))
{
RARCH_LOG("[Core]: Unloading game..\n");
runloop_st->current_core.retro_unload_game();
runloop_st->core_poll_type_override = POLL_TYPE_OVERRIDE_DONTCARE;
runloop_st->current_core.game_loaded = false;
runloop_st->current_core.flags &= ~RETRO_CORE_FLAG_GAME_LOADED;
}
audio_driver_stop();
@ -5080,7 +5091,7 @@ void runloop_event_deinit_core(void)
video_driver_set_cached_frame_ptr(NULL);
if (runloop_st->current_core.inited)
if (runloop_st->current_core.flags & RETRO_CORE_FLAG_INITED)
{
RARCH_LOG("[Core]: Unloading core..\n");
runloop_st->current_core.retro_deinit();
@ -5112,7 +5123,7 @@ void runloop_event_deinit_core(void)
RARCH_LOG("[Core]: Unloading core symbols..\n");
uninit_libretro_symbols(&runloop_st->current_core);
runloop_st->current_core.symbols_inited = false;
runloop_st->current_core.flags &= ~RETRO_CORE_FLAG_SYMBOLS_INITED;
/* Restore original refresh rate, if it has been changed
* automatically in SET_SYSTEM_AV_INFO */
@ -5381,10 +5392,10 @@ static bool core_verify_api_version(void)
static int16_t core_input_state_poll_late(unsigned port,
unsigned device, unsigned idx, unsigned id)
{
runloop_state_t *runloop_st = &runloop_state;
if (!runloop_st->current_core.input_polled)
runloop_state_t *runloop_st = &runloop_state;
if (!(runloop_st->current_core.flags & RETRO_CORE_FLAG_INPUT_POLLED))
input_driver_poll();
runloop_st->current_core.input_polled = true;
runloop_st->current_core.flags |= RETRO_CORE_FLAG_INPUT_POLLED;
return input_driver_state_wrapper(port, device, idx, id);
}
@ -5520,7 +5531,7 @@ bool runloop_event_init_core(
return false;
if (!runloop_st->current_core.retro_run)
runloop_st->current_core.retro_run = retro_run_null;
runloop_st->current_core.symbols_inited = true;
runloop_st->current_core.flags |= RETRO_CORE_FLAG_SYMBOLS_INITED;
runloop_st->current_core.retro_get_system_info(&sys_info->info);
if (!sys_info->info.library_name)
@ -5606,7 +5617,7 @@ bool runloop_event_init_core(
video_driver_set_cached_frame_ptr(NULL);
runloop_st->current_core.retro_init();
runloop_st->current_core.inited = true;
runloop_st->current_core.flags |= RETRO_CORE_FLAG_INITED;
/* Attempt to set initial disk index */
disk_control_set_initial_index(
@ -8466,7 +8477,10 @@ bool core_load_game(retro_ctx_load_content_info_t *load_info)
else if (flags & CONTENT_ST_FLAG_CORE_DOES_NOT_NEED_CONTENT)
game_loaded = runloop_st->current_core.retro_load_game(NULL);
runloop_st->current_core.game_loaded = game_loaded;
if (game_loaded)
runloop_st->current_core.flags |= RETRO_CORE_FLAG_GAME_LOADED;
else
runloop_st->current_core.flags &= ~RETRO_CORE_FLAG_GAME_LOADED;
/* If 'game_loaded' is true at this point, then
* core is actually running; register that any
@ -8611,11 +8625,12 @@ bool core_run(void)
if (early_polling)
input_driver_poll();
else if (late_polling)
current_core->input_polled = false;
current_core->flags &= ~RETRO_CORE_FLAG_INPUT_POLLED;
current_core->retro_run();
if (late_polling && !current_core->input_polled)
if ( late_polling
&& (!(current_core->flags & RETRO_CORE_FLAG_INPUT_POLLED)))
input_driver_poll();
#ifdef HAVE_NETWORKING
@ -8628,10 +8643,11 @@ bool core_run(void)
bool core_has_set_input_descriptor(void)
{
runloop_state_t *runloop_st = &runloop_state;
return runloop_st->current_core.has_set_input_descriptors;
return ((runloop_st->current_core.flags &
RETRO_CORE_FLAG_HAS_SET_INPUT_DESCRIPTORS) > 0);
}
char* crt_switch_core_name(void)
char *crt_switch_core_name(void)
{
return (char*)runloop_state.system.info.library_name;
}