The lsfg-vk project brings Lossless Scaling's frame generation to Linux users by acting as a Vulkan layer inbetween your game and your graphics card.
diff --git a/dist/flatpak/lsfg-vk-ui/gay.pancake.lsfg-vk-ui.yml b/dist/flatpak/lsfg-vk-ui/gay.pancake.lsfg-vk-ui.yml new file mode 100644 index 0000000..854a3fa --- /dev/null +++ b/dist/flatpak/lsfg-vk-ui/gay.pancake.lsfg-vk-ui.yml @@ -0,0 +1,32 @@ +id: gay.pancake.lsfg-vk-ui +command: lsfg-vk-ui +default-branch: develop + +runtime: org.kde.Platform +runtime-version: '6.10' +sdk: org.kde.Sdk + +finish-args: + - --share=ipc + - --socket=fallback-x11 + - --socket=wayland + - --device=dri + - --filesystem=xdg-config + +modules: + - name: lsfg-vk-ui + buildsystem: cmake-ninja + config-opts: + - -DCMAKE_BUILD_TYPE=Release + - -DCMAKE_INSTALL_PREFIX=/app + - -DLSFGVK_BUILD_VULKAN_LAYER=Off + - -DLSFGVK_BUILD_USER_INTERFACE=On + - -DLSFGVK_INSTALL_XDG_FILES=On + sources: + - type: dir + path: ../../.. + - type: file + path: gay.pancake.lsfg-vk-ui.metainfo.xml + - type: shell + commands: + - install -Dm0644 gay.pancake.lsfg-vk-ui.metainfo.xml -t /app/share/metainfo/ diff --git a/flatpak/VkLayer_LS_frame_generation.patch b/flatpak/VkLayer_LS_frame_generation.patch deleted file mode 100644 index 7536718..0000000 --- a/flatpak/VkLayer_LS_frame_generation.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/VkLayer_LS_frame_generation.json b/VkLayer_LS_frame_generation.json -index ece2a5f..774a027 100644 ---- a/VkLayer_LS_frame_generation.json -+++ b/VkLayer_LS_frame_generation.json -@@ -4,7 +4,7 @@ - "name": "VK_LAYER_LS_frame_generation", - "type": "GLOBAL", - "api_version": "1.4.313", -- "library_path": "liblsfg-vk.so", -+ "library_path": "/usr/lib/extensions/vulkan/lsfgvk/lib/liblsfg-vk.so", - "implementation_version": "1", - "description": "Lossless Scaling frame generation layer", - "functions": { diff --git a/flatpak/gay.pancake.lsfg-vk-ui.yml b/flatpak/gay.pancake.lsfg-vk-ui.yml deleted file mode 100644 index 45a9ad6..0000000 --- a/flatpak/gay.pancake.lsfg-vk-ui.yml +++ /dev/null @@ -1,37 +0,0 @@ -id: gay.pancake.lsfg-vk-ui -command: lsfg-vk-ui -default-branch: develop - -runtime: org.gnome.Platform -runtime-version: '49' -sdk: org.gnome.Sdk - -finish-args: - - --share=ipc - - --socket=x11 - - --socket=wayland - - --device=dri - - --filesystem=xdg-config - -sdk-extensions: - - org.freedesktop.Sdk.Extension.rust-stable - -build-options: - append-path: /usr/lib/sdk/rust-stable/bin - build-args: - - --share=network - -modules: - - name: lsfg-vk-ui - buildsystem: simple - build-commands: - - cargo build --release --locked - - install -Dm755 ./target/release/lsfg-vk-ui /app/bin/lsfg-vk-ui - - install -Dm644 ./rsc/gay.pancake.lsfg-vk-ui.desktop /app/share/applications/gay.pancake.lsfg-vk-ui.desktop - - install -Dm644 ./rsc/icon.png /app/share/icons/hicolor/256x256/apps/gay.pancake.lsfg-vk-ui.png - - install -Dm644 ./gay.pancake.lsfg-vk-ui.metainfo.xml /app/share/metainfo/gay.pancake.lsfg-vk-ui.metainfo.xml - sources: - - type: dir - path: ../ui - - type: file - path: gay.pancake.lsfg-vk-ui.metainfo.xml diff --git a/lsfg-vk-layer/CMakeLists.txt b/lsfg-vk-layer/CMakeLists.txt index 6a8522c..1d5c122 100644 --- a/lsfg-vk-layer/CMakeLists.txt +++ b/lsfg-vk-layer/CMakeLists.txt @@ -13,7 +13,8 @@ set_target_properties(lsfg-vk-layer PROPERTIES CXX_VISIBILITY_PRESET hidden) set(LSFGVK_LAYER_LIBRARY_PATH - "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/liblsfg-vk-layer.so") + "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/liblsfg-vk-layer.so" + CACHE STRING "Path to Vulkan layer shared object") configure_file( "VkLayer_LSFGVK_frame_generation.json.in" "VkLayer_LSFGVK_frame_generation.json" diff --git a/lsfg-vk-ui/CMakeLists.txt b/lsfg-vk-ui/CMakeLists.txt index b2b79c4..f151e98 100644 --- a/lsfg-vk-ui/CMakeLists.txt +++ b/lsfg-vk-ui/CMakeLists.txt @@ -44,6 +44,6 @@ install(TARGETS lsfg-vk-ui if(LSFGVK_INSTALL_XDG_FILES) install(FILES "rsc/gay.pancake.lsfg-vk-ui.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/256x256/apps") - install(FILES "rsc/lsfg-vk-ui.desktop" + install(FILES "rsc/gay.pancake.lsfg-vk-ui.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications") endif() diff --git a/lsfg-vk-ui/rsc/lsfg-vk-ui.desktop b/lsfg-vk-ui/rsc/gay.pancake.lsfg-vk-ui.desktop similarity index 100% rename from lsfg-vk-ui/rsc/lsfg-vk-ui.desktop rename to lsfg-vk-ui/rsc/gay.pancake.lsfg-vk-ui.desktop diff --git a/lsfg-vk-ui/src/utils.cpp b/lsfg-vk-ui/src/utils.cpp index bd8309b..ea19a04 100644 --- a/lsfg-vk-ui/src/utils.cpp +++ b/lsfg-vk-ui/src/utils.cpp @@ -35,6 +35,10 @@ QStringList ui::getAvailableGPUs() { // NOLINT (IWYU) // expected } + // first remove 1:1 duplicates + std::ranges::sort(gpus); + gpus.erase(std::ranges::unique(gpus).begin(), gpus.end()); + // build the frontend list QStringList list{"Default"}; // NOLINT (IWYU) for (const auto& gpu : gpus) { @@ -46,10 +50,16 @@ QStringList ui::getAvailableGPUs() { // NOLINT (IWYU) ); // add pci id to distinguish, otherwise add just the name + QString entry; if (count > 1 && gpu.second.has_value()) - list.append(QString::fromStdString(*gpu.second)); + entry = QString::fromStdString(*gpu.second); else - list.append(QString::fromStdString(gpu.first)); + entry = QString::fromStdString(gpu.first); + + // ensure no duplicates (flatpak does funny things) + if (list.contains(entry)) + continue; + list.append(entry); } return list; diff --git a/package/alpm.PKGINFO b/package/alpm.PKGINFO deleted file mode 100644 index 3e29674..0000000 --- a/package/alpm.PKGINFO +++ /dev/null @@ -1,12 +0,0 @@ -pkgname = lsfg-vk -pkgbase = lsfg-vk -pkgver = ${ALPM_VERSION}-1 -pkgdesc = "Lossless Scaling Frame Generation on Linux via DXVK/Vulkan" -url = https://discord.gg/losslessscaling -packager = "PancakeTAS ??>" -arch = x86_64 -license = MIT -depend = vulkan-icd-loader -depend = libadwaita -depend = gtk4 -depend = glibc diff --git a/package/dpkg.control b/package/dpkg.control deleted file mode 100644 index 0ac2e8f..0000000 --- a/package/dpkg.control +++ /dev/null @@ -1,12 +0,0 @@ -Package: lsfg-vk -Description: Lossless Scaling Frame Generation on Linux via DXVK/Vulkan -Homepage: https://discord.gg/losslessscaling -Maintainer: "PancakeTAS ??>" -Version: ${DPKG_VERSION} -Architecture: amd64 -Section: utils -Priority: optional -Depends: libc6 (>= 2.38-1), - libvulkan1, - libadwaita-1-0, - libgtk-4-1 diff --git a/package/package.sh b/package/package.sh deleted file mode 100755 index cee5347..0000000 --- a/package/package.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash -if [ -z "$VERSION" ]; then - set -eux - export VERSION="1.1.0" - export ALPM_VERSION=$(git describe --long --tags | sed 's/\([^-]*-\)g/r\1/;s/-/./g' | sed "s/.\..\../$VERSION/") - export DPKG_VERSION=$(git describe --long --tags | sed 's/\([^-]*-\)g/r\1/;s/-/./g' | sed "s/^v.\..\..\.r[1-9]\+./$VERSION~git$(date '+%Y%m%d')./") - export RPM_VERSION=$(git describe --long --tags | sed 's/\([^-]*-\)g/r\1/;s/-/./g' | sed "s/v.\..\...r/$VERSION^/") -else - set -eux - export ALPM_VERSION="$VERSION" - export DPKG_VERSION="$VERSION" - export RPM_VERSION="$VERSION" -fi - -# set permission bits -chmod 755 bin/lsfg-vk-ui -chmod 755 lib/liblsfg-vk.so -chmod 644 share/vulkan/implicit_layer.d/VkLayer_LS_frame_generation.json -chmod 644 share/applications/lsfg-vk-ui.desktop -chmod 644 share/icons/hicolor/256x256/apps/gay.pancake.lsfg-vk-ui.png - -# build alpm package -echo "Building ALPM package..." - -mkdir -pv alpm -envsubst < package/alpm.PKGINFO > alpm/.PKGINFO - -mkdir -pv alpm/usr/{bin,lib,share/vulkan/implicit_layer.d,share/applications,share/icons/hicolor/256x256/apps} -cp -v bin/lsfg-vk-ui alpm/usr/bin/lsfg-vk-ui -cp -v lib/liblsfg-vk.so alpm/usr/lib/liblsfg-vk.so -cp -v share/vulkan/implicit_layer.d/VkLayer_LS_frame_generation.json \ - alpm/usr/share/vulkan/implicit_layer.d/VkLayer_LS_frame_generation.json -cp -v share/applications/lsfg-vk-ui.desktop \ - alpm/usr/share/applications/lsfg-vk-ui.desktop -cp -v share/icons/hicolor/256x256/apps/gay.pancake.lsfg-vk-ui.png \ - alpm/usr/share/icons/hicolor/256x256/apps/gay.pancake.lsfg-vk-ui.png - -tar -cvzf "lsfg-vk-$VERSION.x86_64.tar.zst" -C alpm \ - .PKGINFO usr - -# build dpkg package -echo "Building DEB package..." - -mkdir -pv deb/DEBIAN -envsubst < package/dpkg.control > deb/DEBIAN/control - -mkdir -pv deb/usr/{bin,lib,share/vulkan/implicit_layer.d,share/applications,share/icons/hicolor/256x256/apps} -cp -v bin/lsfg-vk-ui deb/usr/bin/lsfg-vk-ui -cp -v lib/liblsfg-vk.so deb/usr/lib/liblsfg-vk.so -cp -v share/vulkan/implicit_layer.d/VkLayer_LS_frame_generation.json \ - deb/usr/share/vulkan/implicit_layer.d/VkLayer_LS_frame_generation.json -cp -v share/applications/lsfg-vk-ui.desktop \ - deb/usr/share/applications/lsfg-vk-ui.desktop -cp -v share/icons/hicolor/256x256/apps/gay.pancake.lsfg-vk-ui.png \ - deb/usr/share/icons/hicolor/256x256/apps/gay.pancake.lsfg-vk-ui.png - -dpkg-deb --root-owner-group --build deb "lsfg-vk-$VERSION.x86_64.deb" - -# build rpm package -echo "Building RPM package..." - -mkdir -pv rpm -envsubst < package/rpm.spec > rpm/lsfg-vk.spec - -mkdir -pv rpm/SOURCES -cp -v bin/lsfg-vk-ui rpm/SOURCES -cp -v lib/liblsfg-vk.so rpm/SOURCES -cp -v share/vulkan/implicit_layer.d/VkLayer_LS_frame_generation.json \ - rpm/SOURCES -cp -v share/applications/lsfg-vk-ui.desktop \ - rpm/SOURCES/lsfg-vk-ui.desktop -cp -v share/icons/hicolor/256x256/apps/gay.pancake.lsfg-vk-ui.png \ - rpm/SOURCES/gay.pancake.lsfg-vk-ui.png - -rpmbuild -bb rpm/lsfg-vk.spec --define "_topdir $(pwd)/rpm" -mv -v "rpm/RPMS/x86_64/lsfg-vk-$RPM_VERSION-1.x86_64.rpm" "lsfg-vk-$VERSION.x86_64.rpm" - -# cleanup -rm -rf alpm deb rpm diff --git a/package/rpm.spec b/package/rpm.spec deleted file mode 100644 index 497d360..0000000 --- a/package/rpm.spec +++ /dev/null @@ -1,33 +0,0 @@ -Name: lsfg-vk -Summary: Lossless Scaling Frame Generation on Linux via DXVK/Vulkan -Version: ${RPM_VERSION} -Release: 1%{?dist} -URL: https://discord.gg/losslessscaling -Packager: "PancakeTAS ??>" -License: MIT -Group: Applications/System -BuildArch: x86_64 - -Requires: glibc >= 2.38 -Requires: vulkan-loader -Requires: libadwaita -Requires: gtk4 - -%global __strip /bin/true - -%description -Lossless Scaling Frame Generation on Linux via DXVK/Vulkan. - -%install -install -Dm755 %{_sourcedir}/lsfg-vk-ui %{buildroot}%{_bindir}/lsfg-vk-ui -install -Dm755 %{_sourcedir}/liblsfg-vk.so %{buildroot}%{_libdir}/liblsfg-vk.so -install -Dm644 %{_sourcedir}/VkLayer_LS_frame_generation.json %{buildroot}%{_datadir}/vulkan/implicit_layer.d/VkLayer_LS_frame_generation.json -install -Dm644 %{_sourcedir}/lsfg-vk-ui.desktop %{buildroot}%{_datadir}/applications/lsfg-vk-ui.desktop -install -Dm644 %{_sourcedir}/gay.pancake.lsfg-vk-ui.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/gay.pancake.lsfg-vk-ui.png - -%files -%{_bindir}/lsfg-vk-ui -%{_libdir}/liblsfg-vk.so -%{_datadir}/vulkan/implicit_layer.d/VkLayer_LS_frame_generation.json -%{_datadir}/applications/lsfg-vk-ui.desktop -%{_datadir}/icons/hicolor/256x256/apps/gay.pancake.lsfg-vk-ui.png