New CRT shader from Guest + CRT Guest Advanced updates

Thanks - this is a hugely helpful reply. I will focus only on the advanced variations from here on out. I’m liking your shaders because they play nicely without integer scaling. There are some other shaders I like well enough, but which exhibit moire and/or uneven (clumped/banded) scanlines. I’m looking to output at 1080p (even when connected to a 4k TV) and use crt-styled overlays to cover the black bars (like the Exodus CRT overlays) - so integer scaling is out; having a shader that won’t do weird stuff in this use-case is a must for me.

I also appreciate that this shader allows selection of different masks, so it can effectively replicate crt-aperture or crt-lottes or a pvm - thereby sort of serving as a kind of “master shader” which can get you to any destination you might have in mind. If that is the intent then kudos.

I’ll have to play around with more of the features to see what I need and what I don’t. What is TATE mode and what is smart edge interpolation?

1 Like

I didn’t realize this was the case. Dropping the other 2 variants will certainly make it easier to integrate everything whenever I update the official repo :smiley:


Just a note about the Mega Bezel that it uses Guest-Advanced as the default crt shader. I just wanted to clarify if it was unclear if was unclear before :slight_smile:

Thanks @guest.r for the great explanation! :slight_smile:


Makes sense - will help users as they try to figure out what shaders they like best, too.

That’s awesome - and a good clarification. I am going to play around with Mega Bezel some more and see if I can get it running consistently (and see specifically which shaders will run well with it) on my SFF potato build.

1 Like

RetroArch has a desktop menu which looks like any other Windows app’s GUI.


Is this the best way to tinker with shader settings, so as to see the changes in realtime?


I don’t use it but you can make changes there and see them in realtime. I prefer to just set the opacity of the Ozone Menu to 0. You can do that in Settings…User Interface…Appearance…Framebuffer Opacity.


TY for this tip! I figured there was a way to possibly adjust the opacity but I hadn’t found it. I had been tweaking shader settings and then resuming the game to see how they worked, etc. This is going to make the process a lot more sane.


Yeah if you are using the standard ui turning down the opacity works great.

If you use the desktop ui and are playing with shader parameters make sure to set the retroarch update mode (can’t remember the settings name) to always update even when not focused, and you will see your changes immediately as you adjust sliders. If you don’t you will need to change focus back to the retroarch video window to see the shader update.

I think to launch the desktop ui while retroarch is open you press F6


I’m going to try the opacity adjustment on Ozone since this thing is a tv/couch focused build and I’d rather do as much as possible with gamepad. Can’t tinker for a couple days but super psyched to try this.


@guest.r Has the latest version been tested with RA 1.10.2?

I’m getting weird results now. These settings shouldn’t be doing this.

shaders = "12"
shader0 = "shaders_slang/misc/grade.slang"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
scale_type_x0 = "source"
scale_x0 = "1.000000"
scale_type_y0 = "source"
scale_y0 = "1.000000"
shader1 = "shaders_slang/stock.slang"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "StockPass"
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "shaders_slang/crt/shaders/guest/advanced/afterglow0.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "AfterglowPass"
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "shaders_slang/crt/shaders/guest/advanced/pre-shaders-afterglow.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "true"
alias3 = "PrePass"
float_framebuffer3 = "false"
srgb_framebuffer3 = "false"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "shaders_slang/crt/shaders/guest/advanced/avg-lum.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "true"
alias4 = "AvgLumPass"
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "1.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/advanced/linearize.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "LinearizePass"
float_framebuffer5 = "true"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "absolute"
scale_x6 = "800"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "GlowPass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "absolute"
scale_x7 = "800"
scale_type_y7 = "absolute"
scale_y7 = "600"
shader8 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "absolute"
scale_x8 = "800"
scale_type_y8 = "absolute"
scale_y8 = "600"
shader9 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = "BloomPass"
float_framebuffer9 = "true"
srgb_framebuffer9 = "false"
scale_type_x9 = "source"
scale_x9 = "1.000000"
scale_type_y9 = "source"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "false"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = ""
float_framebuffer11 = "false"
srgb_framebuffer11 = "false"
scale_type_x11 = "viewport"
scale_x11 = "1.000000"
scale_type_y11 = "viewport"
scale_y11 = "1.000000"
g_crtgamut = "0.000000"
g_vignette = "0.000000"
glow = "-0.000000"
brightboost1 = "1.400000"
beam_max = "1.300000"
scans = "1.000000"
shadowMask = "2.000000"
maskDark = "0.000000"
maskLight = "1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/advanced/lut/trinitron-lut.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/advanced/lut/inv-trinitron-lut.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/advanced/lut/nec-lut.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
1 Like
float_framebuffer10 = "false"

This can cause black crush and other issues.

Is “true” with newer presets.


Weird, I thought I copied the presets directly from the latest download link. Thanks!

1 Like

Just in case it’s not apparent, the download zip can be unpacked anywhere you want. It doesn’t need to go into the shaders/shaders_slang/ folder. You can put it directly in shaders if you want and rename it to crt-guest-advanced. Makes it easier to upgrade since you can just delete the old folder and replace it with the new one.


I see that this thread has numerous updates to the version of the shader that ships with RA - do each of these releases get incorporated into the repo such that if you click the option to update the shader library you end up with whatever is the newest version being discussed here? Or are these versions in the thread more bleeding edge updates and the main shader repo is only updated periodically?

1 Like

This one is correct.


Hey @guest.r , I’ve spent the last 1-2 weeks writing an article about setting up your shaders in WinUAE, focusing on a somewhat authentic looking C= 1084S emulation. I had quite a hard time piecing together all the necessary information from the EAB forums on how to set up these shaders, so I thought I’ll make the task a bit easier for others (plus for myself when I forget about all these details a year later; I have a really shit memory…) There’s also some good information (I think) about NTSC vs PAL, aspect ratios, and the best way of playing all those classic American made games (LucasArts, SSI, Origin, etc.)

I made a ZIP file available as well with tweaked versions of your A2080 shader (only parameter tweaking because WinUAE doesn’t support shader presets), hope that’s fine with you. Of course, I’ve credited you properly, etc.

Anyway, just thought you might be interested! :slight_smile: I’m really happy with my setup now, thanks again!



Hey @Rincewind,

you wrote a very inspiring blog article. I also owned an Amiga long time ago, didn’t pay attention to some details then, because Amiga was the star of the show. :grin: Was also a regular buyer of gaming related magazines, a real delight of a hobby.

After some time i discovered WinUAE and i’m using it and it’s inspired projects until now, mostly for gaming. So i’m very fond you took the time to explain some situations and also to tweak the shaders, so they look better and more authentic. I think that users will find a nice starting point to enjoy the emulation even more.

Best regards…


I never owned an Amiga and didn’t discover it until I began by emulation rabbit-hole. I’m so glad I people have kept it alive as it has such a unique library and comparing ports between PC, Mac, Console and Amiga is very interesting.

@Rincewind Really nice article. Is there reason you use WinUAE over the PUAE core in retroarch? I’m no amiga expert but it loads everything I throw at it with little issue.