The most accurate CRT experience possible - call to all shader pros

So I was looking up HDR support in Vulkan and it does sound like it’s been added and that makes sense as Doom Eternal has HDR support. So possibly we’re good to go, just have to figure out how to use it.


The best I can find on it documentation-wise is this:

and this:

For linux support, wayland appears to be “working on it” but that’s likely to take years:

RedHat has said they’re prioritizing it for 2022, and Valve wants it for Proton, but we’ll see how that goes.

There does seem to be a workaround for Vulkan’s KMS-like mode:

Linux lacks support for HDR10 at the level of the display server (be it or Wayland). Since the display server does not support HDR10, neither does the window system or the desktop environment. Although it is possible to bypass this HDR10-incompatible software stack under specific circumstances (e.g. in fullscreen using the Direct Display Mode feature of the open-source AMDVLK Vulkan drivers with a compatible AMD GPU)

EDIT: looks like nvidia proposed an extension to xorg for DeepColor back in 2017 but I can’t find anything about it more recent than the proposal:


Thanks @hunterk!

Basically all we can do is implement HDR for Vulkan and then wait for HDR support be implemented and then wait for it to trickle down into the Linux version we’re using on the target device.

This could well be a couple of years wait even for something popular like the Raspberry Pi. Maybe Android will be a faster route?


Yeah thanks hunterk :slight_smile:

Although Vulcan support would still be a great option in Windows :star_struck: as not all shaders play nice with D3d. And of course my enormous shader chain in the Mega Bezel is one of them :frowning:


Do we know what is broken with D3D in the shaders? I have noticed some of the larger shaders not working.


Not really, but I agree it seems to be more problematic on larger shaders. The problem with the Mega Bezel is an extreme one where when you load it in Vulcan or GLCore on Windows it maybe takes 10 seconds to load, but when you try to load it with D3D on Windows it is about 5 minutes or longer. I’m not sure what part of the process is lagging so much to cause this.

Here’s a link to the Mega Bezel if you haven’t seen it before:


I have indeed seen your Mega Bezel thread - very impressive stuff indeed! Maybe I should try it on mine and use PIX to debug it but first I’m probably going to try adding HDR to Vulkan - looks relatively easy from what I’ve now seen of code snippets.


Very cool!, I haven’t used Pix before and only a bit of RenderDoc which would show me a lot of the info about the passes, buffers random data etc.

Good luck!


Taking a look back, this looks great! Have you given up on this project or are all the learnings from this integrated in your newer project threads and in your GitHub projects?

1 Like

I was unsure where to post until I saw this topic. The topic can be endlessly debated but I wanted to post this

This is a 1960s Vacuum Tube General Electric Shadow Dot Mask CRT running on R from somebody on Reddit

I’ve never seen Chrono Trigger look so smooth before Everytime somebody posts some trinitron or pvm with CT running on it you see the scanlines and an aliased picture far from the smooth picture from this 60s TV

I wonder if this 60s TV could be simulated with Shaders?

1 Like

I’m seeing a lot of noise in the photo and it looks a little out of focus, not to mention the compression artifacts on top of that. Are you sure it’s the TV you would like to see recreated or the noisy, out of focus photo? it’s easy to add noise and probably some halation to almost any preset and get something starting to resemble that look.


If you are looking for a dot mask, some similar looks can be found playing with the Guest ADV base in the Mega Bezel.

Use these parameters pasted into a saved preset.

HSM_INTERLACE_MODE = "-1.000000"
m_glow = "1.000000"
glow = "1.059999"
shadowMask = "5.000000"
masksize = "0.000000"
mshift = "3.500000"
slotmask = "1.000000"
slotmask1 = "1.000000"
slotms = "0.000000"

Or save them to a *.params and use them as a local shader override in one of my presets.

I’m no expert, I’m sure others could come up with something better.

1 Like

@Cyber The noise you’re seeing is from RF input, not from image artifacts

The dude who posted the thread in reddit(LukeEvansSimon) also made the thread over at Shumps forum about modifying a CRT’s TVL.

You can see some of his comments in that reddit link I posted.

@Duimon I can still se the aliasing in your pic unlike that 60s TV

1 Like

I wasn’t even trying to come close, just showing that something like the dot mask was possible.

I’m positive that someone with more experience than me could replicate it with ease.

how’s this? It’s just GTU with no scanlines, a drop in both vertical and horizontal res and a dotmask on top:


I can see a lot of grain in the picture. Also, you cannot even make out the phosphors clearly. So my point was that you have to be careful using such a low quality reference to try to recreate or judge something because what will you end up making? Something containing all of the flaws of the reference material and medium or something that’s accurate to what is the subject of the reference material in real life?

Are you 100% sure that the grain and noise you’re seeing is not from film grain and compression on top of any artifacts in the screen?

Is the photo in proper focus so as to represent the graphics as they would appear in person?

All of those factors can skew what you’re trying to make. So you might end up recreating a preset that resembles the photo and not necessarily the TV.

Here are two more shots from the reddit post.

1 Like

Now this is much better and something that I can work with!

This is what I’ve come up with so far. I think this is a good start.



I never got around these, I think my setup between macOS High Sierra and RA (Metal) had some trouble running these. I might be lying, honestly in the end I ended up buying an actual 80s CRT and a HDMI>RF converter :rofl: when I eventually have to move out down the line I will look into this shader thing again.