V1.0 Sony PVM HDR 4K Shader

Added slang-shaders\crt\crt-sony-pvm-4k-hdr.slangp (currently sitting in an open pull request)

This shader is intended to build on my HDR support that I added RetroArch. The idea being that CRT’s are by far brighter than standard dynamic range LCD screens but maybe we can get much closer (and even surpass them) with high end HDR monitors that are now available.

Indeed we can greatly simplify our shaders and get a more accurate CRT experience because we are now finally able to get effects like CRT bloom naturally with brighter screens.

To that end this shader is actually very simple it simulates just the scanlines and mask and then relies on the brightness of the monitor to do the rest.

As a comparison I’ve attached a screenshot from an actual Sony PVM 20L4 that my friend Steve took for me and then I’ve taken a screenshot of my shader on an Eve Spectrum 4K HDR monitor.

Actual Sony PVM 20L4:

HDR Shader on Eve Spectrum:

These were taken with different camera’s and my phone camera seems to be picking up dark colours a little more than can be seen by eye but we’re getting there. I may well work a little more on the darks.

I’ve added numerous resolution patterns to play around with as well as scanline width (or more correctly height).

This shader also disables the HDR settings in the menu and so use the shader parameters to tweak Peak Luminance, Paper White Luminance and Contrast HDR settings for your monitor.

Anyway here is another screenshot taken with my phone.



I really wish I had an HDR pipeline to view it… but the off-axis bits, like luigi’s arm/glove and birdo’s arm highlights give an idea of how it “just works” without having to fake it.


Great stuff, thanks for merging @hunterk!

There’s various details that can be improved upon (there always is) but I think it’s an exciting new direction.

My phone is also changing the colours - in person it’s much closer colour wise to the PVM photo.


What’s really mindblowing is just how simple the shader is. There’s a couple of lines for the scalines, then a few for the HDR stuff, and the mask is like half of the code lol. Great stuff.


Yes that’s exactly what I was trying for: simplicity by relying on the hardware advances.

I’m sure we can complicate it with geometry warping and phosphor after glow (simulated via higher refresh rates) etc but this gets us a good proportion of the way.


That looks cool, I must get one of these toys.

1 Like

I’d love to see photos of anybody’s HDR display using this shader (or modification of it)

1 Like

Hi, Thanks for all of your efforts. The shader always fail to load for some reason ,

-I have HDR enabled from windows 10 side

-Video driver is set to DX12

-HDR is enabled from Retroarch

-HDR is enabled from the 4k TV side

What do you think is the issue?

Ahh yes you’ll need the latest nightly build of RetroArch. Which version are you running?

New photos:

Made the default setting the brighter and a little softer Sony PVM 2730 config as can be seen above.

Added two new configs crt-sony-pvm-20L4-4k-hdr.slangp and crt-sony-pvm-2730-4k-hdr.slangp for the Sony PVM 20L4 and 2730 respectively.

Updated the shader slightly to remove a few redundant shader parameters and exposed a sharpness parameter.


I may move these over to their own ‘HDR’ directory to avoid confusion, if that’s cool with you.


Yes thats absolutely fine with me - I wanted to do that in the first place but thought it a bit over stepping my mark.



I really like what you’re doing here.

I’m unable to test since I don’t have an HDR graphics card, but what mask are you using?

Mask 8 in guest dr venom will result in the most accurate-looking CRT phosphors @4K in a close-up photo. Looks like this:

Red, Yellow, Cyan, Blue


TVL is 540 @ 4K, perfect for emulating a PVM. The black spaces between active subpixels get filled in by the natural bloom and it winds up looking like realistic RGB phosphors in a photo. Mask strength 100% is mandatory, of course.

1 Like

Hi, I can’t figure out why this shader isn’t working as intended for me. I enabled HDR in windows and have it disabled in Retroarch per your instructions (however this doesn’t seem to change anything; whether DX11 or DX12).

Here a couple of screenshots. Your HDR shader looks washed out on my LG C9 HDR Game mode.

The other shader is CRT-Geom-Deluxe which is notoriously low contrast – yet yours has less contrast for me. Thoughts?

Obviously impossible to convey HDR on SDR but I think the difference in contrast should be noticeable.

No sorry HDR should be enabled in RetroArch - it’s just the rest of the settings are disabled (or possibly better thought of as overridden) when this shader is enabled. Sorry for the confusion and do let me know how you get on.

You must also have the latest nightly build of RetroArch (in the last week or so)

1 Like

Thanks! Yes that’s exactly the pattern I plumped for as the default so we’re all in sync.


Just took a photo of what my shader looks like on my monitor with Super Mario Bros:


It doesn’t make a difference for me. Is it because I’m Windows 11? DX12, DX11 are also unreliable for me (nvidia).

So ignoring this shader for a moment when you go into RetroArch and turn on/off ‘Enable HDR’ do you see any difference in the menu - it should be a lot brighter with it enabled?

Yeah it’s brighter but your shader isn’t brighter. I’m familiar with what HDR looks like and the TV also tells me if it’s outputting HDR.

BTW I think I found the reason:

Microsoft Confirms Windows 11 Issue with HDR Displays (onmsft.com)