Skip to content

Releases: raspy-corroded3/borderlands2-native-hdr

bl2hdr v1.0.1-beta.1

bl2hdr v1.0.1-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Oct 12:46

bl2hdr 1.0.1-beta.1

HDR settings in the game's own menu, a separate cutscene brightness, and a clean exit instead of a frozen
game after a graphics-driver crash.

New

  • HDR settings page: Options > Video > HDR (the row below Window Mode). It has:

    • HDR Off / On
    • Game brightness, HUD and menu brightness, Cutscene brightness (80–500 nits)
    • Peak brightness (400–2000 nits)
    • Highlight strength (0–200 %)

    Changes apply immediately and are saved to bl2hdr.ini. Works with keyboard, controller and mouse.

  • Cutscene brightness, new setting [hdr] VideoWhiteNits. It defaults to the HUD brightness, so
    nothing changes until you set it.

  • Graphics driver crash (TDR): 9on12 cannot recover a lost GPU device, and the game used to freeze.
    bl2hdr now shows a message and closes the game. New setting [d3d9] OnDeviceRemoved: message
    (default), exit (close without a message) or continue (old behaviour).

Screenshots

Options → Video: the HDR row, below Window Mode The HDR settings page
Video options with the HDR row selected HDR settings page: HDR on/off and brightness sliders

Fixes

  • Some cutscenes were brighter than in the original game (e.g. the character trailers). The game's
    video shader doesn't clamp its colours. The original 8-bit output did that by itself, bl2hdr's 16-bit
    output didn't. Cutscenes now look like the original, at your cutscene brightness.
  • Frame captures (a developer feature) failed after some resolution changes.

Checked, no change needed

  • Cel-shading outlines: unaffected by HDR.
  • ECHO log videos (the hologram): look exactly like the original.

Upgrading

Replace d3d9.dll. Your bl2hdr.ini keeps working: the new keys use their defaults when missing. The
HDR settings page writes the brightness values into it for you. To see all options with comments, compare
with the new bl2hdr.ini.

Known issue: "ran out of video memory" after long sessions

Unchanged from 1.0.0-beta.2. BL2 is a 32-bit game, and 9on12 uses about 300 MiB more of its 4 GiB
address space than plain D3D9. If the game stops with this message, set PoolSize=256 under
[TextureStreaming] in Documents\My Games\Borderlands 2\WillowGame\Config\WillowEngine.ini.

Testing

Tested on Windows 11 with an NVIDIA RTX 3070 Ti: automated in-game runs (cutscenes and ECHO logs played
and compared with the original output, simulated GPU device removal, menu navigation, resolution
changes), no errors, frame rate unchanged. The menu was also checked by hand with mouse and controller.
Not yet tested on AMD/Intel GPUs or laptops with two GPUs. Reports are very welcome.

Full changes: v1.0.0-beta.2...v1.0.1-beta.1


Built by GitHub Actions from tag v1.0.1-beta.1 (commit c420695).

Install: copy d3d9.dll and bl2hdr.ini into Borderlands 2\Binaries\Win32. See README.md.
Verify: gh attestation verify d3d9.dll --repo raspy-corroded3/borderlands2-native-hdr and SHA256SUMS.txt.

VirusTotal

File Detections Report
d3d9.dll 2 / 71 engines live report
bl2hdr-v1.0.1-beta.1.zip 0 / 67 engines live report

Scanned automatically by the virustotal workflow on 2026-10-07. Detections can change over time: the live reports show the current result.

Flagged by:

  • d3d9.dll - Cynet: Malicious (score: 100)
  • d3d9.dll - APEX: Malicious

bl2hdr is a proxy DLL that hooks game functions, which some heuristic engines flag. The DLL is built by GitHub Actions from this repository with a verifiable build attestation (see above).

bl2hdr v1.0.0-beta.2

bl2hdr v1.0.0-beta.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Oct 22:09

bl2hdr 1.0.0-beta.2

