Frame pacing/stuttering issues in games (reicast)

Hello,

I was wondering if anyone is encountering issues with frame pacing in certain games with the reicast core? I noticed that games that run at 30fps or so seem to have more apparent stuttering, where games that run at 60fps seem less noticeable (or at all). No other core seems to do this, so I’m not sure if it’s a retroarch setting.

Retroarch seems to report running at a consistent frame rate, but it visibly does seem to stutter. So I don’t think it’s a performance issue either…

Is there anything I can try?

Try setting the framerate core option to normal. Full is very stuttery for me, even though I’m using a gsync monitor with “sync to exact content framerate” on. Normal stutters less, but still isn’t as smooth as it should be.

Same here, I had really big stutters with “fullspeed” particularly with naomi games.
“Normal” is a lot better but still some small stutters here and there.

Hey guys, thanks for the replies.

I tried using the Normal setting, but it still appears to be stuttering. I made a video to show what I’m talking about (hopefully you can see what I mean):

I’m using Rivatuner to get a read on timings and it’s incredibly uneven for some reason. The stuttering is noticeable if you look at the rocks while I move the camera left and right.

Like I said, it’s more noticeable for games that run at a framerate like 30fps. 60fps games appear smooth, but Rivatuner reports something similar going on as well. I’m not sure if it’s just because the games that run below 60fps have variable framerates that don’t divide evenly into my monitor’s refresh rate?

Your framerate says 33. That would explain the uneven panning. It should be 30. What is your monitor refresh rate set to in the video options/tab?

Vertical Refresh Rate: 59.950 Set Display-Reported Refresh Rate: 59.950

My monitor is a DELL U2412M. According to the NVIDIA Control Panel, the refresh rate should be 60Hz but Windows 10 Advanced display settings reports 59Hz. The monitor itself reports that it’s running at 60hz as well. The monitor is connected to the graphics card through DVI-D

fwiw, I’m also using a NVIDIA GeForce 680 GTX with the latest driver

I haven’t seen the video. If it’s a constant stuttering what you’re talking about and it only happens with 30FPS games, it’ s “normal” because your monitor is refreshing at 60Hz. You want to see a perfectly smooth camera turning motion (at least on CRTs)?, enable “Black Frame Insertion” but at 60Hz the flickering is gonna kill your eyes.

Hmm, that definitely seems to do the trick. Having the setting enabled eliminates the motion stutter but unfortunately also adds audio popping/cracking. Would you need a 120hz monitor (or a GSYNC/FreeSync monitor) for the setting to appear correctly? What would you recommend?

I didn’t notice the stuttering for 30fps games in other cores like Beetle and Parallel (with the fullspeed setting). Is this because while PS1/N64 games often ran below 60fps they are still doing 60 screen refreshes per second while consoles like the GameCube/Dreamcast don’t? I do notice similar stuttering for the longest time with standalone Dolphin too.

Thanks for the help. :slight_smile:

EDIT: Setting the swap interval to 2 also produces the same stutter free results as the black frame insertion setting but without the flicker. It’s great for 30fps games, but unfortunately it still halves 60fps games as well.

I am experiencing the same, thank you for the above, I will try the swap interval. Maybe it can be saved as a game override for the 30fps ones.

I can only think of screens that run at 60FPS like the dreamcast logo animation. If the frame rate remains 30FPS you shouldn’t get issues.

It’s the opposite,. The ideal solution would be running them at 30Hz (i.e: 480i). By using Black Frame Insertion at 60Hz you’re effectively halving the frame rate in exchange for flickering.

I can’t comment on GSYNC/FreeSync, but I’ve read that they’re capable of 30Hz.

A few games on those systems run at 60FPS, most of them don’t, in that case, I always get stuttering.

I don’t think so. The purpose of swap interval (2) is effectively halving the refresh rate of your monitor, but the game is already doing something similar by repeating each frame twice. Black Frame Insertion “erases” each repeated frame, preventing your eyes from tracking the stationary image, which ultimately fools your brain into percieving smooth motion.
In conclusion, the whole thing is actually in our brains.

Hello, it’s been a while.

