Integrate frame generation into the virtual swapchain's presentation thread. The thread now copies virtual images to backend sources, schedules frame generation, and presents generated frames before the original frame. Key changes: - Add Generator to MyVkSwapchain for frame generation - Implement frame generation loop in thread_main() - Add virtual_PresentGenerated() helper for generated frame presentation - Add VK_KHR_swapchain to required device extensions Bug fixes: - Fix backend GPU selection on multi-GPU systems by passing the layer's active GPU name to the backend device picker. This ensures DMA-BUF memory sharing works correctly between layer and backend. - Fix crash in CommandBuffer::submit() when waitSemaphores is empty by adding empty vector check before accessing .back() - Add VK_KHR_present_wait2 compatibility shims for older Vulkan SDKs |
||
|---|---|---|
| .github | ||
| dist | ||
| docs | ||
| lsfg-vk-backend | ||
| lsfg-vk-cli | ||
| lsfg-vk-common | ||
| lsfg-vk-layer | ||
| lsfg-vk-ui | ||
| .gitattributes | ||
| .gitignore | ||
| CMakeLists.txt | ||
| LICENSE.md | ||
| README.md | ||
lsfg-vk
Lossless Scaling is a Windows-exclusive program featuring various algorithms for scaling and interpolating programs.
lsfg-vk is a Vulkan layer that hooks into Vulkan applications and generates additional frames using Lossless Scaling's frame generation algorithm.
Caution
You are reading the README for the upcoming version 2.0 of lsfg-vk. For the stable version 1.x, please read here
Installation
Tip
If you are on a Steam Deck or similar handheld, consider using the Decky plugin for lsfg-vk. This is an easy way to install and configure lsfg-vk on the Steam Deck. Please keep in mind that it is not officially supported and support questions should be directed to the plugin's repository & discord.
- Before proceeding, please make sure you have Lossless Scaling downloaded on Steam.
- Head to the GitHub Releases and download the file named "lsfg-vk-2.0.0-x86_64.tar.xz".
- Open a terminal in the folder where you downloaded the file and run the following:
tar -xvf lsfg-vk-2.0.0-linux.tar.xz -C ~/.local
This will extract lsfg-vk to ~/.local. Please keep track of the files that were extracted, in case you want to uninstall lsfg-vk later.
- The graphical interface requires Qt6 and Qt6 Quick in order to run. If you do not have these installed, install the following packages:
sudo apt install qt6-qpa-plugins libqt6quick6 qml6-module-qtquick-controls qml6-module-qtquick-layouts qml6-module-qtquick-window qml6-module-qtquick-dialogs qml6-module-qtqml-workerscript qml6-module-qtquick-templates qml6-module-qt-labs-folderlistmodel # On Debian/Ubuntu-based systems
sudo pacman -S qt6-declarative qt6-base # On Arch-based systems
sudo dnf install qt6-qtdeclarative qt6-qtbase # On Fedora
- (Optional) If you wish to use lsfg-vk within Flatpak applications, see the Flatpak Guide.
Usage
In order to start using lsfg-vk, you will need to configure it. This can either be done using the GUI application, or manually.
Graphical Configuration
Start 'lsfg-vk Configuration Window' from your application launcher, or run ~/.local/bin/lsfg-vk-ui in a terminal:
- On the left side, you will see a list of profiles. Each profile has its own settings.
- All properties in the "Global Settings" section apply to all profiles.
- Should Lossless Scaling be installed in a non-standard location, you can specify the path here.
- Select a profile and configure the "Profile Settings" section to your liking.
- When editing the "Active In" list, you can add a game using its executable name (e.g.
Game.exe,mpv).
- When editing the "Active In" list, you can add a game using its executable name (e.g.
- Please see the documentation for detailed information on each setting.
- Once you are done configuring, simply starting a game that matches one of the profiles will automatically apply the settings.
Manual Configuration
The default configuration is located in ~/.config/lsfg-vk/conf.toml. It will be created automatically when any Vulkan application is started.
- In the
[global]section, you can change where Lossless Scaling is installed, as well as other global settings. - Each profile is defined in its own
[[profile]]section. - The
active_inarray/string defines which applications the profile is active in. You can add applications using their executable name (e.g.Game.exe,mpv). - Please see the documentation for detailed information on each setting.
- Once you are done configuring, simply starting a game that matches one of the profiles will automatically apply the settings.
You can validate the configuration using lsfg-vk-cli:
~/.local/bin/lsfg-vk-cli validate
Benchmarking Mode
You can run a frame generation benchmark using lsfg-vk-cli:
~/.local/bin/lsfg-vk-cli benchmark
By default, the benchmark will run for 10 seconds. Add -h to see all available benchmarking options.
Support and Troubleshooting
If you encounter any issues or have questions regarding lsfg-vk, read through the Troubleshooting documentation page or join the Discord server for assistance.