Retro Tech
CRT Shaders on the Steam Deck: Setting Up Mega Bezel in RetroArch

Part 3 of the thread The emulation bench
- Use the Vulkan video driver, or GLCore if Vulkan gives you trouble. Avoid D3D; it loads Mega Bezel painfully slowly.
- Aspect ratio Full, integer scale off, rotation off. The shader draws the frame, so RetroArch has to get out of its way.
- Install it from Online Updater, Update Slang Shaders. No downloads to juggle.
- Start with the lighter presets on the Deck and work up. The full reflection presets are heavy.
Old games were drawn for CRTCathode-ray tube. The deep, heavy glass TV everybody had before flat screens.More: CRT 90s TV: Channel Surfing Like It's 1996, on a Raspberry Pi. On a sharp modern screen, pixel art can look harsh and a little flat, because the blur, glow and scanlines the artists were counting on are gone. A good shader puts them back.
The Mega Bezel Reflection Shader is the big one for RetroArch. It draws a CRT picture and then wraps it in a TV bezel that reflects the glow of the screen, which sounds like a gimmick until you see it. These are my notes for getting it running on a Steam Deck. Most of it applies anywhere RetroArch runs.
Before you install
- A current RetroArch. The shader's own instructions say 1.9.8 or later; anything recent is fine.
- The Vulkan video driver. If Vulkan isn't available or misbehaves, use GLCore.
- Not D3D. On Windows, the Direct3D drivers can load it, but loading takes a very long time.
Heads up
Change the video driver, then restart RetroArch. The new driver doesn't take effect until you do, and it's easy to spend ten minutes wondering why nothing changed.
The RetroArch settings
Turn on Show Advanced Settings first, or half of these are hidden.
| Setting | Where | Set it to |
|---|---|---|
| Video driver | Drivers | Vulkan (or GLCore) |
| Aspect ratio | Video, Scaling | Full |
| Integer scale | Video, Scaling | Off |
| Video rotation | Video, Output | Normal |
| Allow rotation | Core | Off |
The reason for Full and no integer scaling: Mega Bezel handles the picture's size and position itself, including the bezel around it. If RetroArch is also cropping or scaling, the two fight and the frame ends up in the wrong place.
A few cores need their own tweak:
| Core | Setting |
|---|---|
| FinalBurn Neo | Vertical mode off |
| MAME (current) | Rotation mode internal |
| SwanStation (PS1) | GPU renderer set to Vulkan or GLCore, to match the video driver |
Installing it
The easy way: Main Menu, Online Updater, Update Slang Shaders. Mega Bezel is part of the standard slang shader collection, so it lands in your shaders_slang folder with everything else.
The manual way: download the release from the project's GitHub page and put the Mega_Bezel folder into shaders_slang/bezel. Restart RetroArch so it sees the new files.
Then load a game, open the Quick Menu, go to Shaders, and load a preset from the bezel/Mega_Bezel folder.
Picking a preset
The base presets come in weights, marked in their file names, and on a handheld that matters a lot.
| Weight | What you get | On the Deck |
|---|---|---|
| POTATO | The fewest passes. Color correction and a background image, but no reflections | The place to start |
| STD | Some processing before the CRT shader, plus the reflections and the bezel | Fine for most systems |
| ADV | The full processing chain with reflections | Heavy. Test it per system. |
| SMOOTH-ADV | ADV plus ScaleFX smoothing | The heaviest of all |
There are variants too: SCREEN-ONLY drops the bezel entirely if you only want the CRT look, and GLASS adds a blurry glass reflection around the picture.
There's also a big world of bezel art packs built on top of Mega Bezel. Duimon's packs are the well-known ones, with a bezel made for each console and handheld, and they're a separate download.
Tip
Save a preset per core once you've got a system looking right: Quick Menu, Shaders, Save, Save Core Preset. Then every game on that system loads with it and you never do this again.
When things go wrong
RetroArch crashes or shows a black screen:
- Switch from Vulkan to GLCore (and restart).
- Try a lighter preset.
- Turn off the heavier effects in the shader parameters.
It runs, but slowly: stay on Vulkan, close anything else running, and drop a weight tier. Shaders cost battery on the Deck too, so the lightest preset that looks right to you is the one to use.
Little things worth knowing
- Screenshots lie. The mask patterns look different in a screenshot than they do in motion on the actual screen. Judge it by playing.
- Too dark? Brightness is in the shader parameters. Masks and scanlines darken the picture, and that's where you compensate.
- Try different mask types. They change the scanline and phosphor look more than you'd expect.
- Adjust per system. A Game Boy wants something different from an arcade board, and the bezel packs know it.
The shortcuts that go with this, like getting to the Quick Menu without a keyboard, are in my EmuDeck hotkeys cheat sheet. If you'd rather have the real thing than a simulation of it, the other route is a real CRT and a clean signal, which is what RGB modding is about. And for a real tube TV doing something fun, there's the CRT 90s TV project.