A robustness release. The HDR picture itself is unchanged. This version fixes the problems found in a
full code review of 1.0.0-beta.1 (four passes: crashes and security, logic and races, performance,
polish; plus MSVC /analyze, clang-tidy and flawfinder).

Fixes

  • No more permanent black screen after alt-tab, minimize or a resolution change. Before, any failure
    in bl2hdr's output turned it off for the rest of the session, and under 9on12 the game's own fallback
    never reaches the screen. Output now recovers by itself. Failures retry with a growing delay, and a
    device reset retries at once.
  • GPU crash / driver reset (TDR) handled. Before, a lost GPU device caused a 2-second stall every
    frame. Now it is detected and logged once with the reason, and bl2hdr's output stops cleanly.
    Known limit: 9on12 cannot recover a lost D3D12 device, so after a driver reset the game itself still
    has to be restarted.
  • Laptops with two GPUs now use the dedicated one. 9on12 used to pick the system's default adapter,
    which is often the integrated GPU. A new setting, [d3d9] Gpu, chooses it: high-performance
    (default), minimum-power or system (the old behaviour).
  • Shader identity fix. A rare case where another shader could receive bl2hdr's HDR parameters (after
    the game freed and reused a shader's memory) can no longer happen.
  • Safer game hooks. bl2hdr now hooks the game's script engine only when every byte pattern matches
    exactly as often as in the verified game build. On an unknown build it turns its hooks off instead of
    guessing. The HDR row in Options > Video no longer disappears for the whole session if the game's
    menu functions were not loaded yet: lookups are retried.
  • Memory-safety hardening. Allocation and memory-protection results are checked. Every read or write
    of game function parameters is bounds-checked against the game's own metadata.
  • Thread-safety fix in the internal hook lookup: the cached vtable and function are now always read
    as one pair.
  • Bad pixels: negative or NaN colour values from the game are clamped to black instead of reaching
    the display.

Diagnostics

  • With [debug] StatsIntervalSec set, the log now shows the process's free address space, its
    largest free block, private memory, video memory against its budget, and what the used address space
    holds (DLL images, mapped files, private memory).

Known issue: "ran out of video memory" after long sessions

BL2 is a 32-bit game, and 9on12 uses about 300 MiB more of its 4 GiB address space than plain D3D9. If
the game stops with this message, lower the texture pool in
Documents\My Games\Borderlands 2\WillowGame\Config\WillowEngine.ini: under [TextureStreaming],
set PoolSize=256. Details are in the README.

Upgrading

Replace d3d9.dll. Your bl2hdr.ini keeps working, because the new Gpu key defaults to
high-performance when it is missing. To set it explicitly, copy the Gpu= lines from the new
bl2hdr.ini.

Testing

Tested on Windows 11 with an NVIDIA RTX 3070 Ti (single GPU): automated in-game runs with no errors,
frame rate the same as 1.0.0-beta.1, and forced output failures and a simulated device removal to test
recovery. Not yet tested on a laptop with two GPUs or on AMD/Intel GPUs. Reports are very welcome.

Full changes: v1.0.0-beta.1...v1.0.0-beta.2


Built by GitHub Actions from tag v1.0.0-beta.2 (commit 493907f).

Install: copy d3d9.dll and bl2hdr.ini into Borderlands 2\Binaries\Win32. See README.md.
Verify: gh attestation verify d3d9.dll --repo raspy-corroded3/borderlands2-native-hdr and SHA256SUMS.txt.

bl2hdr v1.0.0-beta.1

bl2hdr v1.0.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Oct 18:07
611c3ac

Built by GitHub Actions from tag v1.0.0-beta.1 (commit 611c3ac).

Install: copy d3d9.dll and bl2hdr.ini into Borderlands 2\Binaries\Win32. See README.md.
Verify: gh attestation verify d3d9.dll --repo raspy-corroded3/borderlands2-native-hdr and SHA256SUMS.txt.