Since the last time I posted, I did purchase a GSYNC compatible monitor (Acer XB271HU). I’m using the new monitor alongside my old Dell U2412M, the new monitor using DisplayPort with the Dell using DVI-D.

After fooling around various core/video settings, I still can’t seem to get rid of the frame pacing issues with games that run at 30fps - even with the new monitor and the Retroarch settings for GSYNC described here: https://www.libretro.com/index.php/category/g-sync/. This is occurring even with synchronous rendering. I’m not sure what else to try now.

I did run reicast standalone, and I get the same microstuttering issues there as well. It’s hard to tell if it’s related to emulation or if it’s just from the fact there is no exclusive fullscreen. Redream standalone, while I know it’s different from reicast at this point, seems to display it’s video flawlessly without any suttering at all. I believe redream emulates games with the console’s refresh rates rather than however many frames the game is producing, at least from what I gathered using redream’s framerate display.

Has anyone had any luck with this issue? I’m considering reporting this to either the flycast or reicast (standalone)'s issue tracker. If anyone has any other suggestion, please let me know.

Gsync too here, smoothest I get with almost no frame skipping using these settings:

reicast_broadcast = "NTSC"
reicast_cable_type = "TV (RGB)"
reicast_frame_skipping = "disabled"
reicast_framerate = "normal"
reicast_region = "Japan"
reicast_threaded_rendering = "disabled"

Threaded off and framerate normal are the main combo I suppose but I’m never sure how the different cable/region settings can interfere, so i’m throwing them in…

There’s an open issue with some discussion on this here: https://github.com/libretro/flycast/issues/152

Currently I also have more stuttering with Gsync+Sync to Exact Content Refresh than with fixed 60hz. I still find it curious that it’s dead smooth in the 240p Test Suite scrolling test at 240p, but gets stuttery when I switch to 480i mode. And 480i is the mode most DC games run at :confused:

Thanks for pointing out the open issue!

I looked into this a bit more to confirm what settings actually have an impact on framepacing, at least as far as the core settings are concerned. I’ll go into more detail in that open issue, but basically (assuming 240p is used in all scenarios):

1.) Normal/fullspeed doesn’t seem to make a significant difference (at least for the type of hitching/stutter I’m talking about).

2.) Using VGA produces dropped frames for some reason (which doesn’t make sense?), while composite/tv(rgb) produces the smoothest output.

3.) Threaded and synchronous rendering produces massive stuttering that does NOT get reported by RivaTuner’s time graph for some reason, but it is there. Using just the threaded renderer also produces the same result. This affects all modes and settings.

4.) Affects both PAL and NTSC video modes.

One anomaly I did observe was that frame times with VGA (480p) is degenerative, meaning that it gradually gets worse with time. If you were to unfocus the window or go back to the retroarch gui, and then go back to the emulator, it will initially be smooth as it should be. But over time, the frame timings get worse and produces a noticeable stutter.

My observations were conducted using the 240pvr test suite. I used Rivatuner to produce a frame time graph that updated every 500ms. As far as settings are concerned, the only changes I made to Retroarch’s settings were the refresh rate (which is using the refresh rate reported by the monitor), setting the index number of the GSYNC monitor to 1, Vsync, and sync to exact content. As far as core settings are concerned, here’s what I tested with (probably shouldn’t have disabled some of these, but I did this just to ensure I could at least get the best performance possible):

