Let’s say you have an old PC that can just barely play a game, maybe it gets 20FPS in it. Kinda playable but barely. But, you also have another really old, maybe even crappier GPU lying around. What if you could stick that GPU into your PC to actually make use of it to boost your framerate?

This is a little experiment I’ve been working on. Imagine that your big GPU produces 20FPS on the game you want to play at 1080p, but if you downgrade it to 720p, it produces 30fps. Now, imagine that those frames are not directly displayed to the screen, but instead sent to your even shittier GPU you added to the PC for processing.

That shittier GPU then applies algorithmic upscaling (FSR1) to upscale it from 720p to 1080p, which would then be in 30fps since it’s done on a different GPU, running FSR won’t affect your base framerate, and so now you’re playing with 10 extra frames in 1080p. But also imagine this second GPU then uses algorithmic interpolation (MCFI) to insert an additional “fake frame” between between each “real frame,” effectively doubling the framerate from 30FPS to 60FPS.

Now you’d be playing the same game in 1080p60fps which could only run in 1080p20fps before. That’s the idea behind this project.

https://www.foleosoft.com/software/YolkooBoost

Luckily, 2/3rds of what I needed were already written for me by Valve. It’s basically a fork of Gamescope. Gamescope only includes upscaling though (FSR1), it does not include framegen, so my fork also adds framegen. It also adds a GUI which autodetects your installed Steam games and lets you enable/disable them for FSR or framegen at the click of a button.

Note that both FSR1 upscaling and MCFI framegen are algorithmic, not AI, so they won’t look as good as the latest DLSS or whatever. But that is also a boon because neither are resource intensive and could easily run on very low-end GPUs, like an RX460.

Adding a whole second GPU pipeline also introduces latency, so it’s probably not the best choice for competitive games or racing games. Better for something like single-player adventure games. .

The thing is just an experiment. Maybe I’ll work more on it if people think it’s interesting. But I mainly built it because I had two old GPUs laying around (and RX480 and RX580 2048SP), but not two extra PCs to put them in. I put them both in the same PC and wanted to actually be able to make use of them rather than them just looking cool together. So it’s mostly for my own personal use, but if other people use it maybe I’ll work on it more to make it easier for others to use it.

This works with OpenGL and Vulkan. Although the compositing layer is Vulkan, so Vulkan is a requirement to run it. That means it cannot work on cards that don’t support at least GCN 1.0, meaning it cannot work on anything prior to the Radeon HD 7000 series. Although, I have not tested that far back, I’m not sure what the minimum is that has the horsepower for this, I’m currently running it on a RX580 2048SP and it is massively overkill. I’d suspect a RX550 2GB would probably run it perfectly fine.

If you are indeed rendering the base frames (pre-upscale) at 720p or lower, then you only need x1 lane of PCIe bandwidth, so you don’t need a fancy motherboard that supports two GPUs both at x16. Make sure the rendering GPU has x16, but the composite GPU can be in a x1 slot and the bandwidth is more than plenty enough.

I may in the future see if it’s possible to take this pipeline and instead hook other things into it, maybe something more GPU intensive than FSR1 and MCFI, to make a setup like this make sense on a PC with two beefy GPUs. Maybe something actually AI-based which is free and open source. But I’d need to do more research to figure that out. This experiment at least proves, though, that dual GPU gaming on on Linux is possible, if you split the GPUs between a rendering and a compositing GPU.

Edit: I’ve gotten Lossless Scaling Frame Generation (LSFG) largely working. I also improved the performance of frame generation by swapping the order. Previously I was doing scaling => framegen which is slow but ties nicely into gamescope which is the project I forked. It was far more difficult but I did manage to figure out how to do framegen => scaling. If you’re FSR scaling from 720p to 1080p for example, applying LSFG to the 720p image is far faster than the 1080p.

One problem I’ve encountered is that framegen has issues if your framerate is already near the target framerate. For example, if your game is running at 58FPS already and you want to framegen to 60FPS. There isn’t enough headroom for it to interpolate frames and it causes the framegen to sometimes drop frames. It’s thus recommended that if your framerate is already that high, (1) don’t use framegen, or (2) cap the framerate in the game’s settings to something like 50FPS, which will guarantee headroom and so you’ll get a steady 60FPS output.