Good evening everyone, long time no see. I hope you’re all doing well.
Ok, so 2026 is going to be a big year for displays if CES 2026 is anything to go by. We saw TCL show off 9000-nit TVs, Samsung and LG show off proper RGB subpixel technology for QD-OLEDs and OLEDs respectively, and of course, we saw Nvidia release G-Sync Pulsar—the ultimate conclusion to LCD backlight strobing for motion clarity.
With all that in mind, it gave me enough enthusiasm (along with a recent Retro Crisis video showing the pain of setting up HDR) to revisit my HDR implementation and upgrade it.
I set out with a number of goals, which I have now implemented:
1. Simplify the end user experience:
Previously, users had a “three-body problem” to solve in the HDR menu by balancing Peak Luminance, Paper White Luminance, and Contrast. I have done away with Contrast as it is not needed. Users now just set a one-time Peak Luminance value and from then on just use Paper White as their overall brightness control.
Also, previously when users went into native HDR shaders, they were expected to change yet another set of shader-internal parameters that seemingly conflicted with the menu settings, adding another layer of confusion. I’ve exposed the HDR menu settings to the custom shaders so this should no longer be an issue, once the custom shaders have been updated to take advantage of the new features (I will be updating Sony Megatron soon!).
2. Improve quality:
It’s been noted for a long time that there are better ways to do HDR. The previous implementation in RetroArch actually dated back nearly a decade (although it didn’t appear in RetroArch until four years ago). That was in the early days of HDR, and different constraints based on displays at the time were taken into account that now don’t exist.
The old implementation had an artificial “elbow” in the mapping: below 0.5, the SDR image was mapped linearly to HDR space, and above 0.5, the highlights were expanded out to the rest of the HDR range. This effectively only dealt with highlights. I have updated this to remove the elbow and simply map the entire SDR space into the available HDR space, handling shadows and mid-tones much better. Whether you’ll really notice this in retro gaming is another matter, but it is definitely an improvement.
I also fixed the way we scaled linear color to determine how much to boost a color. Previously, I used a luma coefficient to get a grayscale value; this resulted in reds, for example, not being boosted as much as they should and whites being over-boosted, causing a washed-out look. We now use RGB maxing, which is a much better solution.
3. Future-proofing for efficient hardware:
I believe the future of this tech for retro gaming lies in cheaper devices paired with more expensive displays—i.e., most people are willing to spend an awful lot on the TV in their living room rather than the PC in their bedroom (although looking at memory and 5090 prices, that isn’t universally true!).
To that end, I wanted to target Raspberry Pi 5 level hardware that you can put behind your Samsung or LG OLED in the lounge. To achieve this, I’ve updated the RetroArch HDR system to be as efficient as possible by offloading as much processing to the display as possible. I’ve included a fast, single-pass scanline simulation for HDR aimed at running close to 60fps at 4K.
My aim is to bring this HDR implementation to LakkaTV on the Pi 5. The guys in charge of LakkaTV and the OS it sits on have done most of the heavy lifting, and we just need RetroArch to pass HDR metadata to it. I’ll hopefully get the time soon to add that specific support, but in the meantime, the core RetroArch HDR system is now updated and ready.
So, two things are to come on top of the large update to RetroArch:
-
The Sony Megatron shader is going to get an upgrade to its scanline simulation, for better HDR blooming and, in addition, better inverse tonemapping and HDR10 support. Hopefully, there will be a good performance boost and the shader parameters will be simplified.
-
HDR support on Linux through the KMS/DRM layer and the Vulkan driver rather than the desktop Wayland/X11 (the tech used by the Steam Deck/SteamOS). This has actually mostly already been done by others we just need to pass through the vulkan hdr metadata correctly and enable HDR.
Anyway, lots to do!