Question / Help Why exactly is SLI an issue for OBS to capture?

SirCrest

New Member
I know SLI is a problem, but this is more so to get some info on the problems surrounding it. So I've been getting back into OBS for local recording. (I now use it for a great 1080p60 quicksync replay recorder for long MP sessions.) And I've noticed that while SLI doesn't CAUSE stuttering in the latest release, it appears that game capture is only able to grab the frames from one card.

I know it's been said to turn off SLI, but in my current experience, I simply end up playing at half the framerate, not just capturing half the framerate. I bring up this thread because I find that I actually do fine using Dxtory as a directshow capture feed into OBS. Dxtory can capture frames off both cards just fine, hence me using it to feed into OBS through a video device. It's been mentioned that OBS can't do it "due to how SLI/Xfire function" Is there more to it that other more traditional capture software can capture frames from both master and slave cards but OBS is unable? Is this something that might be looked into for the rewrite?

Edit: And I'm referencing using "game capture" in exclusive fullscreen, though I've tested standard window as well.

Edit2:
I just found something out while testing a lot. I get between 60 and 90fps in Planetside2. When doing direct game capture, I get about like 25 or so in the video itself even though it's set to 60. I use Dxtory and I pull about 48, but still lots of stutter.

I just setup a game capture for the DWM desktop with PS2 in a window. And it looks fucking smooth as hell. Some how with the frames being pushed to the desktop composite, gamecapture allows that at full framerate. I will record a video to show this.
 
Last edited:

Lain

Forum Admin
Lain
Forum Moderator
Developer
I will attempt to explain.

When you use SLI, it alternates the drawing between the two cards. Draw one frame on card 1, draw another on card 2, repeat over and over. OBS' capture method does not download off the video card, instead it just creates a "copy" of what's being drawn right on the graphics card, and draws it straight in OBS. This results in the most efficient method of capture possible. The fundamental problem simply becomes that games running in fullscreen use SLI mode, while programs like OBS running in non-fullscreen use only one card. Because of this, OBS can only "see" captured frames of the one it is running on, but not both. Frames rendered on the other GPU that OBS is not running on cannot be seen, therefore it makes it seem like OBS is capturing at half the framerate. If you're saying it's affecting your framerate then I'm not sure, it's possible that having another graphics application like OBS open one one card is affecting your framerate (most likely syncrhonization issues, SLI was probably never designed to be used this way, they designed it to give the best gaming efficiency. Shadowplay works, but that's not a compositor like OBS, and is proprietary. They probably don't need to really create a graphics context I would guess, while OBS has to in order to be able to composite).

This particular capture method is the most efficient method out there, but technique itself just does not work well with SLI. When people ask about equipment I always have to warn them about this.

Also, I'm guessing the reason why playing in a window works (for example like you said when using dwm capture) and fullscreen doesn't is because I'm pretty sure SLI is only enabled when the game is in fullscreen mode. DWM monitor capture is nice though. It's still game capture, just on the windows compositor. If it works better that way then that might be for the best for the time being so you don't have to turn off SLI.
 

SirCrest

New Member
Thanks for replying.

No, it's not directly affecting my framerate, just the captured framerate, atleast I don't really notice it.. So yes, what you explain mirrors what I experience.

Playing exclusive fullscreen and windowed provide the same gameplay FPS and MSI afterburner shows similar GPU usage. But I can then use game capture on a borderless fullscreen window and get full framerate. The only downside is that borderless fullscreen is a bit annoying to use, but it seems to completely bypass SLI performance problems with OBS. I simply thought that this behavior might provide some sort of possible workaround for a future version in some way.

So while simply for capturing, Dxtory/Fraps or any of the other number of purely capture applications, they can be efficient in their own methods, but since OBS is using the GPU for actually compositing the image, transforming, opacity of layers to be encoded, it can't be run like those other applications. And you couldn't run it on a separate GPU because then that data would be passing through many devices causing bottlenecks? OBS is sort of running on that GPU, the frames come from it, stay on it and are edited on it so it doesn't need to move around the system?

I'm from a video editor and hardware background, so I don't know the development side of how these systems work. So I'm curious.
 

Lain

Forum Admin
Lain
Forum Moderator
Developer
You've pretty much summed it up. OBS is not just a capturing program but a video mixer as well that composites multiple sources together. The best way to capture with it is to share the same GPU with the game. (I feel it would still probably be the most efficient method of capture even if it were not a video mixer)
 
Top