Skip to content

Releases: Vancete/DittoSR

DittoSR 0.2.4

Choose a tag to compare

@Vancete Vancete released this 03 Nov 11:12

Fixes sparkles in motion at aggressive upscaling ratios, and adds simple settings to the loader.

Changes

  • No more sparkles in motion at high ratios: at high sharpness with aggressive upscaling (Ultra Performance, 3x), the sharpening could push isolated pixels far brighter or darker than their neighbours while moving. Some games showed these as flickering sparkles.

    • The sharpening's strength is now capped at the level of AMD's CAS at its strongest.
    • In motion, a pixel can no longer be pushed beyond the brightness range of its neighbours. Detail between them still gains contrast.
    • Dense grass panning at 3x, sharpness 1: shimmer 7.9 → 3.3, PSNR 25.7 → 31.1 dB. At 2x and at rest the sharpening looks as before.
  • Settings in the loader: Settings now opens a small window with two five-step sliders. The middle step is the default:

    • Sharpness, from Soft to Sharp: 0.2 / 0.4 / 0.6 / 0.8 / 1.0.
    • Frame weight, from Stable to Responsive: 1.0 / 1.5 / 2.0 / 2.5 / 3.0.

    Saving changes only those two keys in the game's dittosr.ini, and F9 applies them in the game without restarting. A value set by hand between the steps stays unless you move its slider. Open dittosr.ini still gives access to every other key.

Install

Extract DittoSR.zip, run DittoSRLoader.exe, pick the game, choose FSR or XeSS under Replace, install, and then pick the same upscaler in the game. An existing dittosr.ini is kept when you reinstall or upgrade.

DittoSR 0.2.2

Choose a tag to compare

@Vancete Vancete released this 03 Nov 09:53

A faster upscale on handhelds, a sharpening you can actually see on small screens, and a better default.

Changes

  • Faster on integrated AMD GPUs (ROG Ally, 780M class): the upscale now loads and encodes each render sample once per group of pixels instead of once per pixel, and its weights are cheaper to compute.
    • About 4-5% faster at 1.5x-2x and ~10% at 3x, measured on an AMD integrated GPU with the FP16 path the Ally uses.
    • The image is unchanged: the same PSNR in every test scene.
    • On large desktop GPUs the difference is negligible.
  • A stronger sharpening, scaled to where you need it: above 0.6, sharpness now goes further. It also grows with the upscaling ratio (1.5x to 3x) and as the output resolution drops (4K to 1080p), where each pixel covers more of the scene and softness shows more.
    • At 4K and 1.5x little changes. At 1080p and 3x, 0.8 now sharpens as 1 used to, and 1 goes well beyond.
    • Below 0.6, and in motion, it behaves as before.
  • Sharpness 0.6 by default: the image as reconstructed. The old default, 0.2, softened the image at rest, which made DittoSR look blurry on handhelds.
    • Reinstalling over an existing dittosr.ini that still has sharpness=0.2 moves it to 0.6. This applies to the loader, install.ps1 and install.sh. Any other value you set is kept.
    • For a crisper image, try 0.7-0.9.
  • The loader has an icon.
  • Test harness: gpu=<index> picks the adapter, for timing on integrated GPUs.

Install

Extract DittoSR.zip, run DittoSRLoader.exe, pick the game, choose FSR or XeSS under Replace, install, and then pick the same upscaler in the game. An existing dittosr.ini is kept when you reinstall or upgrade, apart from the sharpness change above.

DittoSR 0.2.1

Choose a tag to compare

@Vancete Vancete released this 02 Nov 23:01

Better image at the higher upscaling ratios, and a fix for flat colours in games that don't declare their HDR colour.

Changes

  • Above 2x (DittoSR over XeSS Performance 2.3x, Ultra Performance 3x), closer to FSR 3.1 a step higher:
    • At rest: the image converges faster after a cut. On still grass at 3x it goes from 30.8 to 31.9 dB.
    • In motion: moving objects take more of the new frame, so they keep more detail.
    • Sharpening in motion grows with the ratio. At 3x a moving object was 12% softer than at 2x; now the two match. At rest the sharpness setting means the same at every ratio.
    • In our synthetic tests, DittoSR at 3x matches or beats FSR 3.1.5 at 2.3x. Grass shimmers half as much. At 2.3x it beats FSR at 2x in every scene.
    • On a ROG Ally in Cyberpunk 2077, Ultra Performance (3x) looks very close to FSR Performance (2x), at 52 FPS instead of 44.
    • 2x and below are unchanged, and so is the upscale's GPU time.
  • Flat colours fixed: some games pass a linear HDR colour without flagging it as HDR. DittoSR clipped it at 1, so highlights came out flat and dull. The Witcher 3 through OptiScaler was one such case. Now a float input colour is always read as HDR, whatever the flag says (DirectX 12, Vulkan and XeSS). The log shows a line when this happens.
  • Test harness: the moving square in the tiles scene had its motion vectors reversed. The README's moving-object figures still come from that run, before the fix.

Install

Extract DittoSR.zip, run DittoSRLoader.exe, pick the game, choose FSR or XeSS under Replace, install, and then pick the same upscaler in the game. An existing dittosr.ini is kept when you reinstall or upgrade.

DittoSR 0.2.0

Choose a tag to compare

@Vancete Vancete released this 02 Nov 14:29

DittoSR can now replace XeSS as well as FSR, for games whose FSR it can't reach. The upscaler itself is unchanged from 0.1.4.

