docs: readme & license

This commit is contained in:
PancakeTAS 2025-07-04 15:16:45 +02:00
parent e03fcaf4b0
commit 533cc97a05
No known key found for this signature in database
2 changed files with 62 additions and 0 deletions

21
LICENSE.md Normal file
View file

@ -0,0 +1,21 @@
## MIT License
Copyright (c) 2025 lsfg-vk
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

41
README.md Normal file
View file

@ -0,0 +1,41 @@
# lsfg-vk
This project brings [Lossless Scaling's Frame Generation](https://store.steampowered.com/app/993090/Lossless_Scaling/) to Linux!
## How does it work?
LSFG is primarily written in DirectX 11 compute shaders, which means we can use DXVK to translate it into SPIR-V. The surrounding parts have been rewritten in plain Vulkan code in order to make LSFG run natively on Linux.
By specifying an `LD_PRELOAD`, lsfg-vk can place itself inbetween your game and Vulkan. That way it can fetch frames from the game and insert its own frames without any problems. (Beware of anticheats please!)
## Building, Installing and Running
In order to compile LSFG, make sure you have the following components installed on your system:
- Traditional build tools (+ bash, sed, git)
- Clang compiler (this project does NOT compile easily with GCC)
- Vulkan and SPIR-V header files
- CMake build system
- Meson build system (for DXVK)
- Ninja build system (backend for CMake)
- openssl's libcrypto
Compiling lsfg-vk is relatively straight forward, as everything is neatly integrated into CMake:
```bash
$ CC=clang CXX=clang++ cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=absolute-install-path-here
$ cmake --build build
$ cmake --install build
```
(Make sure you change `absolute-install-path-here` to the path you'd like to install this project to)
Next, you'll need to download Lossless Scaling from Steam. Switch to the `legacy_3.1` branch or download the corresponding depot.
Copy or note down the path of "Lossless.dll" from the game files.
Finally, let's actually start a program with frame generation enabled. I'm going to be using `vkcube` for this example:
```bash
LD_PRELOAD="/home/pancake/.lsfg-vk/liblsfg-vk.so" LSFG_DLL_PATH="/home/pancake/games/Lossless Scaling/Lossless.dll" LSFG_MULTIPLIER=4 vkcube
```
Make sure you adjust the paths. Let's examine each one:
- `LD_PRELOAD`: This is how you let the loader know that you want to load lsfg-vk before anything else. This HAS to be either an ABSOLUTE path, or a path starting with `./` to make it relative. Specify `liblsfg-vk.so` here.
- `LSFG_DLL_PATH`: Here you specify the Lossless.dll you downloaded from Steam. This is either an absolute path, or a relative path from where you are running the app.
- `LSFG_MULTIPLIER`: This is the multiplier you should be familiar with. Specify `2` for doubling the framerate, etc.
>[!WARNING]
> Unlike on Windows, LSFG_MULTIPLIER is heavily limited here (at the moment!). If your hardware can create 8 swapchain images, then setting LSFG_MULTIPLIER to 4 occupies 4 of those, leaving only 4 to the game. If the game requested 5 or more, it will crash.