mirror of
https://github.com/libretro/RetroArch
synced 2025-04-01 04:20:27 +00:00
Add private environment callback - only used by Flycast
(RetroArch-specific, for threaded rendering)
This commit is contained in:
parent
f80d77c06c
commit
42f2d0ffa4
73
retroarch.c
73
retroarch.c
@ -824,6 +824,16 @@ static settings_t *configuration_settings = NULL;
|
|||||||
static enum rarch_core_type current_core_type = CORE_TYPE_PLAIN;
|
static enum rarch_core_type current_core_type = CORE_TYPE_PLAIN;
|
||||||
static enum rarch_core_type explicit_current_core_type = CORE_TYPE_PLAIN;
|
static enum rarch_core_type explicit_current_core_type = CORE_TYPE_PLAIN;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Override poll type behavior, is set by the core.
|
||||||
|
*
|
||||||
|
* 0 - Don't Care
|
||||||
|
* 1 - Early
|
||||||
|
* 2 - Normal
|
||||||
|
* 3 - Late
|
||||||
|
*/
|
||||||
|
static unsigned core_poll_type_override = 0;
|
||||||
|
|
||||||
static bool has_set_username = false;
|
static bool has_set_username = false;
|
||||||
|
|
||||||
#ifdef HAVE_THREAD_STORAGE
|
#ifdef HAVE_THREAD_STORAGE
|
||||||
@ -7736,15 +7746,6 @@ static bool rarch_environment_cb(unsigned cmd, void *data)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case RETRO_ENVIRONMENT_SET_SAVE_STATE_IN_BACKGROUND:
|
|
||||||
{
|
|
||||||
bool state = *(const bool*)data;
|
|
||||||
RARCH_LOG("Environ SET_SAVE_STATE_IN_BACKGROUND: %s.\n", state ? "yes" : "no");
|
|
||||||
|
|
||||||
set_save_state_in_background(state);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case RETRO_ENVIRONMENT_GET_LIBRETRO_PATH:
|
case RETRO_ENVIRONMENT_GET_LIBRETRO_PATH:
|
||||||
{
|
{
|
||||||
@ -8294,10 +8295,6 @@ static bool rarch_environment_cb(unsigned cmd, void *data)
|
|||||||
*(bool *)data = runloop_fastmotion;
|
*(bool *)data = runloop_fastmotion;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RETRO_ENVIRONMENT_GET_CLEAR_ALL_THREAD_WAITS_CB:
|
|
||||||
*(retro_environment_t *)data = rarch_clear_all_thread_waits;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RETRO_ENVIRONMENT_GET_INPUT_BITMASKS:
|
case RETRO_ENVIRONMENT_GET_INPUT_BITMASKS:
|
||||||
/* Just falldown, the function will return true */
|
/* Just falldown, the function will return true */
|
||||||
break;
|
break;
|
||||||
@ -8321,6 +8318,35 @@ static bool rarch_environment_cb(unsigned cmd, void *data)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Private environment callbacks.
|
||||||
|
*
|
||||||
|
* Should all be properly addressed in version 2.
|
||||||
|
* */
|
||||||
|
|
||||||
|
case RETRO_ENVIRONMENT_POLL_TYPE_OVERRIDE:
|
||||||
|
{
|
||||||
|
const unsigned *poll_type_data = (const unsigned*)data;
|
||||||
|
|
||||||
|
if (poll_type_data)
|
||||||
|
core_poll_type_override = *poll_type_data;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RETRO_ENVIRONMENT_GET_CLEAR_ALL_THREAD_WAITS_CB:
|
||||||
|
*(retro_environment_t *)data = rarch_clear_all_thread_waits;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RETRO_ENVIRONMENT_SET_SAVE_STATE_IN_BACKGROUND:
|
||||||
|
{
|
||||||
|
bool state = *(const bool*)data;
|
||||||
|
RARCH_LOG("Environ SET_SAVE_STATE_IN_BACKGROUND: %s.\n", state ? "yes" : "no");
|
||||||
|
|
||||||
|
set_save_state_in_background(state);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
RARCH_LOG("Environ UNSUPPORTED (#%u).\n", cmd);
|
RARCH_LOG("Environ UNSUPPORTED (#%u).\n", cmd);
|
||||||
return false;
|
return false;
|
||||||
@ -8776,6 +8802,8 @@ static void secondary_core_destroy(void)
|
|||||||
/* unload game from core */
|
/* unload game from core */
|
||||||
if (secondary_core.retro_unload_game)
|
if (secondary_core.retro_unload_game)
|
||||||
secondary_core.retro_unload_game();
|
secondary_core.retro_unload_game();
|
||||||
|
core_poll_type_override = 0;
|
||||||
|
|
||||||
/* deinit */
|
/* deinit */
|
||||||
if (secondary_core.retro_deinit)
|
if (secondary_core.retro_deinit)
|
||||||
secondary_core.retro_deinit();
|
secondary_core.retro_deinit();
|
||||||
@ -21098,6 +21126,7 @@ static void unload_hook(void)
|
|||||||
secondary_core_destroy();
|
secondary_core_destroy();
|
||||||
if (current_core.retro_unload_game)
|
if (current_core.retro_unload_game)
|
||||||
current_core.retro_unload_game();
|
current_core.retro_unload_game();
|
||||||
|
core_poll_type_override = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void runahead_deinit_hook(void)
|
static void runahead_deinit_hook(void)
|
||||||
@ -26026,14 +26055,20 @@ static int16_t core_input_state_poll_late(unsigned port,
|
|||||||
|
|
||||||
static retro_input_state_t core_input_state_poll_return_cb(void)
|
static retro_input_state_t core_input_state_poll_return_cb(void)
|
||||||
{
|
{
|
||||||
if (current_core.poll_type == POLL_TYPE_LATE)
|
unsigned new_poll_type = (core_poll_type_override > 0)
|
||||||
|
? (core_poll_type_override - 1)
|
||||||
|
: current_core.poll_type;
|
||||||
|
if (new_poll_type == POLL_TYPE_LATE)
|
||||||
return core_input_state_poll_late;
|
return core_input_state_poll_late;
|
||||||
return core_input_state_poll;
|
return core_input_state_poll;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void core_input_state_poll_maybe(void)
|
static void core_input_state_poll_maybe(void)
|
||||||
{
|
{
|
||||||
if (current_core.poll_type == POLL_TYPE_NORMAL)
|
unsigned new_poll_type = (core_poll_type_override > 0)
|
||||||
|
? (core_poll_type_override - 1)
|
||||||
|
: current_core.poll_type;
|
||||||
|
if (new_poll_type == POLL_TYPE_NORMAL)
|
||||||
input_driver_poll();
|
input_driver_poll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26273,6 +26308,7 @@ static bool core_unload_game(void)
|
|||||||
if (current_core.game_loaded)
|
if (current_core.game_loaded)
|
||||||
{
|
{
|
||||||
current_core.retro_unload_game();
|
current_core.retro_unload_game();
|
||||||
|
core_poll_type_override = 0;
|
||||||
current_core.game_loaded = false;
|
current_core.game_loaded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26283,8 +26319,11 @@ static bool core_unload_game(void)
|
|||||||
|
|
||||||
bool core_run(void)
|
bool core_run(void)
|
||||||
{
|
{
|
||||||
bool early_polling = current_core.poll_type == POLL_TYPE_EARLY;
|
unsigned new_poll_type = (core_poll_type_override != 0)
|
||||||
bool late_polling = current_core.poll_type == POLL_TYPE_LATE;
|
? (core_poll_type_override - 1)
|
||||||
|
: current_core.poll_type;
|
||||||
|
bool early_polling = new_poll_type == POLL_TYPE_EARLY;
|
||||||
|
bool late_polling = new_poll_type == POLL_TYPE_LATE;
|
||||||
#ifdef HAVE_NETWORKING
|
#ifdef HAVE_NETWORKING
|
||||||
bool netplay_preframe = netplay_driver_ctl(
|
bool netplay_preframe = netplay_driver_ctl(
|
||||||
RARCH_NETPLAY_CTL_PRE_FRAME, NULL);
|
RARCH_NETPLAY_CTL_PRE_FRAME, NULL);
|
||||||
|
14
retroarch.h
14
retroarch.h
@ -64,6 +64,20 @@ RETRO_BEGIN_DECLS
|
|||||||
* between the core and the frontend to gracefully stop all threads.
|
* between the core and the frontend to gracefully stop all threads.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define RETRO_ENVIRONMENT_POLL_TYPE_OVERRIDE (4 | RETRO_ENVIRONMENT_RETROARCH_START_BLOCK)
|
||||||
|
/* unsigned * --
|
||||||
|
* Tells the frontend to override the poll type behavior.
|
||||||
|
* Allows the frontend to influence the polling behavior of the
|
||||||
|
* frontend.
|
||||||
|
*
|
||||||
|
* Will be unset when retro_unload_game is called.
|
||||||
|
*
|
||||||
|
* 0 - Don't Care, no changes, frontend still determines polling type behavior.
|
||||||
|
* 1 - Early
|
||||||
|
* 2 - Normal
|
||||||
|
* 3 - Late
|
||||||
|
*/
|
||||||
|
|
||||||
enum rarch_ctl_state
|
enum rarch_ctl_state
|
||||||
{
|
{
|
||||||
RARCH_CTL_NONE = 0,
|
RARCH_CTL_NONE = 0,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user