I’ve been struggling trying to get the framerate of my project to improve, it spans 4 4k portrait displays (8640x4096). Whenever it is in perform mode I get stuttering. It behaves the worst when I use NVIDIA surround mode to make one extended desktop. NVIDIA RTX 3070 on Windows 11. Latest studio drivers. I was also having problems when using my built-in graphics for a 5th output for editor window. i’ve taken to editing on one machine and using TouchPlayer on my 4-channel playback machine, built-in graphics disabled, and it hasn’t helped matters.
It also seems as though it’s related to spanning several displays in general, as if i have the window scaled to fit a single display I have no performance issues.
Seems very much like an interaction I found on Twitter between Kodai Takao and TouchDesigner, unfortunately I can’t link it here.
do we know at all what is at the root of these kinds of problems??
I did get performance to improve (based on the twitter post) by making the size of my BORDERED window 1px smaller than the desktop size. But it still stuttered compared to a window rendering on a single display.
Also worth noting - I’m decoding 8x 1080P video files, HAP.
A single borderless window that is covering the entire desktop (all 4 outputs) should give the best performance. This is what you are doing and not getting good results? Is the stuttering registered in TouchDesigner (via dropped frames in the Perform CHOP), or just visually stuttering?
Yes, the single borderless window using all 4 outputs (either with Windows combining the displays into a single desktop, or with NVIDIA Surround) negatively affects my performance, considerably. When I’ve tried this with the editor open on a 5th display I’ve observed that the stuttering is reflected in touch designer’s frame rate. I’m not sure how I would log/monitor framerate when I am using all 4 displays in perform mode.
I would definitely expect poor performance if you are spanning TD across the outputs from two GPUs especially if one is an integrated one, so that part is expected. For a single one you’d likely use a Op Viewer COMP and put the output of the Perform CHOP (or a Trail CHOP of it) up on your output so you can monitor it’s behavior.
I’m not sure I follow “either with Windows combining the displays into a single desktop, or with NVIDIA Surround”. You’d have to do both of these, so can you elaborate on what you mean by ‘or’?
To clarify, I am not spanning touch designer’s performance output across two GPU’s. But I started off using 4 outputs for the performance, and the integrated graphics to have a 5th display to do network editing on. Stuttering only when I launch performance mode. Appears perfectly smooth in the network editor. Since then I’ve disabled the integrated graphics from the BIOS to make sure that it’s not having an impact on what I’m doing. It makes launching/editing/monitoring my project much harder because of the nature of my performance setup unfortunately. And it hasn’t resolved my issues. I have a Quadro RTX 4000 card I will be doing some tests on tonight to see if there is a difference.
Regarding extended desktops: when windows combines the displays, it appears as 4 separate displays in the Windows display settings dialog. The desktop is spanned and becomes one big canvas, of course. When you use the NVIDIA “surround” mode in the NVIDIA control panel, the displays are combined by the driver and appear to Windows as a single display with the width & height defined by the NVIDIA control panel, not the Windows display settings. I presume these are two totally different mechanisms for extending the desktop, and I’m not sure which to use.
Since TouchDesigner is only actually running on one GPU, having a one window on one GPU and another on the other is also the same a spanning a single window across the GPUs (the two windows separation doesn’t buy you anything). Perform mode means there isn’t an editing window also, as having 2 windows in all cases can greatly hurt performance.
Ideally you’d use Nvidia’s surround to create a single virtual monitor, and have your perform window cover 100% of this monitor. You should see a flicker when that window takes/loses focus, as that is the driver entering and exiting ‘exclusive mode’. Make sure you are entering perform mode, and not just opening a separate window though.
Thanks. If I understand what you’re saying (and this is just how I understood it), when you go into perform mode the editor window disappears leaving only the perform window active, and if this spans 4 displays, AND they’re combined into a single display with surround (or mosaic, with the quadro cards), this should be ideal. This has been what I’ve been attempting to get to. I am entering perform mode. In fact, I’ve been trying all of the combinations, everything and anything I can do to change the behavior. It still works best windowed and starts stuttering in fullscreen ‘exclusive mode’.
However, what I’ve noticed since adding a perform CHOP with a text overlay so I can monitor framerate and framedropping is that I’m not dropping frames. My framerate is constant even when the video is not playing back smoothly. I am having much better results with the Quadro card and Mosaic, however.
I am not yet 100% convinced that I’m ever getting “exclusive mode”. I am using teamviewer in this case to copy my project to my playback machine to launch it.
I’m not sure how teamviewer would interact with this. The key is the window needs to gain focus (you’ll see the output flicker when this occurs). Are you able to try directly on the machine?
If you are getting better results with the RTX this may be an issue with the Geforce level cards, not working well with OpenGL and exclusive mode.
Update: I think I may have gained some ground on this problem. I am using LG OLED tv’s as my output device, enabling “game enhancement” mode allows me to not be forced into a 30hz refresh rate, at least for the machine with the Quadro card in it. Enabling those additional video modes has allowed me to get rid of the stutters.
My output aspect is 4 wide 4k displays, portrait. 8640x3840. Still it is impossible to get the Geforce card to span monitors with surround, at the resolution I need. With multiple un-surrounded displays I can only achieve 4320x1920 output res. and get it to nearly work but am still dropping frames, even with an absolutely minimal patch playing back 4 1080p test clips. I find that pretty disappointing. But I am happy I am finally getting stable results with the Quadro card and Mosaic mode, 4 proper 4K outputs, 120hz refresh.
Yeah agreed. The unexplained dropping frames is the Windows compositor simply not displaying the frames we are providing it to the desktop. This is why the fullscreen exclusive mode is so critical for perfect playback.
Any news if those unexplained frame drops still exist in borderless windowed (non FSE) mode in win 11?
I’ve read about a lot of optimizations (moving from a legacy blt-model to modern flip-model, …) for windowed games in 11 and wonder if this also fixes our issues
No news on our side, although I’ll get someone with a Win11 machine to spend some time testing. We’ve always been flip-model, even with OpenGL. It’s possible things are better with Vulkan, but it’s ultimately the Windows compositor that is the issue, it’s what actually presents our images to the screen, not us directly (unless we are in exclusive mode).
Another update. TeamViewer definitely prohibits TD from entering exclusive mode, at least on my machine. I believe it is the overlay they want to slap on the screen when there is a client active. UltraVNC doesn’t suffer from the same problems. In case this helps someone down the line.
Also, I haven’t figured out why I can’t seem to get 2160x3840 resolution out of NVIDIA’s mosaic. It’s the native resolution of my displays and is supported according to the EDID. But Mosaic only works properly at 2160x4096 (DCI 4k) even though my displays don’t support it?! Strange, but that’s probably a question for NVIDIA. @malcolm , I’m seeing you all over the place on the forums here! I for one greatly appreciate your responsive helpfulness