How to Fix Poor Game Performance or Low FPS on Fedora

Fix low FPS on Fedora by installing proprietary NVIDIA drivers or updating Mesa drivers for AMD/Intel GPUs.

Story opener

You install a game through Steam or a native Linux client. You hit play. The menu loads fine, but the moment you step into the 3D world, the frame rate collapses. The audio stutters. The CPU usage spikes while the GPU sits idle. You assume Fedora is just bad at gaming. The reality is usually simpler. Fedora ships with a conservative, open-source graphics stack designed for stability and broad hardware support. Gaming often requires proprietary firmware, closed-source drivers, or specific runtime environment variables that the default installation leaves unconfigured.

What's actually happening

Linux graphics rendering follows a strict pipeline. The kernel DRM driver talks to the hardware. The userspace driver translates OpenGL or Vulkan calls into instructions the hardware understands. The compositor or display server presents the final frames to your screen. Fedora defaults to the open-source Mesa stack for AMD and Intel GPUs. It deliberately excludes the proprietary NVIDIA driver to maintain a fully free distribution. When you run a game that expects a different driver or a specific Vulkan loader configuration, the application falls back to software rendering or crashes.

Think of the graphics stack like a translation office. The game speaks Vulkan or DirectX. The Vulkan loader is the receptionist. It routes the call to the correct translator based on the hardware present. If the receptionist does not have the right translator on file, or if the translator is blocked by security policy, the call goes to a generic software interpreter. That interpreter runs on the CPU. Your frame rate drops to single digits. Your fan speed maxes out. The system is not broken. It is just using the wrong path.

Environment variables like VK_ICD_FILENAMES or MESA_VK_WSI_PRESENT_MODE tell the loader which driver to use and how to handle presentation. Without them, the loader picks the first available driver. That driver is rarely the optimal one for gaming. Fedora also separates user configuration from package files. Config files in /etc/ are user-modified. Files in /usr/lib/ ship with the package. Edit /etc/. Never edit /usr/lib/. The package manager will overwrite your changes on the next update.

Run journalctl -xe before guessing. The x flag adds explanatory text and the e flag jumps to the end. Most sysadmins type journalctl -xeu <unit> muscle-memory style. It shows recent log lines and state in one view. Always check status before restarting services.

The fix

Start by identifying your GPU. Run lspci -k | grep -A 2 -i vga. Note the vendor and the kernel driver in use. The installation path splits here.

NVIDIA GPUs

Fedora does not include the proprietary NVIDIA driver in the default repositories. You must enable the RPM Fusion non-free repository first. This is a one-time setup.

sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm # WHY: Adds RPM Fusion free and non-free repos for proprietary software
sudo dnf install akmod-nvidia xorg-x11-drv-nvidia-cuda # WHY: akmod compiles the kernel module on boot, cuda provides compute libraries

The akmod package handles kernel updates automatically. When you upgrade the kernel, akmods rebuilds the NVIDIA module in the background. You do not need to reinstall the driver after every dnf upgrade --refresh. Secure Boot will block the unsigned module. Disable Secure Boot in your firmware settings, or sign the module yourself. The boot process will hang at Starting Load/Save Random Seed if the module fails to load.

After installation, reboot. The NVIDIA driver installs its own Vulkan ICD file. You rarely need to set VK_ICD_FILENAMES manually anymore. Modern Steam and Proton handle driver selection automatically. If you run a native Linux game that ignores the default loader, you can force the NVIDIA driver with an environment variable.

export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json # WHY: Overrides the Vulkan loader to use the NVIDIA driver exclusively
export __GLX_VENDOR_LIBRARY_NAME=nvidia # WHY: Forces OpenGL to use the NVIDIA GLVND library instead of Mesa

AMD and Intel GPUs

AMD and Intel GPUs use the open-source Mesa stack. Fedora ships a recent Mesa version, but gaming often benefits from the latest drivers or specific Vulkan layers. Update the drivers and install the Vulkan runtime packages.

sudo dnf upgrade --refresh # WHY: Refreshes metadata and pulls the latest Mesa and kernel packages
sudo dnf install vulkan vulkan-intel vulkan-radeon mesa-vulkan-drivers # WHY: Installs the Vulkan loader and GPU-specific ICD files

Mesa handles both OpenGL and Vulkan. You do not need proprietary drivers. If a game uses hardware video decoding, install the VA-API drivers.

