Introduction

Welcome!

Goal of this guide is to fix the abysmal performance in The Elder Scrolls IV: Oblivion by using more modern technologies and tweaks, and make you generally aware of its quirks and other potential issues.

The guide is mostly written with an assumption that you've completed Utilities sections from Glory of Cyrodiil.

While the guide is focused on this particular game, most stuff shown here is applicable to other games.

Why?

Let's be honest here, the engine did not age well. The renderer is based on now 20 year old DirectX 9, which fails to fit-in with modern GPUs and Windows. It's extremely inefficient and CPU bound, has glaring issues with display modes, memory handling and overall stability.
As for Bethesda's code - it also fails (horribly) to scale well with modern CPUs, something that you can see even in their latest titles.

In short most performance issues can be summed with two words: CPU bottleneck.

Even with that fact in mind, there are some tweaks to be done on the GPU and presentation side of things that can help with the overall responsiveness of the game, despite not fixing the performance on its own.

Terminology

Things You Should Know

  • Vertical Synchronization (V-Sync) - technology allowing to keep display's scanout and refresh in phase to eliminate screen tearing, at the cost of higher latency.
    (Latency lowers along with refresh rate)
  • G-Sync | Freesync - Variable Refresh Rate (VRR) technologies developed by NVIDIA and AMD respectively. They allow the display to adapt its refresh rate to the framerate, allowing to use V-Sync at arbitrary framerates and reduce its latency[1] .
  • Multiplane Overlays (MPOs) - hardware scanout planes for the GPU. They allow for hardware image composition without any latency or performance penalty (for example displaying windows on top of each other), as well as their hardware scaling and stretching. MPOs are supported since Windows 8.1. Hardware capabilities vary between GPU manufacturers.
  • Input Latency (lag) - time between input event (mouse click, keyboard press) and the event being displayed on the screen. The lower the latency, the more responsive the game feels.
    There are multiple sources of latency, varying from GPU/ CPU usage, display mode, framerate count and many more - most of them are covered in this guide.
  1. Yes, despite popular misinformation, VRR alone doesn't get rid of tearing. It can minimize the rolling tear however, but that varies between displays, and such, it's not a guaranteed feature. Additionally, the latency reduction applies only at framerates below V-Sync window (display's native refresh rate) - if framerate matches the native refresh rate, VRR engages V-Sync emulation.

Technicalities

More text inside. Explains the concept of presentation models and display modes. While not needed to use the guide, it'll help you with understanding why things are the way they are. UI element - Chevron

  • Presentation models:
    • Flip Model - presentation model first added in Windows 7 with D3D9Ex and upgraded in DXGI in Windows 8-10.
      Allows "fullscreen-level" of performance and latency. Has native VRR support in Windowed Mode. Additionally, DXGI version supports tearing (V-Sync off) in Windowed Mode, HDR and has Multiplane Overlay (MPO) support.
      DXGI variant is supported only in D3D10 and upwards[2], enforced only in D3D12, and exists only on Windows 8 and upwards.
      D3D9Ex Flip Model is not feature matched and lacks any DXGI improvements.
      More information here.
    • BitBlt Model - older presentation model used by most applications. While performing similarly to Flip Model in Fullscreen, in Windowed Mode it has worse performance and always-on V-Sync on top of already additional latency caused by additional copy operations due to being software composed.
      The only presentation model for Windowed D3D9 (and lower), but still very common in D3D10 and D3D11 games.

      Vulkan and OpenGL[3] use BitBlt in Windowed Mode.

  • Display modes:
    • Fullscreen Exclusive (FSE) - legacy method of displaying content where application takes complete ownership of the screen. Has slow Alt-Tab due to display ownership transfer, can be problematic if games are badly coded and switch to odd resolutions or refresh rates by default. Can lose color profiles. Despite that, it offers the best feature compatibility and perfomance for games that don't use Flip Model. Deprecated by Fullscreen Optimizations and Windowed with Flip Model for DirectX games.
      Supported by every graphics API other than D3D12
    • Fullscreen with Fullscreen Optimizations (Fullscreen Optimizations) - an update to FSE for DirectX added in Windows 10 1803.
      Converts DirectX applications running in FSE mode into a pseudo borderless mode with Flip Model for faster Alt-Tab, lower latency, better color profile handling, and support for Windowed overlays (Xbox Game Bar, volume and brightness sliders etc.).
      Because of being a Windowed Mode under the hood, it can break e.g. brightness control in old games that modify system gamma instead of window's.
      Enabled by default for every application.
      More information here.
    • Windowed - method of displaying content in a window, always managed by DWM. Due to being a window, Alt-Tab is fast, and color profiles usually don't have any problems. If not using Flip Model, it has worse performance compared to Fullscreen Optimizations | FSE, lacks native VRR support, has increased input latency and uses always-on V-Sync
  1. D3D10 and D3D11 supporting Flip Model doesn't mean that game actually uses it (Unity and UE4 implemented Flip Model support around 2019 - 7 years after its release!).
    Flip Model in Windowed Mode can be enabled in those games using Special K (D3D11 only) or Windows 11's (22H2) Optimizations for Windowed Games (both D3D10 and D3D11)
  2. OpenGL can be displayed using D3D11 thanks to Special K, which enables Flip Model and all its benefits along with HDR.
    Nvidia drivers can also interop Vulkan and OpenGL to DXGI with Flip Model since driver version 526, albeit as the time of writing, OpenGL interop degrades performance compared to Special K's one, while DXVK compatibility requires toggling a flag in Nvidia Profile Inspector - see here.

Oblivion Reloaded Combined

Shader overload

If you use the Glory of Cyrodiil guide, you may skip this section since it's already included there.

ORC fixes shaders and adds missing optimizations to the game engine, one of which is akin to FNV's bModifyDirectXBehavior which allows us to run the game at high native resolutions and with more VRAM usage without crashing due to the VRAM being copied in RAM.

Installation

  1. If they are not already installed, download Oblivion Reloaded Combined 180 and the ORC Custom Configuration.

Graphics Drivers and Windows

Driver Updates

Not much to say here - for the best compatibility and performance, you must be using the newest driver for your graphics card.

You can check what GPU you have by opening Task Manager, and going to the Performance tab - the last GPU on the left pane is your main one.
If you don't see any GPU there, that means your GPU is too old to use DXVK.

This step is mandatory if you want to use DXVK!

Select your graphics card to go the driver download page

Windows Watermark

This part applies only to D3D9 with Fullscreen Optimizations and DXVK with DXGI, since D3D9 Windowed is already in the DWM composed mode, and DXVK uses FSE.
You can ignore this section if you have following GPUs:

  • Nvidia 16 series and newer
  • AMD Vega and newer (single display only)
  • Intel CPUs 8th Gen and newer

Make sure your Windows is activated, otherwise the watermark will kick the game into the DWM composition, which leads to increased latency, worse performance and disables VRR.
If you don't have a GPU with MPO (Multiplane Overlay) support, you can mitigate this by disabling Fullscreen Optimizations.
(Keep in mind that this trick won't work on modern, D3D12 games, so it's still recommended to just activate Windows)

How to check if your GPU supports MPOs:

  1. Type dxdiag into Windows search
  2. Click Save All Information and save the file.
  3. Open the DxDiag.txt file, press Ctrl+F and look for MPO MaxPlanes
  4. If the number is greater than 1, then your GPU has MPO support.

Having the watermark without MPOs will disable VRR and increase input latency and stuttering!

Virtualization

Windows 11 uses virtualization features to increase system and inter-process security. Unfortunately, this can come at a performance cost, especially on lower-end hardware.
I won't be writing on how to disable them, because... Microsoft already made a tutorial about it.

This step is not mandatory, as when it comes to security, it's up to you to decide. Just letting you know that this exists, and even Microsoft acknowledges the fact that it can degrade perfomance.

Game Mode

Windows 10 introduced a feature called Game Mode, which puts the system in a more gaming-friendly state.

Game Mode features:

  • Enables AutoHDR for DXGI based games.
  • Enables VRR optimizations for games using Flip Model [?].
  • Disables Windows Update.
  • Disables notifications.
  • Disables file indexing, if "Respect Device Power Mode Settings" is enabled in Search settings.
  • Sets Game Mode power mode (Requires Balanced power plan to be active).
  • Enables CPU scheduling optimizations for Ryzen CPUs.

Game Mode is enabled by default. If you had it disabled for some reason, you can enable it here.

Display Mode Differences

Presentation Problems

Here's a comparison of three display modes you can use in this game. Situation is problematic mainly due to Vulkan and D3D9 using old presentation models.

Flip Windowed
(DXVK with DXGI)

Fullscreen

BitBlt Windowed
(D3D9, Base DXVK)

  • Best latency
  • Variable Refresh Rate works without any problems
  • Fast Alt-Tab
  • Native support for color profiles
  • Best latency and performance, especially with FSO
  • Variable Refresh Rate works without any problems
  • Fast Alt-Tab
  • Better support for color profiles
  • In-Game brightness settings don't work
  • Nvidia only
  • Worse performance compared to Fullscreen DXVK on Desktops due to being Laptop optimized
  • Compatibility issues with overlays, for the same reason as above.
    (Partially fixed by Special K)
  • Slower and unstable Alt-Tab, especially without FSO
  • Alt-Tab doesn't work at all if ORC's pool change is enabled, unless you use DXVK

  • Color profiles may disengage, especially without FSO
  • Doesn't work at all on hybrid GPU laptops when using DXVK - uses Windowed instead which massively degrades performance. Nvidia GPUs must use DXGI.
  • High input lag and worse performance, especially when not using any FPS limiter and/ or using a laptop
  • V-Sync is always on[4]
  • Variable Refresh Rate doesn't work natively
    • AMD supports Freesync in BitBlt windows that are fullscreen, but latency and performance penalties remain
    • Nvidia's G-Sync support for BitBlt windows is broken[5]
  • In-Game brightness settings don't work
  • Higher memory bandwidth and usage
  1. Despite that disabled V-Sync unlocks the framerate, window itself is V-Synced, so you don't get any benefits.
  2. While AMD enables Freesync for Fullscreen Windowed BitBlt surfaces, Nvidia allows G-Sync to run with any window.
    This is problematic because refresh rate can get synchronized to wrong windows, framerate may break on other displays and display stutters may occur.
    Enabling it globally is a bad idea, because it disrupts normal desktop usage (e.g. screen can sync to sleeping windows).
    It's recommended to use Nvidia Profile Inspector to set G-Sync Application Mode to "Fullscreen and Windowed" in the Elder Scrolls IV: Oblivion profile. This makes Windowed G-Sync run only when the game is running.
    Keep in mind that even with this method, this G-Sync implementation is still buggy - if you get any of the forementioned issues, disable it.

    Never enable Windowed G-Sync globally!

DXVK

Translation Magic

DXVK is an open source Direct3D 9-11 to Vulkan translator project lead by doitsujin and Joshua Ashton. While created mainly for Linux, works unofficially on Windows.
In short, it allows you to run Oblivion using the Vulkan API which has much lower draw call overhead than D3D9, which is one of the main performance limiting factors in this game.

If you use Linux, most of this is irrelevant, since Proton on Linux obviously uses DXVK already.

Things about DXVK you must acknowledge:

  • DXVK improves performance in mainly draw call (CPU) bound scenarios (e.g. draw distance), and usually doesn't help much in GPU bound ones (e.g. resolution)

    • It is possible that DXVK won't change anything for you, or even make things worse

  • DXVK 2.0 and higher require:
    1. A Vulkan 1.3 driver
    2. A VK_EXT_robustness2 driver extension
    Generally almost all modern (2015+) GPUs support them, but if you'd like to sanity check yours, use GPU-Z, and go to the Advanced tab -> Vulkan section.
    Those functionalities are a part of your GPU driver, so make sure you have the latest available version.
    Keep in mind that even with those conditions met, DXVK 2.0+ may not work correctly for you, due to its Linux-based nature.
  • DXVK's GPU compatibility varies between manufacturers

    • Nvidia GPU laptops must use the DXGI interop (see below).
      Using it on desktops is not required, but highly recommended for the most optimal experience

    • AMD GPUs are more prone to shader issues on Windows (situation is completely reversed on Linux)
      AMD dGPU laptops lacking direct dGPU output can not use DXVK due to presentation issues. (Integrated graphics work fine.)
      (Vulkan runs in a broken state, GPU is underutilized and can't use proper fullscreen mode - on Nvidia this is resolved by using DXGI presentation, AMD lacks such feature).

    • Intel GPUs from 6th Gen and newer can work provided you have newest drivers installed.
      DXVK is broken past the 1.10.1 version.
      Don't expect a big performance difference, if any, since the game will still be mostly GPU bound.

      Arc GPUs should work fine, but are untested.

  • Oblivion has some known shader issues or quirks. They are not guaranteed to happen (getting rarer with DXVK updates), but they can occur:

    • Broken water reflections (rare, most reports come from older AMD GPUs)
    • Broken lights and artifacting (rare, most reports come from older AMD GPUs)

Due to DXVK's nature it relies on shader cache, which is compiled during the first use of that shader.
Because of that you can experience increased short stutter at the beginning of your playthrough.
This is completely normal, and will not reoccur after compilation has finished.
DXVK-GPLAsync patch by Ph42oN and Sporif alleviates this problem thanks to making the compilation asynchronous

DXVK 2.0 and newer precompile shaders on launch, although at the time of writing, on Windows, this feature is Nvidia only. Ph42oN's async patch uses both methods, so it's safe to use on all GPU manufacturers.

Installation

  1. Download the latest DXVK version from Nexus.

    GPUs lacking VK 1.3 support or having issues with 2.0, must use the 1.10.3 version.

    Intel GPUs need to use the 1.10.1 version.

  2. Extract archive contents into your Oblivion root folder.

Enabling Flip Model (DXVK with DXGI)

At the time of writing, this feature is Nvidia only!

Nvidia resets those settings on driver updates! Make sure to reapply them after updating.
Thanks Nvidia!

Nvidia's drivers have ability to interop Vulkan to DXGI allowing for Flip Model in Windowed mode, which has HDR and VRR support, and better latency.
Be wary that current implementation of the interop will degrade performance on PCs.
  1. Enable Windowed mode in Oblivion.ini.
  2. [Display]
    bFull Screen=0


    It's recommend to use Special K, since it configures the interop automatically and applies other compatiblity fixes.
    It also resolves the settings issue mentioned above.

    In case you don't want to, or can't use Special K, you can follow the steps below.

  3. In Nvidia Control Panel, in 3D Settings, add Oblivion.exe as profile and set Vulkan/OpenGL present method to Prefer layered on DXGI Swapchain
    You can use global profile if you want to use Flip Model in all OpenGL and Vulkan titles.
  4. If you don't see those options, then your driver is not up to date!

  5. Press Apply changes and exit.
  6. Download Nvidia Profile Inspector.
  7. Extract the archive and run the program.
  8. Enable "Show unknown settings from NVIDIA predefined profiles" in the top bar (penultimate button).
  9. Press Ctrl+F and paste OGL_DX_PRESENT_DEBUG.
    1. Select the setting and click on Show bit value editor on the top bar (last button).
    2. In the first column, check bit #00 and #19.

      These flags enable DXVK support and fix forced promotion to FSE in some games.

    3. Click Apply & Close
  10. Click Apply changes in the top right and exit.
  11. Install OneTweak to disable window borders.

Recommended FPS Limiters and Their Configurations

(Not) Pushing the Limits

Limiting framerate is very important for overall stability.
First and foremost, if you are using a good limiter, you'll be implementing correct framepacing, which is the most important think for the overall feel of fluidity.
More advanced limiters can also reduce latency or power consumption (it's difficult to have both).

Always limit your framerate to an amount you can actually achieve, otherwise you won't get any benefits!
Letting your GPU overwork itself has a big latency impact, so try to cap your framerate at such value, where your GPU doesn't sit at constant 100% usage.
Running at smoother, lower framerate is always better than high, albeit laggy and stuttery one.

Recommended Setups

Recommended configurations based on selected display scenarios:
  • V-Sync

    • Framerate must be capped slightly below refresh rate to reduce latency.
    • V-Sync on its own is NOT a limiter. Using it as one introduces a massive latency penalty.

      This workaround applies only to RTSS and D3D9 Special K.
      (Not needed if you use Special K + DXVK with DXGI)

      Driver limiters are not precise enough to pull this off without risking stutter.

  • G-Sync | Freesync

    • V-Sync must be enabled, in order to fully get rid of tearing.
    • Framerate must be capped below refresh rate, in order for VRR to not disengage and fallback to V-Sync, as this causes a very big increase in latency.
  • No V-Sync

    • No special prerequisites.

So many options...

Limiters presented here are ordered by their precision, from best to acceptable. The better ones are smoother and can provide better latency reductions, but may have some compatibility issues.

Enter your refresh rate here for automatic calculation of FPS limits. You can find your exact refresh rate here.

Applied!

If you don't use, or not have VRR, it's best to limit your framerate to fractions of your refresh rate. (30 at 60hz, 72 at 144hz, etc.)

Click on the cards below to show the instructions for each limiter.

Special K

Special K is a mod by Kaldaien focused mainly on fixing performance in games and implementing HDR.
Its list of features is too long to write here, but the most important one used here is its incredibly versatile limiter and if using DXGI, HDR and (almost) lagless V-Sync. UI element - Chevron

Warning!

  • Special K may conflict with Riva Tuner. If the game crashes or SK doesn't show up in game, in RTSS settings, enable Use Microsoft Detours API hooking, or set injection delay to 30000
  • Special K's interface in D3D9 breaks water reflections when visible. Simply not having Special K's interaface visible fixes the issue.
  • Special K's Vulkan support is currently limited to Nvidia GPUs.

Calculated values are not provided because Special K already does that automatically, and with higher precision.

Installation

  1. Download the Special K Archive from the Stable section, then extract SpecialK32.dll to your Oblivion root folder and rename it to dinput8.dll
  2. Download the archive with preconfigured settings and extract its content to your root folder.
  3. If you use DXVK, on the first launch Special K will ask you to enable DXVK support/ Vulkan bridge. Click Yes and relaunch the game if needed.

  4. Launch Oblivion and press Ctrl + Shift + Backspace to enter Special K Control Panel.
  5. Enable the Framerate Limit by ticking the checkbox, then right click on the bar (not graph) next to it:
    • No V-Sync

      In right click menu select your refresh rate
      Click on Advanced and select the Latent Sync (VSYNC -Off-) mode

      Optional - Configuring Latent Sync to get rid of tears UI element - Chevron

      It's best to do this in-game!

      If you use Fullscreen Mode without V-Sync or DXVK with DXGI and have stable framerate, in limiter's right click menu select Latent Sync

      In Latent Sync menu, select Visualize Tearlines and use Sync offset slider so the tearing is not visible.
      Disable Visualize Tearlines when you decide you are satisfied with result.
      It is possible that you won't see tearing out of the box.

      Laptops with dedicated GPUs that do not have MUX switches for a direct dGPU<->Display connection can have problems with hiding the tearline.
      While it may be impossible to hide it completely, latency benefits are still applicable.

      Some monitors have too small vertical blanking, so it's possible to not fully hide the tearing without timing modifications - if you wish to pursue this topic, create a custom resolution with increased Vertical Blanking in your driver or with Custom Resolution Utility

      It's best to first test the resolution in the driver settings, otherwise you may lock out your display

    • V-Sync

      The subtraction is needed only for D3D9!
      The preset included with the guide already optimizes V-Sync for DXGI, so you only need to select the limit.

      In right click menu select your refresh rate, then Ctrl-Click on the Framerate Limit bar and subtract 0.05

    • VRR + V-Sync
      Included INI preset enables automatic VRR detection which takes care of everything.
    ...if you want to enter a custom value, Ctrl-Click on the bar. You can also drag your mouse on it.
  6. Your configuration should look similar to this: (picture shows V-Sync configuration on DXVK + DXGI)
    Screenshot showcasing Special K's control panel

RivaTuner Statistics Server

Riva Tuner Statistic Server by Unwinder is probably the most famous FPS Limiter and OSD software, thanks to its performance, compatibility and power usage. UI element - Chevron

Installation

  1. Install and launch RTSS. Open your System Tray (the triangle pointing upwards on the taskbar) and click on the RTSS icon to open it
  2. Press green Add button and select Oblivion.exe
  3. Set Application Detection Level to Low
  4. Set Framerate Limit to:
    • No V-Sync

      (RefreshRate)

    • V-Sync

      (RefreshRate - 0.05)

    • VRR + V-Sync

      (RefreshRate * (1 - RefreshRate * 0.00028))

    ...or lower
  5. Enter settings using Setup button and:
    • Enable Passive Waiting
    • Set framerate limiter to Front Edge Sync
  6. Enable Start with Windows or launch RTSS everytime before you play
  7. Your configuration should look similar to this:
    Screenshot showcasing RTSS' settings

NVIDIA | AMD driver

The most basic limiters from this list, but definitely the easiest and fastest to set up!

NVIDIA UI element - Chevron

Configuration

  1. Open NVIDIA Control Panel, go to Program Settings
  2. Select Oblivion.exe. If it's not present, add it manually
  3. In settings, set Max Frame Rate to:
    • V-Sync | No V-Sync

      (RefreshRate)

    • VRR + V-Sync

      (RefreshRate * (1 - RefreshRate * 0.00028))

    ...or lower
  4. Click Apply

Your configuration should look similar to this:
Screenshot showcasing Nvidia Control Panel settings

AMD UI element - Chevron

Configuration

  1. Open AMD Software: Adrenaline Edition, go to Gaming tab
  2. Select Oblivion or search for it in the bar. If not present, click on the three dots and add the executable manually.
  3. In games's menu, enable Radeon Chillℒ️ and set Max FPS to:
    • V-Sync | No V-Sync

      (RefreshRate)

    • VRR + V-Sync

      (RefreshRate * (1 - RefreshRate * 0.00028))

    ...or lower

Your configuration should look similar to this:
Screenshot showcasing AMD Software settings

FAQ

Are these questions really frequent?

  • I can't use DXVK, and I need to Alt-Tab - am I out of luck?

    Yeah, all you can do is download OneTweak and use the legacy Windowed mode.
    Also enable Windowed mode itself in Oblivion.ini (OneTweak itself doesn't change display modes)

    [Display]
    bFull Screen=0

  • Any way change brightness in Windowed Mode?

    You can use ReShade to change the gamma.
  • Do texture mods really have an impact on performance?

    Not directly, no. As long as you don't go over your VRAM budget and use ORC's memory pool patch you'll be fine. If you run out of VRAM, you'll either crash, or experience massive stutters.
    What is guaranteed from higher resolution textures is increase in their load time. This can translate into longer stutter periods on cell loads.
  • DXVK is breaking HDR after exiting the game!

    Yes, unfortunately due to how FSE works, in addition to lack of native Windows support from DXVK, it doesn't properly handle the HDR API.
    If you have a Nvidia GPU, use DXVK with DXGI (You'll get actual HDR too!). Otherwise, normal Windowed.
  • Is dgVoodoo 2 a viable alternative to DXVK?

    No. While it is true that you'd gain Windowed mode with Flip Model and HDR from it, in contrast to DXVK you are guaranteed to get lower perfomance due to the translation overhead.
    If you can handle the performance loss, sure go ahead.

Finish

The End?

Congratulations! You've made it through! I hope this guide has helped you making Oblivion a smoother experience.
If you have any issues, questions, critiques or recommendations hit us up on Discord - wall_sogb and VishVadeva.
You can also find us on ModdingLinked, xNVSE, Tale of Two Wastelands servers.

I recommend checking this guide from time to time - We're not done yet.

If you found this guide helpful, share it with others or support me on Ko-Fi or Patreon

Things worth reading

Here are some links to stuff that I recommend checking out:
  • PCGamingWiki - Great website, contains really helpful info about games, patches, fixes and other PC gaming related stuff.
  • BlurBusters - Amazing website by Mark Rejhon focused on displays, latency and image quality. Really worth checking it out if you are a geek for these things.

Changelog

Changes are documented on the commit history