Changes

  • DittoSR on XeSS (libxess.dll): some games, such as Cyberpunk 2077, build their FSR into the executable. They only query the FidelityFX DLL, so DittoSR never gets to upscale. If such a game offers XeSS, DittoSR can now take XeSS's place on DirectX 12:
    • The game's own XeSS stays behind it, as libxess_orig.dll, and still creates and sets up its contexts as usual. Only the upscale itself runs DittoSR.
    • F10 switches back to XeSS live.
    • Every other XeSS export is forwarded to the game's own, so XeSS on Vulkan and DirectX 11 is unchanged.
    • Tested in Cyberpunk 2077 with XeSS 2.0.1, at 1080p to 4K. It has run only past the game's start-up screens so far, so the image in gameplay is still untested.
  • The loader: Replace FSR / XeSS. Choose which upscaler DittoSR goes in place of.
    • On XeSS, the loader checks the game's libxess.dll for Intel's signature. It also refuses a newer XeSS whose exports the proxy doesn't forward, because the game wouldn't start.
    • When a game has both FSR and XeSS, the loader suggests trying XeSS if DittoSR's indicator doesn't show with FSR.
  • Restoring (the loader, uninstall.ps1, uninstall.sh) also puts the game's XeSS back.
  • Cost on XeSS: each frame runs DittoSR instead of XeSS, so it's usually faster, especially on AMD GPUs, where XeSS takes its slower DP4a path. XeSS's context is still created, so its memory stays allocated.

Install

Extract DittoSR.zip, run DittoSRLoader.exe, pick the game, choose FSR or XeSS under Replace, install, and then pick the same upscaler in the game. An existing dittosr.ini is kept when you reinstall or upgrade.

DittoSR 0.1.4

Choose a tag to compare

@Vancete Vancete released this 02 Nov 13:27

An installer app, SteamOS support and more games recognized. The upscaler itself is unchanged from 0.1.2.

Changes

  • DittoSR Loader (DittoSRLoader.exe): a small window that replaces the PowerShell script. Pick a game from your Steam library or browse to its folder. The loader searches every folder below it for the FidelityFX DLLs and shows what each one is now: AMD's, with its version, or DittoSR's. Then it installs DittoSR or restores AMD's files. It needs no install, and runs on Windows 10 and 11 as it is.
  • OptiScaler: the loader finds OptiScaler's folder by its OptiScaler.ini, and installs DittoSR there as amd_fidelityfx_dx12.dll. Then pick FSR 3.X as OptiScaler's upscaler (not yet tested).
  • More games recognized: some FidelityFX SDK 2.x games have the loader built into their executable, and load amd_fidelityfx_upscaler_dx12.dll by name. The loader and the scripts now replace that DLL in those games, for example RuneScape: Dragonwilds.
  • SteamOS and Linux (Proton): scripts/install.sh and uninstall.sh do the same for Windows games run through Proton. Give them the game's Steam app id or its folder: bash scripts/install.sh <app id> (not yet tested on a Steam Deck).
  • The zip now uses forward-slash paths, so Linux extractors such as SteamOS's Ark create its folders correctly.

Install

Extract DittoSR.zip and run DittoSRLoader.exe. The scripts are still in scripts\, and work with the loader's installs both ways. An existing dittosr.ini is kept when you reinstall or upgrade.

DittoSR 0.1.2

Choose a tag to compare

@Vancete Vancete released this 30 Oct 20:46

Minor sharpness tweaks, both at rest and in motion.

Changes

  • sharpness is now a scale. At rest, 0 is soft, 0.6 leaves the image as reconstructed and 1 sharpens. In motion it now adds a light sharpening instead of fading out.
  • frame_weight above 1 is milder at rest. Only a quarter of the excess applies there, so 3 acts as 1.5. In motion the full value still applies. Higher values at rest only let in the grain of the jittered samples, which looked like oversharpening.
  • New defaults: sharpness=0.2 and frame_weight=2.
  • DirectX 12: the sharpening pass always runs, because it also does the softening at low values. It costs about 0.11 ms per upscale on an RTX 5070 Ti, measured with the harness at its default output size.

Upgrading

Extract DittoSR.zip and run scripts\install.ps1 -Dir "<the game's folder>" again. Your existing dittosr.ini is kept, so set the new values in it by hand if you want them.

DittoSR 0.1.0

Choose a tag to compare

@Vancete Vancete released this 30 Oct 08:31

First release of DittoSR: a light temporal upscaler based on Snapdragon GSR 2, heavily reworked for PC AAA games, as a drop-in replacement for AMD's FSR 3.1 (FidelityFX API).

What's in it

  • One DLL for DirectX 12 and Vulkan. It ships under the names games load: amd_fidelityfx_dx12.dll, amd_fidelityfx_loader_dx12.dll and amd_fidelityfx_vk.dll. AMD's DLL, kept alongside as *.orig.dll, still handles frame generation.
  • Light: about 0.19 ms at 1080p, 0.33 ms at 1440p and 0.75 ms at 4K on an RTX 5070 Ti.
  • For integrated GPUs (DirectX 12): RGB10A2 history, plus an FP16 path that turns on by itself on AMD GPUs.
  • dittosr.ini: sharpness, frame weight (how long the previous frames persist) and debug options (F10 toggle, an on-screen indicator).

Install

  1. Extract DittoSR.zip.
  2. Run scripts\install.ps1 -Dir "<the game's folder with amd_fidelityfx_*.dll>".
  3. Pick FSR 3.1 in the game.

The script backs up AMD's files first. scripts\uninstall.ps1 -Dir ... restores them. See the README for OptiScaler and for the settings.

Known limitations

  • Vulkan: the history is always RGBA16F and the shaders always run in FP32. The game's output must be RGBA16F, RGBA8, RGB10A2, R11G11B10F or RGBA32F.
  • Not yet tested: Linux (Proton), and a Vulkan game with HDR.
  • The offline harness measures the DirectX 12 path only.