sudo dnf install libva-mesa-driver # WHY: Provides hardware-accelerated video decoding for Mesa GPUs

Some older games or specific engines require explicit driver naming for VA-API. Set the variable in your shell profile or game launch options.

export LIBVA_DRIVER_NAME=radeonsi # WHY: Tells VA-API to use the AMD Radeon driver instead of auto-detection

Proton and Steam Configuration

Steam on Linux uses Proton to run Windows games. Proton bundles its own Wine and DXVK versions. Fedora's system libraries can sometimes interfere with Proton's internal runtime. Disable Steam's native Vulkan override if it causes crashes. Open Steam settings, navigate to Compatibility, and uncheck "Force the use of a specific Steam Play compatibility tool" unless you are testing a specific Proton-GE version.

Add launch options to force performance modes. Steam supports Feral GameMode and Vulkan layers natively.

gamemoderun %command% # WHY: Tells GameMode to adjust CPU governor, I/O scheduler, and disable power saving

GameMode requires the gamemode package. Install it once.

sudo dnf install gamemode # WHY: Provides the gamemoderun wrapper and systemd service for performance tuning

Reboot before you debug. Half the time the symptom is gone after the kernel module finishes compiling.

Verify it worked

Do not guess whether the driver loaded. Check the Vulkan loader output. Run vulkaninfo --summary. Look for the GPU0 section. The driverName field should match your hardware. nvidia for NVIDIA cards. radeonsi or iris for AMD and Intel. If it says llvmpipe, the system is using software rendering. Your GPU is not being used.

Check the kernel logs for driver initialization. Run journalctl -k | grep -i nvidia or journalctl -k | grep -i amdgpu. You should see the module loading successfully. If you see a mismatch error, the kernel and driver versions are out of sync.

NVRM: API mismatch: the client has the version 535.129.03, but
NVRM: this kernel module has the version 535.104.12.  Please
NVRM: make sure that this kernel module and all NVIDIA driver
NVRM: clients have the same version.

The conflict is intentional. The kernel updated while the akmod service was still building the new module. Reboot once more. The build completes in the background. The next boot loads the matching version.

Monitor frame times during gameplay. Use steam overlay or mangohud. Install MangoHud for system-wide monitoring.

sudo dnf install mangohud # WHY: Provides a lightweight overlay for FPS, GPU/CPU usage, and temperatures

Run your game with MANGOHUD=1 %command%. The overlay appears in the top-left corner. Stable frame times matter more than peak FPS. Look for consistent green bars. Red spikes indicate driver fallbacks or compositor interference.

Run vulkaninfo first. Read the actual driver name before guessing.

Common pitfalls

The most common issue is mixing X11 and Wayland. Steam and Proton run best under X11 or Wayland with XWayland. Native Vulkan games run natively on Wayland. If you experience input lag or cursor stutter, switch your display server. Log out, click your username, and select "GNOME on Xorg" from the session menu. The session choice persists until you change it again.

Another frequent problem is missing firmware. AMD and Intel GPUs require microcode updates for optimal power management. Install the firmware packages.

sudo dnf install linux-firmware # WHY: Provides GPU microcode and network firmware required by the kernel

Secure Boot remains a blocker for NVIDIA users. The kernel refuses to load unsigned modules. You must disable Secure Boot or enroll your own MOK key. The Fedora installer warns about this during setup. If you enabled it later, the NVIDIA driver will silently fail to load. The system falls back to nouveau. Performance drops to unusable levels.

Environment variables set in .bashrc do not apply to GUI applications launched from the desktop. GUI apps inherit the environment from the display manager. Set variables in ~/.profile or use Steam launch options. The display manager reads ~/.profile on login.

Compositor vsync can cap your frame rate artificially. GNOME enables vsync by default. Disable it in the game settings or use the MESA_VK_WSI_PRESENT_MODE=mailbox variable for lower latency. The mailbox mode presents frames as soon as they are ready instead of waiting for the vertical blank.

Trust the package manager. Manual file edits drift, snapshots stay.

When to use this vs alternatives

Use the proprietary NVIDIA driver when you need maximum performance and CUDA compute support. Use the open-source Mesa stack when you want automatic updates and full Wayland compatibility. Use Proton-GE when the official Steam Proton version lacks a specific DXVK or Wine fix. Use native Linux clients when the developer provides a verified Vulkan or OpenGL build. Stay on the default Fedora graphics stack if you only play lightweight or indie titles that run fine on software fallback.

Where to go next