reicast_allow_service_buttons = "disabled"
reicast_alpha_sorting = "per-strip (fast, least accurate)"
reicast_analog_stick_deadzone = "15%"
reicast_boot_to_bios = "disabled"
reicast_broadcast = "NTSC"
reicast_cable_type = "TV (Composite)"
reicast_cpu_mode = "dynamic_recompiler"
reicast_custom_textures = "disabled"
reicast_digital_triggers = "disabled"
reicast_div_matching = "disabled"
reicast_dump_textures = "disabled"
reicast_enable_dsp = "disabled"
reicast_enable_purupuru = "disabled"
reicast_enable_rtt = "disabled"
reicast_enable_rttb = "disabled"
reicast_frame_skipping = "disabled"
reicast_framerate = "fullspeed"
reicast_gdrom_fast_loading = "disabled"
reicast_internal_resolution = "640x480"
reicast_language = "Default"
reicast_lightgun1_crosshair = "disabled"
reicast_lightgun2_crosshair = "disabled"
reicast_lightgun3_crosshair = "disabled"
reicast_lightgun4_crosshair = "disabled"
reicast_mipmapping = "disabled"
reicast_oit_abuffer_size = "512MB"
reicast_per_content_vmus = "disabled"
reicast_region = "Default"
reicast_render_to_texture_upscaling = "1x"
reicast_screen_rotation = "horizontal"
reicast_synchronous_rendering = "disabled"
reicast_system = "auto"
reicast_texupscale = "off"
reicast_texupscale_max_filtered_texture_size = "256"
reicast_threaded_rendering = "disabled"
reicast_trigger_deadzone = "0%"
reicast_vmu1_pixel_off_color = "DEFAULT_OFF 01"
reicast_vmu1_pixel_on_color = "DEFAULT_ON 00"
reicast_vmu1_screen_display = "disabled"
reicast_vmu1_screen_opacity = "100%"
reicast_vmu1_screen_position = "Upper Left"
reicast_vmu1_screen_size_mult = "1x"
reicast_vmu2_pixel_off_color = "DEFAULT_OFF 01"
reicast_vmu2_pixel_on_color = "DEFAULT_ON 00"
reicast_vmu2_screen_display = "disabled"
reicast_vmu2_screen_opacity = "100%"
reicast_vmu2_screen_position = "Upper Left"
reicast_vmu2_screen_size_mult = "1x"
reicast_vmu3_pixel_off_color = "DEFAULT_OFF 01"
reicast_vmu3_pixel_on_color = "DEFAULT_ON 00"
reicast_vmu3_screen_display = "disabled"
reicast_vmu3_screen_opacity = "100%"
reicast_vmu3_screen_position = "Upper Left"
reicast_vmu3_screen_size_mult = "1x"
reicast_vmu4_pixel_off_color = "DEFAULT_OFF 01"
reicast_vmu4_pixel_on_color = "DEFAULT_ON 00"
reicast_vmu4_screen_display = "disabled"
reicast_vmu4_screen_opacity = "100%"
reicast_vmu4_screen_position = "Upper Left"
reicast_vmu4_screen_size_mult = "1x"
reicast_volume_modifier_enable = "disabled"
reicast_widescreen_hack = "disabled"

I did most of my testing by manipulating the Cable type, framerate, threaded, and synchronous rendering settings. I wrote down all the results into a spreadsheet and recorded every test with ShadowPlay. I’ll add some more details in the open issue.

Hope this helps…

1 Like

Thanks for the detailed report!

Pretty much corroborates my reports. Theaded+Synchronomous only seems to help scrolling at 480 modes with Gsync+sync to exact refresh disabled and the display set to 60hz. Normal framerate seems less stuttery subjectively to me when running Bangai-O. Normal’s still pretty stuttery with the test suite scroll test at 480i though.

When you turned off RetroArch’s Audio Sync the stutter disappeared from Bangai-O. framerate of Reicast core option is Normal. If the stutter is still bad, turning off RetroArch’s Adaptive V-Sync (This feature only benefits on FreeSync monitors that support CRT monitors or LFC) can dramatically improve it.

Hmm! Interesting, so turning of Retroarch’s audio sync setting seems to fix the frame pacing issues I was seeing in certain games at a slight cost of some sound popping. In order for the setting to affect games properly, you have to disable the audio sync and then set Flycast to Fullspeed, video to TV Composite, and then disable both threaded/synchronous rendering. Games that run at 30fps like Sonic Adventure and Shenmue feel very smooth now, aside from performance issues due to the emulation itself or my hardware. It’s a shame the setting doesn’t work well with threaded rendering enabled, since using that just makes the game run at double the frame rate…

I had same Problem on my Mum’s Computer that Screen Shows but there is No Sound and it Video Runs Fast

Where can you find the Audio Sync Option?

Settings > Audio > Synchronization, set this to OFF.

1 Like

Thanks @ehw but did not make any Difference to my Problem with it Running Too Fast when Game Loaded Up and Has no Sound