Multi Monitor VSync Problem

I found RetroArch a few months back and fell in love with how smooth it is compared to base emulators, but I still have an issue playing games on my TV. My main monitor is very smooth if I set up the Estimated Monitor Refresh Rate properly, but if I do the same to the TV, it doesn’t seem to be completely smooth. Since I’m on Windows 7, I can turn off Desktop Composition and makes it mostly smooth. The problem is that this introduces some tearing and there’s got to be a better solution than that. This issue doesn’t happen if I unplug my main monitor, so I figured it must be some VSync bug with Windows or Multi-Monitor setups in general. Considering the issue isn’t talked about very often, I guess a lot of people must use a dedicated device with connected to one display.

I ended up trying Lakka, which seems to blank out the other display and makes the TV the only working display while it’s running. I have audio running through it properly, but it seems like some of my CRT shaders don’t work on it, or just lack the ability to change parameters. I would rather not have to reboot just to use my PC for other things, so in the end I’d rather stick with Windows if there’s a way to blank out other displays like Lakka does.

From what I have read, VSync won’t work independently on both monitors at different synced rates. My TV runs at around 60.015Hz, while my monitor is at 59.955Hz, which I guess is spread just enough to cause stuttering. This happens in other applications that can’t sync to display, so I know this isn’t a specific RetroArch problem. No matter how many countless searches I do, I come up with either nothing, or the person had the issue found a solution and never said how. People here actually care about smooth emulation, a topic that barely gets brought up elsewhere for some reason. At this point, I’m just getting a bit sick of troubleshooting this, and I’m posting here (considering the huge selling point of RetroArch is to run smooth) hoping for some advice on this.

Thanks for the great emulation Front-End, it really is great other than this specific issue for me.

Have you tried setting your TV as your primary display and then using exclusive fullscreen with the detected refresh rate?

I haven’t set my TV as my main display through windows since they’re different resolutions and wouldn’t be very useful for anything else. If you meant through RetroArch, I have it set to 2, and I have Fullscreen Windowed set to off and Fullscreen to On. I don’t think Disable Desktop Composition does anything, since changing it results in no change to windows or stuttering. I have my TV set to 60.0158 through the detected refresh rate and checked multiple times.

Only thing that seems to solve this is unplugging the monitor, so the TV is the only one detected, or manually turning off desktop composition before launching (but introduces some tearing).

Yes, I meant through Windows. Vsync is tied to your primary display, I think, so as long as your other display is primary, RA’s not going to be able to sync up with your TV. You could try manually setting it to the TV’s 59.955 hz, though that will make it stuttery on your other display.

1 Like

I have the monitor set to 59.955 when I use that and it’s completely smooth. Currently I have it set to output to the TV at the 60.0158, which is what it measured, but the TV still stutters a bit. Is there any way to give priority to the screen another way without messing up my desktop in the process. Are there any command line parameters to turn off the other screen when RetroArch is on?

If you were to turn off the other screen, it would just make your TV the primary monitor, which would still wreck your desktop. You can try manually tweaking the refresh rate until it’s close to perfect, though that’s tedious work. That is, 60.0158 must not be quite right; try turning it down a little bit and see if that helps, if it makes it worse, try turning it up a bit instead.

Well, I mean I have a desktop icon saver registry edit. I’d just like if it was more automated than right click desktop>desktop resolution>set as main display and then reverse that everytime I want to use my PC or unplug and replug monitor. Like I said it’s completely smooth on that Hz if and only if I am in Lakka using it or I unplug my monitor to make my TV the only display.

I actually found a solution to the stuttering on my second display. From what I read, OpenGL, either because of windows or video drivers, doesn’t handle multiple monitor vsync too well, so I gave DirectX a try. When switched, all second monitor stuttering stopped and became perfectly smooth, even when Aero is left on. Turning off Aero works just as well, no stuttering or screen tearing.

Since RGUI is the only option available to DirectX, I figured that maybe XMB was causing issues and not OpenGL in specific. Changed settings for OpenGL, but stuttered just the same. OpenGL only works well for me on my Main Monitor and since it’s less buggy, I was hoping that would resolve it. Seeing as XMB and RGUI aren’t behind the problems, I would prefer to use XMB since it’s a much cleaner GUI. I know that’s not possible yet, but as I understand, developers are working on DirectX support for XMB.

