From e14a679f831bc067f7bb89fd81f3654e931a988b Mon Sep 17 00:00:00 2001 From: Themaister Date: Sun, 12 Aug 2012 00:40:21 +0200 Subject: [PATCH] Forcefully disable VSync if game FPS >> monitor FPS. --- driver.c | 51 +++++++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/driver.c b/driver.c index 0131a62e5a..973c08c0a9 100644 --- a/driver.c +++ b/driver.c @@ -192,8 +192,37 @@ void init_drivers_pre(void) find_input_driver(); } +static void adjust_system_rates(void) +{ + const struct retro_system_timing *info = &g_extern.system.av_info.timing; + + float timing_skew = fabs(1.0f - info->fps / g_settings.video.refresh_rate); + if (timing_skew > 0.05f) // We don't want to adjust pitch too much. If we have extreme cases, just don't readjust at all. + { + RARCH_LOG("Timings deviate too much. Will not adjust. (Display = %.2f Hz, Game = %.2f Hz)\n", + g_settings.video.refresh_rate, + (float)info->fps); + + // We won't be able to do VSync reliably as game FPS > monitor FPS. + if (info->fps > g_settings.video.refresh_rate) + { + g_settings.video.vsync = false; + RARCH_LOG("Game FPS > Monitor FPS. Cannot rely on VSync.\n"); + } + + g_settings.video.refresh_rate = info->fps; + } + + g_settings.audio.in_rate = info->sample_rate * + (g_settings.video.refresh_rate / info->fps); + + RARCH_LOG("Set audio input rate to: %.2f Hz.\n", g_settings.audio.in_rate); +} + void init_drivers(void) { + adjust_system_rates(); + init_video_input(); init_audio(); } @@ -278,26 +307,6 @@ static void deinit_dsp_plugin(void) } #endif -static void adjust_audio_input_rate(void) -{ - const struct retro_system_timing *info = &g_extern.system.av_info.timing; - - float timing_skew = fabs(1.0f - info->fps / g_settings.video.refresh_rate); - if (timing_skew > 0.05f) // We don't want to adjust pitch too much. If we have extreme cases, just don't readjust at all. - { - RARCH_LOG("Timings deviate too much. Will not adjust. (Display = %.2f Hz, Game = %.2f Hz)\n", - g_settings.video.refresh_rate, - (float)info->fps); - - g_settings.video.refresh_rate = info->fps; - } - - g_settings.audio.in_rate = info->sample_rate * - (g_settings.video.refresh_rate / info->fps); - - RARCH_LOG("Set audio input rate to: %.2f Hz.\n", g_settings.audio.in_rate); -} - void init_audio(void) { // Accomodate rewind since at some point we might have two full buffers. @@ -321,8 +330,6 @@ void init_audio(void) return; } - adjust_audio_input_rate(); - driver.audio_data = audio_init_func(*g_settings.audio.device ? g_settings.audio.device : NULL, g_settings.audio.out_rate, g_settings.audio.latency);