Things like dynamic rate control were designed with 60Hz and higher in mind, yes, so content that falls below your monitor’s refresh rate could be problematic in that regard. The entire point is to have as low a fluctuation between the refresh rate of your screen device and that of the game.
A couple of hints here:
- Go to Video Settings, go to ‘Estimated Screen Framerate’, and press either Start button on your gamepad or the Spacebar to reset the A/V counter to zero. If any frame time deviations started building up, they will be reset by doing this. So if you suffered from very high frame time deviation, doing this can reset it back to 0.
- You might want to try messing around with 30Hz resolutions for 30Hz content, or trying swap interval set to 2 for 60Hz and higher resolutions. For 120Hz resolutions and up, Black Frame Insertion is also an option. You could see if that works better.
- If you have FreeSync/G-Sync, you might be able to use the ‘Sync To Exact Content Framerate’ option (Settings -> Frame Throttle). This might give better results.Tatsuya79 in particular reported very good results with this.
Anyway, long story short, there are a couple of options available to you that can be used at your disposal in RetroArch. But I agree that things should become a lot more easy to use from this perspective, maybe some kind of ‘automagic’ mode. But again, it’s probably difficult to read the minds of the advanced user in terms of what should be enabled and configured for which specific core/system.
BTW - another thing - a big impetus behind the reason why nearly all of RetroArch’s user-facing actions have to be asynchronous/threadable in the future, is because every action in RetroArch can affect the A/V counter. So that means if a shader is being loaded, right now there can be some slight effect on this adversely influencing the A/V counter, same with ROM file loading. So the best thing to do after doing an operation like ‘load a shader preset/shader’ or ‘load a ROM file’ is to go into Settings -> Video, go to Estimated Monitor Framerate, and reset the AV counter.
Anyway, so I agree that some things need to be redesigned here, and perhaps for now as a stop-gap, after a shader load or content being loaded, we should just force the AV counter to be reset beforehand so that we don’t start with frame time deviations out of the box with the user being unaware of what is going on. However, it is the long-term (and short-term) goal of this project to make it not necessary to have a hack like this, this is why content loading should be reimplemented as a task, same for shader loading.