fsr4-shader-performance-overrides
Makes AMD FSR 4.1.1 upscaling faster on Radeon graphics cards, on Windows and Linux, by replacing FSR 4's slowest shaders with faster ones. One file to swap, nothing else in the game changes.
Quick start
[!WARNING]
Never use this in online games or in any game with anti-cheat. These are modified game files. Anti-cheat
software can treat a changed DLL or changed shaders as tampering, and that can get an account banned. Use it in
single-player games only.
1. Download the zip for your graphics card.
| Your graphics card | Download | |---|---| | A Radeon RX 7000 or RX 6000 graphics card: the name has "RX" and a four-digit number, such as RX 7800 XT or RX 6700 XT. This includes gaming laptops with their own RX chip (RX 7700S, RX 6700M and the like) | fsr4.1.1-cyboman.zip | | Graphics built into the processor: most laptops, mini PCs and handhelds. The name is "Radeon Graphics" or "Radeon" with a three-digit number, such as Radeon 780M or 890M; also the Steam Deck | fsr4.1.1-igpu-cyboman.zip | | Radeon RX 9000 | not for these cards: they run a different FSR 4. Do not install it there. |
Not sure which you have? In Windows, open Task Manager, go to Performance and look at the GPU's name; on a laptop with two, the RX one is the one games use.
2. Choose a version. Each zip holds two folders with one file each:
| Folder | Speed | Picture |
|---|---|---|
| exact | faster than AMD's | the same as AMD's, byte for byte |
| lossy | faster again | very close to AMD's, but not the same. Read WARNING.txt in that folder first |
If you are not sure, take exact.
3. Put the file in the game's folder. The game must already run FSR 4.1.1, for example through OptiScaler.
- Find
amd_fidelityfx_upscaler_dx12.dllin the game's folder (often next to OptiScaler) and
amd_fidelityfx_upscaler_dx12.dll.orig. It must be version 4.1.1.2740.
- Copy the
amd_fidelityfx_upscaler_dx12.dllfrom the folder you chose into its place.
4. Check that it worked. Open OptiScaler's overlay in the game. The FSR version reads
4.1.1-cyboman (or 4.1.1-lossy-cyboman; with the other zip 4.1.1-igpu-cyboman or
4.1.1-igpu-lossy-cyboman), and the upscaler time is lower than before.
[!NOTE]
Two settings where you will see little or no gain:
- FSR's debug view (the overlay that draws FSR's watermark and debug panels). The faster shaders do not cover the
debug versions of FSR's last pass, so AMD's own slow one runs and most of the gain is gone. Switch the debug view off
to measure or to play.
- Ultra Performance mode. The lossy DLL does not skip frames there, so it is no faster than the exact DLL. The
exact DLL's own gain still applies.
To undo it, delete the file and rename the .orig file back.
What to expect
- The gain depends on the output resolution. It is largest at 4K. At 1440p and 1080p the exact
- It depends on your graphics chip, too. The numbers here are from one card, a Radeon RX 7800 XT. Testers with
- It only shows when the graphics card is the limit. If the processor limits your frame rate,
- The exact DLL cannot change the picture. Its output was compared with AMD's byte for byte at
- The lossy DLL trades a little accuracy for speed. It runs FSR 4's neural network on every
One card, one game, as an example of the best case: a Radeon RX 7800 XT, Shadow of the Tomb Raider's benchmark, 4K output, FSR 4.1.1 Balanced. Your card and your game will give other numbers:
| | FSR 4 time per frame | Frame rate | Picture | |---|---|---|---| | AMD's shaders | 4.16 ms | 97 FPS | the reference | | Exact | 2.99 ms (−28%) | 109 FPS (+12%) | identical | | Lossy | 2.15 ms (−48%) | 120 FPS (+24%) | still picture within 0.2 dB of AMD's |
More games and resolutions: all results.
New in this release
### Help test it: the timing kit
Download the Windows timing kit (experimental, 110 MB): unpack, double-click
fsr4time.exe, wait about five minutes. It times FSR 4 with AMD's shaders and with these DLLs on
your graphics card, checks that the exact DLL gives AMD's picture on your machine, and offers to
send the result. **Nobody has measured these DLLs on Windows yet; your run would be among the
first.** It is not limited to Radeon: the DLLs should run on any graphics chip whose driver supports DirectX 12 with Shader Model 6.6,
which includes GeForce and Intel Arc. People use them there, nothing has been measured, and a
result from such a card would be the first. On Linux and the Steam Deck:
the Linux kit.
What the kits do
The technical pages behind this release:
- Particles, sparks and embers on skipped frames: what went wrong, the three tests that fix it, what was tried and rejected, what it costs
- Exact and lossy compared: every measurement of the lossy DLL against AMD's, with comparison pictures of the previous release and this one
- Why weight folding was taken out: the record of the experiment the lossy DLL no longer uses
- The Windows DLL's last pass, and code left in the files: what changed inside the DLLs, how it compiles for each chip, timed alone and as a whole upscaler
- Which download for which graphics chip: how four builds became two, and the RX 6000 fix that is now in both
- Frame pacing with the lossy DLL: what the alternating frame cost means for frame caps, V-Sync and latency
- The timing kits: what the Linux and Windows kits measure, and how to read their summaries
The lossy DLL shows particles properly, and is closer to AMD's picture
- Particles, sparks and embers no longer flicker or move at half the frame rate. Games draw
- The still picture is closer to AMD's. The lossy DLL no longer simplifies the neural
- It costs about 2% of the previous lossy DLL's speed (Shadow of the Tomb Raider, 4K: 120 FPS
The same skipped frame with the previous release and with this one, enlarged five times:
Enlarged like this, this release's particles are a little blocky and have thin seams; at normal size and in motion that was not visible in the games it was checked in. More comparisons, and what the lossy DLL still does worse than AMD's: exact and lossy compared.
A possible speed-up on Windows, and how to help find out
Two things changed inside both DLLs, with the same picture as before:
- The last pass writes all three of its images in ordered rows. The previous DLL did that for
- The code our rewrites replaced is gone from the file. The previous DLL left it in for the
Both can make the DLLs faster on Windows, where AMD's own driver compiles these shaders. How much
depends on what that driver did with the leftover code and the scattered writes, and nobody has
measured it yet. That is what the Windows timing kit is for: it times the DLLs on
your graphics card, and the previous release's too if you put its file into a folder of its own
under dlls.
What is known so far, from one RX 7800 XT on Linux with Proton:
| | Result | |---|---| | The last pass, timed alone | faster: 0.42 → 0.30 ms at 1440p; at 4K steady at 0.66 ms where it varied between 0.69 and 0.90 | | The whole upscaler through the DLL, as a game runs it | the same as the previous DLL: 3.16 ms at 4K, 1.46 against 1.43 ms at 1440p | | On Windows, any graphics card | not measured yet |
Proton's driver was already discarding the leftover code, so that machine cannot show what Windows will do.
Two downloads instead of eight. One zip for Radeon RX 7000 and RX 6000 graphics cards, one for graphics built into the processor; each holds the exact and the lossy DLL. The separate RX 6000 builds are gone: their fix is in both DLLs now. It cost nothing measurable here; on Windows with an RX 7000 card that has not been measured either.
Earlier releases: changelog.
Will it work for me?
| Graphics card | Which zip | Status |
|---|---|---|
| RX 7900, 7800, 7700, 7600 (desktop RDNA3) | fsr4.1.1-cyboman.zip | measured here on an RX 7800 XT; testers report large gains on Windows |
| RX 6000 (RDNA2) | fsr4.1.1-cyboman.zip | runs, and includes the fix for the shimmering these cards show with AMD's file; about 30% at 4K, a few percent at 1440p and below (tester reports) |
| Radeon 780M, 890M and other integrated graphics, Steam Deck | fsr4.1.1-igpu-cyboman.zip | experimental: few reports, small gains |
| RX 9000 (RDNA4) | none | no: a different FSR 4 runs there (open for someone to pick up) |
| Any other graphics chip: Nvidia GeForce, Intel Arc and Intel integrated graphics, older Radeon | fsr4.1.1-cyboman.zip; for a chip built into the processor try fsr4.1.1-igpu-cyboman.zip first | should run, untested. FSR 4.1.1's shaders are ordinary DirectX 12 compute shaders: they need Shader Model 6.6 with 8-bit integer dot products, 16-bit types and wave operations, which current drivers from all three makers provide. Users report the DLLs running on a GeForce laptop and on an Arc A770. Nothing has been measured there: the rewrites were made for Radeon chips, so they may or may not be faster than AMD's shaders, and "same picture" has only been verified on Radeon. A timing-kit result tells both |
You also need a DirectX 12 game in which FSR 4.1.1 already runs, with
amd_fidelityfx_upscaler_dx12.dll version 4.1.1.2740.
Both DLLs have AMD's graphics-card check lifted (AMD's own file offers this FSR 4 only on desktop RX 7000 cards), so they start on any card whose driver can run the shaders: DirectX 12 with Shader Model 6.6. That is also why they must not go on an RX 9000 card, where a different FSR 4 would then start as well.
If the first zip is slower than AMD's file on a small RX 6000 card, try the second one: it differs only in one shader that is built smaller. Details: GPU support.
Linux: a launch option instead of the DLL
On Linux you can leave AMD's DLL in place and give the game the replacement shaders directly.
- Download or clone this repository.
- In Steam, add this to the game's launch options (keep anything already there in front of
%command%):
VKD3D_SHADER_OVERRIDE='Z:/path/to/fsr4-shader-performance-overrides/prebuilt' %command%
Z: is how Proton sees your Linux root, so Z:/home/you/... is /home/you/.... For the lossy
version use the folder prebuilt-lossy instead, after reading the WARNING.txt in it.
- The game must be using AMD's original DLL. The launch option does nothing while a DLL from
- The version name does not change with the launch option; OptiScaler shows plain
4.1.1.
- The prebuilt files do not fit every setup. They were made on an RX 7000 desktop card. On
./check_prebuilt.sh tells you
whether the prebuilt files fit.
If it does not get faster: Linux guide.
More about the files
Each DLL is AMD's own file with the rewritten shaders swapped in and the version name changed.
How that is done, and how to build it yourself: dll/. There is also a ReShade add-on
that does the same without touching the DLL: windows/.
In some games OptiScaler's upscaler time is only reliable with the frame rate uncapped. If nothing changes at all, check that the game really runs FSR 4.1.1 with AMD's DLL version 4.1.1.2740; other versions have different shaders. See shader variants.
Good to know
- Nothing else changes. No game files are edited, and the output was compared byte for byte
- Game and OptiScaler updates can put the original DLL back; the launch option keeps working.
- Never in online games or games with anti-cheat. This changes the shaders the game renders with, and anti-cheat
- Linux: do not set
RADV_PERFTEST=cswave32for a game that runs FSR 4; it adds about 1.1 ms.
More
| Page | What is in it | |---|---| | All results | every game measured, benchmark pages with screenshots | | Linux guide | requirements, building your own files, troubleshooting | | Making a shader dump | step by step, for reporting a wrong image or a missing speedup on Linux | | Timing kit | a download for Linux and the Steam Deck that times every FSR 4 pass on your GPU, no game needed (new; five GPUs so far) | | GPU support | which download fits which GPU, integrated GPUs, RX 6000 cards and their shimmering fix | | Shader variants | which versions of FSR 4's shaders are covered, and what to do if your game's is not | | How it works | what the rewrites do, where the time goes, what else was tried | | Exact and lossy compared | what the lossy DLL changes in the picture, with measurements and crops | | Frame pacing with the lossy builds | what the alternating upscaler time means for frame caps, V-Sync, latency and overlay readings | | RDNA4 | what is known about the FP8 model on RX 9000 cards; open for anyone who can test on one | | Earlier releases | what each release changed, newest first | | Research | the probes, data and scripts behind all of it |
Star History
Credits and license
The postpass rewrite is adapted from tools/fsr4cap/postpass_lds.py in
bbport, a native Linux port of Bloodborne whose
author found the slow store pattern and wrote the original rewrite for that project's own FSR 4.1.1
runtime. This repository ports it to the shaders vkd3d-proton generates, so it works in ordinary
games.
The scripts are licensed under the GNU GPL v2 or later, like the project they derive from. See
LICENSE. The prebuilt shaders are modified versions of AMD's, distributed under the same
license together with AMD's notice; see prebuilt/NOTICE.md. Not affiliated
with or endorsed by AMD.
This repository is maintained independently. If this project has provided value to you, and you want to help support the author, consider formalizing your support with a voluntary micro-donation:
