Frame pacing/stuttering issues in games (reicast)

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

I had to rewrite my post since I fooled around with flycast some more, since its been a while.

For me at least, you can now just set Flycast to Fullspeed and leave the audio Synchronization enabled to get rid of the microstuttering I was seeing. Unfortunately, there’s still no way to get rid of the stuttering when enabling threaded and/or synchronous rendering, as now enabling the threaded rendering setting disables the framerate setting (as it should now). But the Vulkan renderer seems to help a lot with the frame pacing issues.

I recorded two videos to show how bad the stuttering is between fullspeed and threaded/synchronous rendering. I recommend watching these in a video player that supports exclusive fullscreen.

Fullspeed (little to no dropped frames in video, none in real time): https://mega.nz/#!oMQ01aoC!vP5pPUG9SYAEgQnA5CTy7Ur2PjPSVCas8Q4_lr3aN5E

Threaded/Synchronous video (lots of stuttering): https://mega.nz/#!MVYE3SpA!4O1xBYkhx988PuZ_gVMFiVQHv1n68lY-wTBgxdbzf4Q

These two videos were made with the vulkan renderer.

When i use GL, DOA 2 (naomi) runs at 60fps with the similar frame pacing issues as your second video. With threaded video enalbled in the core options it runs a bit smoother for me.

W̶h̶e̶n̶ ̶i̶ ̶u̶s̶e̶ ̶V̶u̶l̶k̶a̶n̶ ̶i̶t̶ ̶r̶u̶n̶s̶ ̶l̶i̶k̶e̶ ̶c̶r̶a̶p̶.̶ ̶I̶t̶ ̶l̶o̶o̶k̶s̶ ̶l̶i̶k̶e̶ ̶i̶t̶’̶s̶ ̶r̶u̶n̶n̶i̶n̶g̶ ̶a̶t̶ ̶3̶0̶f̶p̶s̶ ̶o̶r̶ ̶l̶o̶w̶e̶r̶ ̶a̶l̶l̶ ̶t̶h̶e̶ ̶t̶i̶m̶e̶.

Using Flycast i downloaded today from the buildbot.

@GemaH what GPU are you using?

GTX 1060.

Nevermind my previous post though. Made a fresh RA install and Vulkan is about the same as GL now.

Still, Threaded/Synchronous works much better for me. Without it i’m getting severe frame pacing issues. With it, i’m getting moderate frame pacing issues. If i also set my screen at 60hz, frame pacing issues become minimal (i have a 240hz screen).

They never completely go away though, in both GL and Vulkan.

1 Like

Sorry to bump this thread but it’s the only one I can find that is related to Dreamcast emulation when used with VRR.

I’ve also have had a hard time getting my G-sync (native) monitor working with not just Flycast in Retroarch, but Redream and Demul as well. I’ve actually had the best luck with Demul in 60fps games in conjunction with an RTSS frame limit of 60fps, but there are still periodic stutters. I’ve also noticed how the frame pacing can degenerate over time which can be fixed (for a short time) by exiting and entering full screen. 30 fps games seem mostly impossible to get working well.

Is it just an issue with Dreamcast emulation in general? Can it ever be fixed? The lower input lag that G-sync provides is useful since Dreamcast emulators seem to have quite a bit of lag when used at a fixed 60hz refresh and normal vsync.