mirror of
https://github.com/libretro/RetroArch
synced 2025-04-24 15:02:35 +00:00
implement video_shader_delay setting (in ms), which delays auto-shaders
This commit is contained in:
parent
25170f3615
commit
886d538c48
@ -278,6 +278,8 @@
|
|||||||
#define DEFAULT_SHADER_ENABLE false
|
#define DEFAULT_SHADER_ENABLE false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define DEFAULT_SHADER_DELAY 0
|
||||||
|
|
||||||
/* Only scale in integer steps.
|
/* Only scale in integer steps.
|
||||||
* The base size depends on system-reported geometry and aspect ratio.
|
* The base size depends on system-reported geometry and aspect ratio.
|
||||||
* If video_force_aspect is not set, X/Y will be integer scaled independently.
|
* If video_force_aspect is not set, X/Y will be integer scaled independently.
|
||||||
|
@ -1747,6 +1747,7 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
|
|||||||
#ifdef HAVE_VIDEO_LAYOUT
|
#ifdef HAVE_VIDEO_LAYOUT
|
||||||
SETTING_UINT("video_layout_selected_view", &settings->uints.video_layout_selected_view, true, 0, false);
|
SETTING_UINT("video_layout_selected_view", &settings->uints.video_layout_selected_view, true, 0, false);
|
||||||
#endif
|
#endif
|
||||||
|
SETTING_UINT("video_shader_delay", &settings->uints.video_shader_delay, true, DEFAULT_SHADER_DELAY, false);
|
||||||
#ifdef HAVE_COMMAND
|
#ifdef HAVE_COMMAND
|
||||||
SETTING_UINT("network_cmd_port", &settings->uints.network_cmd_port, true, network_cmd_port, false);
|
SETTING_UINT("network_cmd_port", &settings->uints.network_cmd_port, true, network_cmd_port, false);
|
||||||
#endif
|
#endif
|
||||||
|
@ -504,6 +504,7 @@ typedef struct settings
|
|||||||
unsigned video_overscan_correction_top;
|
unsigned video_overscan_correction_top;
|
||||||
unsigned video_overscan_correction_bottom;
|
unsigned video_overscan_correction_bottom;
|
||||||
#endif
|
#endif
|
||||||
|
unsigned video_shader_delay;
|
||||||
|
|
||||||
unsigned menu_timedate_style;
|
unsigned menu_timedate_style;
|
||||||
unsigned menu_thumbnails;
|
unsigned menu_thumbnails;
|
||||||
|
@ -1351,6 +1351,8 @@ MSG_HASH(MENU_ENUM_LABEL_VIDEO_FORCE_SRGB_DISABLE,
|
|||||||
"video_force_srgb_disable")
|
"video_force_srgb_disable")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VIDEO_FRAME_DELAY,
|
MSG_HASH(MENU_ENUM_LABEL_VIDEO_FRAME_DELAY,
|
||||||
"video_frame_delay")
|
"video_frame_delay")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_DELAY,
|
||||||
|
"video_shader_delay")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VIDEO_FULLSCREEN,
|
MSG_HASH(MENU_ENUM_LABEL_VIDEO_FULLSCREEN,
|
||||||
"video_fullscreen")
|
"video_fullscreen")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VIDEO_GAMMA,
|
MSG_HASH(MENU_ENUM_LABEL_VIDEO_GAMMA,
|
||||||
|
@ -1475,6 +1475,14 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len)
|
|||||||
" \n"
|
" \n"
|
||||||
"Maximum is 15.");
|
"Maximum is 15.");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_VIDEO_SHADER_DELAY:
|
||||||
|
snprintf(s, len,
|
||||||
|
"Sets by how many milliseconds auto-loading shaders\n"
|
||||||
|
"are delayed.\n"
|
||||||
|
"\n"
|
||||||
|
"Can work around graphical glitches due to using\n"
|
||||||
|
"'screen grabbing' software like streaming software.");
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES:
|
case MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES:
|
||||||
snprintf(s, len,
|
snprintf(s, len,
|
||||||
"Sets how many frames CPU can \n"
|
"Sets how many frames CPU can \n"
|
||||||
|
@ -3780,6 +3780,10 @@ MSG_HASH(
|
|||||||
MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY,
|
MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY,
|
||||||
"Frame Delay"
|
"Frame Delay"
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DELAY,
|
||||||
|
"Auto-Shader Delay"
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN,
|
MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN,
|
||||||
"Start in Fullscreen Mode"
|
"Start in Fullscreen Mode"
|
||||||
@ -4419,6 +4423,10 @@ MSG_HASH(
|
|||||||
MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY,
|
MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY,
|
||||||
"Reduces latency at the cost of a higher risk of video stuttering. Adds a delay after V-Sync (in ms)."
|
"Reduces latency at the cost of a higher risk of video stuttering. Adds a delay after V-Sync (in ms)."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_VIDEO_SHADER_DELAY,
|
||||||
|
"Delays auto-loading shaders (in ms). Can work around graphical glitches when using 'screen grabbing' software."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES,
|
MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES,
|
||||||
"Sets how many frames the CPU can run ahead of the GPU when using 'Hard GPU Sync'."
|
"Sets how many frames the CPU can run ahead of the GPU when using 'Hard GPU Sync'."
|
||||||
|
@ -194,6 +194,7 @@ default_sublabel_macro(action_bind_sublabel_input_hotkey_settings, MENU_
|
|||||||
default_sublabel_macro(action_bind_sublabel_materialui_icons_enable, MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE)
|
default_sublabel_macro(action_bind_sublabel_materialui_icons_enable, MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE)
|
||||||
default_sublabel_macro(action_bind_sublabel_add_content_list, MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST)
|
default_sublabel_macro(action_bind_sublabel_add_content_list, MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST)
|
||||||
default_sublabel_macro(action_bind_sublabel_video_frame_delay, MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY)
|
default_sublabel_macro(action_bind_sublabel_video_frame_delay, MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY)
|
||||||
|
default_sublabel_macro(action_bind_sublabel_video_shader_delay, MENU_ENUM_SUBLABEL_VIDEO_SHADER_DELAY)
|
||||||
default_sublabel_macro(action_bind_sublabel_video_black_frame_insertion, MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION)
|
default_sublabel_macro(action_bind_sublabel_video_black_frame_insertion, MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION)
|
||||||
default_sublabel_macro(action_bind_sublabel_systeminfo_cpu_cores, MENU_ENUM_SUBLABEL_CPU_CORES)
|
default_sublabel_macro(action_bind_sublabel_systeminfo_cpu_cores, MENU_ENUM_SUBLABEL_CPU_CORES)
|
||||||
default_sublabel_macro(action_bind_sublabel_toggle_gamepad_combo, MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO)
|
default_sublabel_macro(action_bind_sublabel_toggle_gamepad_combo, MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO)
|
||||||
@ -2543,6 +2544,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
|||||||
case MENU_ENUM_LABEL_VIDEO_FRAME_DELAY:
|
case MENU_ENUM_LABEL_VIDEO_FRAME_DELAY:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_frame_delay);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_frame_delay);
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_VIDEO_SHADER_DELAY:
|
||||||
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_shader_delay);
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_ADD_CONTENT_LIST:
|
case MENU_ENUM_LABEL_ADD_CONTENT_LIST:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_add_content_list);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_add_content_list);
|
||||||
break;
|
break;
|
||||||
|
@ -7488,6 +7488,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
|
|||||||
menu_displaylist_parse_settings_enum(info->list,
|
menu_displaylist_parse_settings_enum(info->list,
|
||||||
MENU_ENUM_LABEL_VIDEO_SMOOTH,
|
MENU_ENUM_LABEL_VIDEO_SMOOTH,
|
||||||
PARSE_ONLY_BOOL, false);
|
PARSE_ONLY_BOOL, false);
|
||||||
|
if (menu_displaylist_parse_settings_enum(info->list,
|
||||||
|
MENU_ENUM_LABEL_VIDEO_SHADER_DELAY,
|
||||||
|
PARSE_ONLY_UINT, false) == 0)
|
||||||
|
count++;
|
||||||
menu_displaylist_parse_settings_enum(info->list,
|
menu_displaylist_parse_settings_enum(info->list,
|
||||||
MENU_ENUM_LABEL_VIDEO_FILTER,
|
MENU_ENUM_LABEL_VIDEO_FILTER,
|
||||||
PARSE_ONLY_PATH, false);
|
PARSE_ONLY_PATH, false);
|
||||||
|
@ -9531,6 +9531,21 @@ static bool setting_append_list(
|
|||||||
menu_settings_list_current_add_range(list, list_info, 0, 15, 1, true, true);
|
menu_settings_list_current_add_range(list, list_info, 0, 15, 1, true, true);
|
||||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);
|
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);
|
||||||
|
|
||||||
|
CONFIG_UINT(
|
||||||
|
list, list_info,
|
||||||
|
&settings->uints.video_shader_delay,
|
||||||
|
MENU_ENUM_LABEL_VIDEO_SHADER_DELAY,
|
||||||
|
MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DELAY,
|
||||||
|
DEFAULT_SHADER_DELAY,
|
||||||
|
&group_info,
|
||||||
|
&subgroup_info,
|
||||||
|
parent_group,
|
||||||
|
general_write_handler,
|
||||||
|
general_read_handler);
|
||||||
|
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||||
|
menu_settings_list_current_add_range(list, list_info, 0, 0, 1, true, false);
|
||||||
|
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ADVANCED);
|
||||||
|
|
||||||
#if !defined(RARCH_MOBILE)
|
#if !defined(RARCH_MOBILE)
|
||||||
if (video_driver_test_all_flags(GFX_CTX_FLAGS_BLACK_FRAME_INSERTION))
|
if (video_driver_test_all_flags(GFX_CTX_FLAGS_BLACK_FRAME_INSERTION))
|
||||||
{
|
{
|
||||||
|
@ -168,7 +168,7 @@ bool menu_shader_manager_set_preset(struct video_shader *shader,
|
|||||||
bool refresh = false;
|
bool refresh = false;
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
if (apply && !retroarch_apply_shader(type, preset_path))
|
if (apply && !retroarch_apply_shader(type, preset_path, true))
|
||||||
{
|
{
|
||||||
/* We don't want to disable shaders entirely here,
|
/* We don't want to disable shaders entirely here,
|
||||||
* just reset number of passes
|
* just reset number of passes
|
||||||
|
@ -821,6 +821,7 @@ enum msg_hash_enums
|
|||||||
MENU_LABEL(VIDEO_GPU_SCREENSHOT),
|
MENU_LABEL(VIDEO_GPU_SCREENSHOT),
|
||||||
MENU_LABEL(VIDEO_BLACK_FRAME_INSERTION),
|
MENU_LABEL(VIDEO_BLACK_FRAME_INSERTION),
|
||||||
MENU_LABEL(VIDEO_FRAME_DELAY),
|
MENU_LABEL(VIDEO_FRAME_DELAY),
|
||||||
|
MENU_LABEL(VIDEO_SHADER_DELAY),
|
||||||
MENU_LABEL(VIDEO_VSYNC),
|
MENU_LABEL(VIDEO_VSYNC),
|
||||||
MENU_LABEL(VIDEO_ADAPTIVE_VSYNC),
|
MENU_LABEL(VIDEO_ADAPTIVE_VSYNC),
|
||||||
MENU_LABEL(VIDEO_HARD_SYNC),
|
MENU_LABEL(VIDEO_HARD_SYNC),
|
||||||
|
@ -133,7 +133,7 @@ int rarch_timer_get_timeout(rarch_timer_t *timer)
|
|||||||
{
|
{
|
||||||
if (!timer)
|
if (!timer)
|
||||||
return 0;
|
return 0;
|
||||||
return (int)timer->timeout_us / 1000000;
|
return (int)(timer->timeout_us / 1000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rarch_timer_is_running(rarch_timer_t *timer)
|
bool rarch_timer_is_running(rarch_timer_t *timer)
|
||||||
@ -185,3 +185,13 @@ void rarch_timer_begin(rarch_timer_t *timer, uint64_t sec)
|
|||||||
timer->timer_begin = true;
|
timer->timer_begin = true;
|
||||||
timer->timer_end = false;
|
timer->timer_end = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rarch_timer_begin_us(rarch_timer_t *timer, uint64_t usec)
|
||||||
|
{
|
||||||
|
if (!timer)
|
||||||
|
return;
|
||||||
|
rarch_timer_begin_new_time_us(timer, usec);
|
||||||
|
timer->timer_begin = true;
|
||||||
|
timer->timer_end = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -95,7 +95,9 @@ bool rarch_timer_is_running(rarch_timer_t *timer);
|
|||||||
|
|
||||||
bool rarch_timer_has_expired(rarch_timer_t *timer);
|
bool rarch_timer_has_expired(rarch_timer_t *timer);
|
||||||
|
|
||||||
void rarch_timer_begin(rarch_timer_t *timer, uint64_t ms);
|
void rarch_timer_begin(rarch_timer_t *timer, uint64_t sec);
|
||||||
|
|
||||||
|
void rarch_timer_begin_us(rarch_timer_t *timer, uint64_t usec);
|
||||||
|
|
||||||
void rarch_timer_begin_new_time(rarch_timer_t *timer, uint64_t sec);
|
void rarch_timer_begin_new_time(rarch_timer_t *timer, uint64_t sec);
|
||||||
|
|
||||||
|
52
retroarch.c
52
retroarch.c
@ -921,6 +921,7 @@ static bool shader_presets_need_reload = true;
|
|||||||
static char cli_shader[PATH_MAX_LENGTH] = {0};
|
static char cli_shader[PATH_MAX_LENGTH] = {0};
|
||||||
static bool cli_shader_disable = false;
|
static bool cli_shader_disable = false;
|
||||||
static char runtime_shader_preset[PATH_MAX_LENGTH] = {0};
|
static char runtime_shader_preset[PATH_MAX_LENGTH] = {0};
|
||||||
|
static rarch_timer_t shader_delay_timer = {0};
|
||||||
#endif
|
#endif
|
||||||
static char runloop_max_frames_screenshot_path[PATH_MAX_LENGTH] = {0};
|
static char runloop_max_frames_screenshot_path[PATH_MAX_LENGTH] = {0};
|
||||||
static char runtime_content_path[PATH_MAX_LENGTH] = {0};
|
static char runtime_content_path[PATH_MAX_LENGTH] = {0};
|
||||||
@ -2217,7 +2218,7 @@ static const struct cmd_map map[] = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool retroarch_apply_shader(enum rarch_shader_type type, const char *preset_path)
|
bool retroarch_apply_shader(enum rarch_shader_type type, const char *preset_path, bool message)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
||||||
settings_t *settings = configuration_settings;
|
settings_t *settings = configuration_settings;
|
||||||
@ -2242,6 +2243,8 @@ bool retroarch_apply_shader(enum rarch_shader_type type, const char *preset_path
|
|||||||
menu_shader_set_modified(false);
|
menu_shader_set_modified(false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (message)
|
||||||
|
{
|
||||||
/* Display message */
|
/* Display message */
|
||||||
snprintf(msg, sizeof(msg),
|
snprintf(msg, sizeof(msg),
|
||||||
preset_file ? "Shader: \"%s\"" : "Shader: %s",
|
preset_file ? "Shader: \"%s\"" : "Shader: %s",
|
||||||
@ -2253,6 +2256,8 @@ bool retroarch_apply_shader(enum rarch_shader_type type, const char *preset_path
|
|||||||
#endif
|
#endif
|
||||||
runloop_msg_queue_push(msg, 1, 120, true, NULL,
|
runloop_msg_queue_push(msg, 1, 120, true, NULL,
|
||||||
MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
|
MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
|
||||||
|
}
|
||||||
|
|
||||||
RARCH_LOG("%s \"%s\".\n",
|
RARCH_LOG("%s \"%s\".\n",
|
||||||
msg_hash_to_str(MSG_APPLYING_SHADER),
|
msg_hash_to_str(MSG_APPLYING_SHADER),
|
||||||
preset_path ? preset_path : "null");
|
preset_path ? preset_path : "null");
|
||||||
@ -2301,7 +2306,7 @@ bool command_set_shader(const char *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return retroarch_apply_shader(type, arg);
|
return retroarch_apply_shader(type, arg, true);
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
@ -4060,6 +4065,8 @@ static bool command_event_init_core(enum rarch_core_type type)
|
|||||||
/* Load auto-shaders on the next occasion */
|
/* Load auto-shaders on the next occasion */
|
||||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
||||||
shader_presets_need_reload = true;
|
shader_presets_need_reload = true;
|
||||||
|
shader_delay_timer.timer_begin = false; /* not initialized */
|
||||||
|
shader_delay_timer.timer_end = false; /* not expired */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* reset video format to libretro's default */
|
/* reset video format to libretro's default */
|
||||||
@ -21589,8 +21596,8 @@ static void retroarch_print_help(const char *arg0)
|
|||||||
puts(" -s, --save=PATH Path for save files (*.srm).");
|
puts(" -s, --save=PATH Path for save files (*.srm).");
|
||||||
puts(" -S, --savestate=PATH Path for the save state files (*.state).");
|
puts(" -S, --savestate=PATH Path for the save state files (*.state).");
|
||||||
puts(" --set-shader PATH Path to a shader (preset) that will be loaded each time content is loaded.\n"
|
puts(" --set-shader PATH Path to a shader (preset) that will be loaded each time content is loaded.\n"
|
||||||
" Effectively overrides core shader presets.\n"
|
" Effectively overrides automatic shader presets.\n"
|
||||||
" An empty argument \"\" will disable shader core presets.");
|
" An empty argument \"\" will disable automatic shader presets.");
|
||||||
puts(" -f, --fullscreen Start the program in fullscreen regardless "
|
puts(" -f, --fullscreen Start the program in fullscreen regardless "
|
||||||
"of config settings.");
|
"of config settings.");
|
||||||
puts(" -c, --config=FILE Path for config file."
|
puts(" -c, --config=FILE Path for config file."
|
||||||
@ -23545,6 +23552,9 @@ const char* retroarch_get_shader_preset(void)
|
|||||||
if (!settings->bools.video_shader_enable)
|
if (!settings->bools.video_shader_enable)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if (settings->uints.video_shader_delay && !shader_delay_timer.timer_end)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if (!string_is_empty(runtime_shader_preset))
|
if (!string_is_empty(runtime_shader_preset))
|
||||||
return runtime_shader_preset;
|
return runtime_shader_preset;
|
||||||
|
|
||||||
@ -24820,14 +24830,7 @@ static enum runloop_state runloop_check_state(void)
|
|||||||
need_to_apply = true;
|
need_to_apply = true;
|
||||||
|
|
||||||
if (!rarch_timer_is_running(&timer))
|
if (!rarch_timer_is_running(&timer))
|
||||||
{
|
rarch_timer_begin_us(&timer, SHADER_FILE_WATCH_DELAY_MSEC * 1000);
|
||||||
/* rarch_timer_t convenience functions only support whole seconds. */
|
|
||||||
|
|
||||||
/* rarch_timer_begin */
|
|
||||||
timer.timeout_end = cpu_features_get_time_usec() + SHADER_FILE_WATCH_DELAY_MSEC * 1000;
|
|
||||||
timer.timer_begin = true;
|
|
||||||
timer.timer_end = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If a file is modified atomically (moved/renamed from a different file),
|
/* If a file is modified atomically (moved/renamed from a different file),
|
||||||
@ -24840,9 +24843,7 @@ static enum runloop_state runloop_check_state(void)
|
|||||||
*/
|
*/
|
||||||
if (need_to_apply)
|
if (need_to_apply)
|
||||||
{
|
{
|
||||||
/* rarch_timer_tick */
|
rarch_timer_tick(&timer);
|
||||||
timer.current = cpu_features_get_time_usec();
|
|
||||||
timer.timeout_us = (timer.timeout_end - timer.current);
|
|
||||||
|
|
||||||
if (!timer.timer_end && rarch_timer_has_expired(&timer))
|
if (!timer.timer_end && rarch_timer_has_expired(&timer))
|
||||||
{
|
{
|
||||||
@ -24852,6 +24853,27 @@ static enum runloop_state runloop_check_state(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settings->uints.video_shader_delay && !shader_delay_timer.timer_end)
|
||||||
|
{
|
||||||
|
if (!rarch_timer_is_running(&shader_delay_timer))
|
||||||
|
rarch_timer_begin_us(&shader_delay_timer, settings->uints.video_shader_delay * 1000);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rarch_timer_tick(&shader_delay_timer);
|
||||||
|
|
||||||
|
if (rarch_timer_has_expired(&shader_delay_timer))
|
||||||
|
{
|
||||||
|
rarch_timer_end(&shader_delay_timer);
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *preset = retroarch_get_shader_preset();
|
||||||
|
enum rarch_shader_type type = video_shader_parse_type(preset);
|
||||||
|
retroarch_apply_shader(type, preset, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return RUNLOOP_STATE_ITERATE;
|
return RUNLOOP_STATE_ITERATE;
|
||||||
|
@ -323,7 +323,8 @@ bool retroarch_is_forced_fullscreen(void);
|
|||||||
void retroarch_set_current_core_type(
|
void retroarch_set_current_core_type(
|
||||||
enum rarch_core_type type, bool explicitly_set);
|
enum rarch_core_type type, bool explicitly_set);
|
||||||
|
|
||||||
bool retroarch_apply_shader(enum rarch_shader_type type, const char *preset_path);
|
bool retroarch_apply_shader(enum rarch_shader_type type, const char *preset_path,
|
||||||
|
bool message);
|
||||||
|
|
||||||
const char* retroarch_get_shader_preset(void);
|
const char* retroarch_get_shader_preset(void);
|
||||||
|
|
||||||
|
@ -144,6 +144,7 @@ QWidget *VideoPage::widget()
|
|||||||
miscGroup->add(MENU_ENUM_LABEL_VIDEO_GPU_SCREENSHOT);
|
miscGroup->add(MENU_ENUM_LABEL_VIDEO_GPU_SCREENSHOT);
|
||||||
miscGroup->add(MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN);
|
miscGroup->add(MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN);
|
||||||
miscGroup->add(MENU_ENUM_LABEL_VIDEO_SMOOTH);
|
miscGroup->add(MENU_ENUM_LABEL_VIDEO_SMOOTH);
|
||||||
|
miscGroup->add(MENU_ENUM_LABEL_VIDEO_SHADER_DELAY);
|
||||||
|
|
||||||
syncMiscLayout->addWidget(syncGroup);
|
syncMiscLayout->addWidget(syncGroup);
|
||||||
syncMiscLayout->addWidget(miscGroup);
|
syncMiscLayout->addWidget(miscGroup);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user