This leads me to my next issue, bugs in DirectX, or features missing in it. When I booted it up with my DS4 controller, first thing I noticed was that if I actually clicked outside the program with the touchpad (or my mouse but that’s less of an issue), RetroArch bugs out and cannot be used. That’s fine, I fixed it by making DS4Windows turn off mouse controls when RetroArch is launched. The other issue I had which was pretty big to me: no shader parameters. Is there a way to make custom shader parameters work with DirectX? It just says no menu parameters when I choose that option. That’s really the only issue I have left now.

Glad to know I’m not the only one with this problem. I run a secondary CRT PC monitor with the TVOut+Interlacing.cgp shader setup, which effectively transforms it into a super high-end Sony PVM. However, the random stutters are a real issue. Nothing I’ve tried makes it completely go away. I’ve yet to try D3D, but if what you say about shader parameters is true, then it’s still not a complete solution since then my shader setup won’t work. I mean, I suppose I could do without it since 480p still looks very good, but meh. That’s Windows for you, though.

Hopefully Vulkan will work better.

EDIT: Ok, tried D3D. It’s more flawed than I thought. Yes, it gets rid of the stuttering. Yes, it fails to load CGP meta shaders. Moreover, it absolutely seems to hate custom resolutions. I typically run a superwide resolution like 3840x480 to hide horizontal scaling artifacts from 4:3 aspect correction in games with non-square pixels. However, using such a resolution crashes RetroArch when using the D3D driver. I am forced to use standard resolutions like 640x480 or 1280x960.

Seems the only way to have my cake and eat it as well is to set my secondary monitor to primary every time I wanna use RetroArch with the GL driver.

I actually edited the .cg shaders manually to the defaults I liked and it worked quite well. Not a great alternative if you are testing shaders/parameters.

When I was searching for solutions I ran into this blog about OpenGL and Multi-Monitor issues: http://mollyrocket.com/casey/blog_0032.html. Like you, I’m hoping Vulkan improves this issue and maybe DirectX can get as much support as OpenGL does now. For now, since I don’t have any weird resolutions, I’ll just stick to the D3D api.

If you’re on a Vulkan-capable Nvidia card with the latest drivers, I am happy to say that Vulkan fixes all my multi-monitor issues and more. Only thing is that it doesn’t support most shaders in the repo, but with time I’m sure they’ll be converted to a Vulkan-friendly format. Other than that, the Vulkan driver actually works really well. No more random tearing, and it doesn’t need GPU hard sync to boot!

Was this problem with opengl already fixed?

I remember having this same problem, but not anymore.

I too use CRT as secondary monitor with retroarch.
I don’t know when “Hard GPU Sync” appeared in retroarch but it is essential to have correct sync on the secondary monitor with OpenGL.
I disable Aero in Windows 7 and close internet browser (or at least minimize it) to remove any potential interference with vsync.

I know this thread is old but I’m running into stuttering on a 4k primary monitor and 1080 p secondary which clones to a plasma TV. I typically play most games on the plasma TV by sending all fans to the secondary monitor and since it clones I get the duplicate images on the TV. I’ve just finished setting up many platforms in launchbox with retroarch emulator. I’ve combed though retroarch video settings turning everything off and on in a many combinations as possible. This is what I’ve learned so far.

Gl video driver causes audio to skip as well as video. My best combination is Vulcan, with threaded video on, which makes the screen frequency parameter n/a. I turn on vsync and put 3’s in the frame delay, framshift mode and the other one that’s right there. This makes it so the audio no longer skips only the video stutters occasionally. I’ve not tried turning off the main monitor as I’ve only recently learned that this could be due to multi monitor. My pc is i7 4790k, gtx 970, with 16 gb ram.

The stuttering occurs across all cores through retroarch. I thought I tried d3d but I’ll try again and see if it works.

I was using an old netbook on HDMI, win7 and retroarch and had lots of stuttering problems until I read this thread, changed video driver to d3d from gl, used the old menu and now I have perfect sync.

So, it seems the problem returned. Anyone else experimenting the same vsync problem on the secondary monitor when using the latest versions of Retroarch?