What are all these different versions of shaders?

Hello everybody!

In the countless - and wonderful - shaders available in Retroarch, I always come across terms like “singlepass” , “multipass” , “freescale” , “linear” , “fast” , and “noblend”. The problem is that I don’t understand anything about rendering, so these words are completely foreign to me, which makes it difficult to choose a suitable shader for my system. Furthermore, even with intense research, I was unable to find anything that explained the meanings of these terms.

Therefore, I would like to know:

  1. What are these “singlepass”, “multipass”, “freescale”, “linear”, “fast” and “noblend” versions of shaders?

  2. What is the impact of these different versions in terms of emulation performance?

  3. Which of these versions can bring better performance - with little or no slowdowns, crashes, screen stuttering/juddering - for low-end computers (first generation i3 and i5 processors with integrated video, Cores Duo/Quad, Raspberry Pi’s and similar)?

Thank you in advance for your help!


Single-pass vs multi-pass is usually related to speed, with multi-pass usually being faster (sometimes significantly so) at the cost of greater memory bandwidth (IIRC), so it can sometimes be slower than expected on memory-constrained systems (e.g., RPi).

Freescale means that it doesn’t need to run at a specific scale factor, unlike, say hq2x, which needs to run at exactly 2x.

“Linear” refers to gamma. Some shaders expect certain gamma behavior (that is, linear vs curved), so this lets people seeking to combine shaders know what gamma mode this shader outputs in.

“Fast” just means a faster version of the other shader, usually with similar code/behavior but with some shortcuts taken (typically with some sort of hit to the visual fidelity). The exception is crt-lottes-fast, which is a completely different shader, but that’s the name they gave it, so… :man_shrugging:

“noblend” means there are no additional colors created by blending the existing colors. This is typically a descriptor on edge-smoothing shaders, which analyze surrounding pixels and try to synthesize new ones. The noblend varieties will only ever create pixels colored the same as the original ones, but that doesn’t mean that ones without that designation necessarily will, either (confusing, I know).


All my life I have believed that 2x, is because it is applied twice, and so the others.


Thank you very much, dude! It enlightened me a lot!

It would be great if this type of information you gave me was available in the Libretro/Retroarch documentation.

1 Like