From 0f71c4d79d690221e6887f0a39411380eff577c3 Mon Sep 17 00:00:00 2001 From: Marc Date: Thu, 18 Jan 2024 21:00:20 +0100 Subject: [PATCH] I forgot i had git setup --- .gitignore | 3 + PKGBUILD | 23 +++++++ gamerunner.cfg | 37 ++++++++++ gamerunner.sh | 181 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 244 insertions(+) create mode 100644 .gitignore create mode 100644 PKGBUILD create mode 100644 gamerunner.cfg create mode 100755 gamerunner.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..df50df2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +older-packages +*.pkg.* +src diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 0000000..a54b2d3 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Marc barbier +pkgname=game-runner +pkgver=2.2 +pkgrel=1 +pkgdesc="Simple wrapper around envycontrol and optimus manager" +arch=('any') +url='' +license=('GPL2') +source=( 'gamerunner.sh' 'gamerunner.cfg' ) +backup=( 'etc/gamerunner.cfg' ) +optdepends=('optimus-manager: optimus-manager support' + 'envycontrol: envycontrol support' + 'supergfxctl: supergfxctl support' ) + +sha512sums=( + 'b073f717f83942dbb90a98e557b4e32a9e8d0ac1ebb94e753698278afa40333ec8168d0f0ffde7d60a4ac75e66f41c98ba0a56becb691712cd76e39886691fbc' + '227fcebb72a73ff634278a61f07ef82e367bb9dc6f8bdd00a0fe774882b6c234421d1ef8639475e301820eb05ac9a4a3dc047c13875cc6f69d313f63c9e27c91' +) + +package() { + install -Dm 755 "$srcdir/gamerunner.sh" "$pkgdir/usr/bin/gamerunner" + install -Dm 644 "$srcdir/gamerunner.cfg" "$pkgdir/etc/gamerunner.cfg" +} diff --git a/gamerunner.cfg b/gamerunner.cfg new file mode 100644 index 0000000..75e781a --- /dev/null +++ b/gamerunner.cfg @@ -0,0 +1,37 @@ +# 0=off(default safe) 1=on(might not load or cause crashes) 2=forced(might cause crashes) +MANGOHUD=0 +USE_GAMEMODE=1 +USE_DLSYM=1 +#Un comment for RTX support on older proton +#VKD3D_CONFIG=dxr,dxr11 +PROTON_ENABLE_NVAPI=1 +PROTON_HIDE_NVIDIA_GPU=0 +PROTON_ENABLE_NGX_UPDATER=1 +#Obs-vk capture +OBSCAP=1 +# small amd vulkan perf boost +RADV_PERFTEST=nggc + +# Increase performance in most cases +__GL_THREADED_OPTIMIZATIONS=1 +mesa_glthread=true + +# Reduce lantency on nvidia systems +__GL_MaxFramesAllowed=1 + +# Large BAR(Smart access memory) on any AMD hardware ( please use it only on suported hardware ) +RADV_PERFTEST=sam + +# Put here the icd of your igpu (radv / amdvlk / intel ). full path required ! + +# RADV +# MESA_ICD="/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json" + +# AMDVLK +# MESA_ICD="/usr/share/vulkan/icd.d/amd_icd64.json:/usr/share/vulkan/icd.d/amd_icd32.json" + +# INTEL (useless to specify leave it commented out) +# MESA_ICD="/usr/share/vulkan/icd.d/intel_icd.x86_64.json:/usr/share/vulkan/icd.d/intel_icd.i686.json" + +#Unreliable in most cases +GAMESCOPE=0 diff --git a/gamerunner.sh b/gamerunner.sh new file mode 100755 index 0000000..b74a174 --- /dev/null +++ b/gamerunner.sh @@ -0,0 +1,181 @@ +#!/bin/bash + +# Gamerunner a hook for gamemode and nvidia prime render offload to avoid crashed with optimus-manager + +function preload() { + export LD_PRELOAD="${LD_PRELOAD}${LD_PRELOAD:+:}$1" +} + + +MAIN_VENDOR=$(glxinfo | grep "OpenGL vendor string") +VULKAN_VENDOR=$(vulkaninfo --summary | grep "driverName" | grep -v llvm) +NVK_ICD="/usr/share/vulkan/icd.d/nouveau_icd.i686.json:/usr/share/vulkan/icd.d/nouveau_icd.x86_64.json" +NVKTEST=$(VK_ICD_FILENAMES=$NVK_ICD vulkaninfo --summary) + +if [ "$MAIN_VENDOR" == "OpenGL vendor string: MESA" ] +then + MODE="nvk" +else + if [ "$MAIN_VENDOR" == "OpenGL vendor string: NVIDIA Corporation" ] + then + MODE="nvidia" + export GAMESCOPE=0 + else + if [[ "$VULKAN_VENDOR" =~ "NVIDIA" ]] + then + MODE="hybrid" + else + if [[ ! -z "$NVKTEST" ]] + then + MODE="hybridnvk" + else + MODE="integrated" + fi + fi + fi +fi + +if [ ! -z "${GR_SWITCH_ONLY}" ] && (( $GR_SWITCH_ONLY == 1 )) +then + echo "Skipping env variables" +else + USE_GAMEMODE=0 + MANGOHUD=0 + GAMESCOPE=0 + + #if the config doesn't exist load /etc/gamerunner.cfg instead of ~/.config/gamerunner.cfg + if [ -f "$HOME/.config/gamerunner.cfg" ] + then + echo "Loading user config" + source ~/.config/gamerunner.cfg + else + echo "Loading system config" + if [ -f "/app/etc/gamerunner.cfg" ] + then + source /app/etc/gamerunner.cfg + else + source /etc/gamerunner.cfg + fi + fi + + + + #Export the config + export VKD3D_CONFIG + export PROTON_ENABLE_NVAPI + export __GL_THREADED_OPTIMIZATIONS + export mesa_glthread + export RADV_PERFTEST + export __GL_MaxFramesAllowed + export PROTON_HIDE_NVIDIA_GPU + export PROTON_ENABLE_NGX_UPDATER + export MANGOHUD + + if [ "$#" -eq 0 ]; then + programname=`basename "$0"` + echo "ERROR: No program supplied" + echo + echo "Usage: $programname " + exit 1 + fi + + if [ "$GR_SAFE" == "1" ] + then + echo "Safe mode" + GAMESCOPE=0 + export MANGOHUD=0 + fi + + + if (( $USE_GAMEMODE == 1 )) + then + preload "libgamemodeauto.so.0" + fi + + if [ "$MODE" = "nvidia" ] || [ "$MODE" = "hybrid" ] + then + echo "Disabling gamescope" + GAMESCOPE=0 + fi + + if (( $GAMESCOPE == 1 )) + then + echo "Disabling mangohud for safety with gamescope" + export MANGOHUD=0 + fi + + if (( $MANGOHUD == 2 )) + then + echo force loading mangohud + #on load la lib mango + preload "libMangoHud.so" + if (( "$USE_DLSYM" == 1 )) + then + export MANGOHUD_DLSYM=1 + preload "libMangoHud_dlsym.so" + fi + export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/\$LIB:/usr/\$LIB/mangohud" + export MANGOHUD=1 + fi + + if (( $OBSCAP == 1 )) + then + echo loading obs vulkan capture + preload "/usr/\$LIB/obs_glcapture/libobs_glcapture.so" + export OBS_VKCAPTURE=1 + + fi +fi + +if [ "$MODE" == "nvidia" ] +then + # Do nothing + echo "nvidia" + export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/nvidia_icd.json" + export __GLX_VENDOR_LIBRARY_NAME=nvidia +else + if [ "$MODE" == "hybridnvk" ] + then + export DRI_PRIME=1 + #All nvk specific should by compatible with hybrid + MODE="nvk" + echo "Hybrid-nvk" + fi + + if [ "$MODE" == "nvk" ] + then + echo "NVK" + export VK_DRIVER_FILES=$NVK_ICD + else + if [ "$MODE" == "hybrid" ] + then + echo "hybrid" + export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/nvidia_icd.json" + if [ "$XDG_SESSION_TYPE" == 1 ] + then + export __NV_PRIME_RENDER_OFFLOAD=1 + fi + export __VK_LAYER_NV_optimus=NVIDIA_only + export __GLX_VENDOR_LIBRARY_NAME=nvidia + else + if [ -n "$MESA_ICD" ] + then + export VK_DRIVER_FILES=$MESA_ICD + fi + echo "integrated" + fi + fi +fi + +# if gamescope is not present this will return an empty string +GAMESCOPE_PATH=$(command -v gamescope) +if [ "$GAMESCOPE" == "1" ] && [ ! "GAMESCOPE_PATH" == "" ] +then + export AMD_VULKAN_ICD=RADV + echo hud $MANGOHUD + echo "Warning: this is still experimental" + echo "$GAMESCOPE_PATH" -f -b "$@" + "$GAMESCOPE_PATH" -f -b "$@" +else + "$@" +fi