Snes9x Shaders and Filters: Cg, GLSL and Slang Explained

Shaders are small graphics programs that process Snes9x’s output on its way to your screen — softening pixels, simulating a CRT’s scanlines and phosphor glow, sharpening, or deliberately leaving the raw image alone. Snes9x 1.63 on Windows supports three shader families, and the catch is that which family you can use depends on your output method. This guide maps the combinations, explains the one extra install Cg requires, and retires a format you will still see in old tutorials. Set the groundwork first with the best settings guide, the setup hub and a current build from the download page.

The three formats, at a glance

  • Cg (.cg, .cgp presets) — works with both the Direct3D and OpenGL output methods. The oldest of the three ecosystems here, and the one with a prerequisite (below)
  • GLSL (.glsl, .glslp presets) — OpenGL only, drawn from libretro’s glsl-shaders collection
  • Slang (.slang, .slangp presets) — works with OpenGL (supported since version 1.59) and with Vulkan (since version 1.62, when the Vulkan output method itself was added), drawn from libretro’s slang-shaders collection

The file dialog tells the same story: the Direct3D shader picker accepts *.shader; *.cg; *.cgp, while the OpenGL and Vulkan pickers accept those plus the GLSL and slang extensions. If a shader file does not even appear in your picker, a format/output mismatch is the first thing to check — the shader is not broken, it is just not offered for that driver. Single shaders and multi-pass presets (the p-suffixed files bundle several passes and their settings) are both normal; most shared downloads are presets.

Cg and the NVIDIA Cg Toolkit

Cg is the special case. In the readme’s own words: “If you want to use CG Shaders in Snes9x for windows you need to install the CG Toolkit” — NVIDIA’s Cg Toolkit must be installed on the system for Cg shaders to run, in either Direct3D or OpenGL mode. That requirement is historical baggage from Cg’s origins as NVIDIA’s shader language. Nothing similar applies to GLSL or slang: choose OpenGL or Vulkan output, point Snes9x at a shader or preset from the libretro collections, and no extra runtime is involved. Unless you have a specific Cg preset you love, new users should start with GLSL or slang and skip the Toolkit entirely.

Which combination should you pick?

For a modern Windows PC, slang on OpenGL or Vulkan is the forward-looking choice: slang is the format libretro’s shader ecosystem actively develops, and Snes9x has supported it on OpenGL since 1.59 and on Vulkan since 1.62. GLSL on OpenGL is the equally comfortable alternative with a large existing preset library. Cg is a legacy-compatibility choice today — fully functional, but carrying the Toolkit prerequisite. DirectDraw, the fourth output method, is not part of this shader story at all; if shaders matter to you, you are on Direct3D, OpenGL or Vulkan. Output-method selection itself — the setting that gates all of this — is covered step by step in the best settings guide, and full-screen presentation in the fullscreen and display settings guide.

What shaders can and cannot do

A shader changes only the picture — it cannot add detail the game never drew, fix a bad ROM, or improve emulation accuracy, and claims otherwise (any “upscaling to true HD” language) should be read as marketing for the preset, not a property of Snes9x. What the good presets genuinely offer: authentic CRT simulation (scanlines, aperture grille, curvature, glow), alternative pixel-art scaling looks, or colour adjustments. Tastes differ sharply per game and per display, which is why Snes9x makes presets easy to swap: try one for a full level, not a title screen, before judging, and keep a “no shader” baseline you can return to so comparisons stay honest.

Trying presets without making a mess

Shader presets are small text files, so treat collecting them like collecting anything else from the internet: download from the libretro shader collections or other sources you trust, keep them in a folder you can find again, and add them a few at a time. When you test a preset, judge it in real gameplay at the size you actually play — a CRT simulation that looks superb paused on a title screen can smear badly in motion, and a smoothing preset can be lovely in a colourful platformer and wrong for a text-heavy RPG. Note that a preset’s look also depends on your output size and filtering choices, so compare candidates with everything else held constant. If a shader fails to load or produces a black screen, do not debug the preset file first: check the format against your output method with the table above, because nine times out of ten the preset is fine and the pairing is wrong.

A format that is gone: HLSL

Older tutorials list an HLSL shader option for Snes9x. It was a real feature once, but the changelog records its removal in version 1.57 (“Remove rarely-used HLSL shader option”), and it is not part of 1.63. If a guide’s shader advice depends on HLSL menu entries you cannot find, that is why — move to the Cg/GLSL/slang options above instead. ## Performance, briefly and honestly

Players sometimes ask whether a heavy multi-pass preset will slow the game down. The honest answer is that it depends entirely on your graphics hardware and the preset, and Snes9x publishes no figures to quote — so test on your own machine: if a preset causes stutter that vanishes when it is removed, the preset was the cost, and choosing a lighter one (or none) is the whole fix. On any reasonably modern GPU the common presets are not a practical concern, but your machine, not a website’s promise, is the authority.

Keep exploring via the setup hub, where the display and settings tutorials are collected together.

Similar Posts