-
Notifications
You must be signed in to change notification settings - Fork 15
Shaders
OpenEmu-Silicon includes a Metal-based shader engine that loads presets from the libretro/slang-shaders library — the same shader collection used by RetroArch. If you use RetroArch primarily for its shader support, OpenEmu-Silicon can likely cover that need with a better Mac-native UI.
Shaders in OpenEmu-Silicon are powered by OpenEmu-Shaders, a Metal rendering framework that:
- Loads
.slangppreset files from the libretro slang-shaders repository - Transpiles the GLSL shader source to Metal Shader Language using glslang and SPIRV-Cross
- Executes the shader chain on the GPU using Metal — fully native on Apple Silicon, no translation layer
This means the shaders run natively rather than through an OpenGL or Vulkan compatibility layer.
| Format | Compatible | Notes |
|---|---|---|
.slangp (slang presets) |
Yes | Primary supported format |
.slang (individual slang shaders) |
Yes | Loaded by presets |
.glslp / .glsl
|
No | Older RetroArch format — not supported |
.cgp / .cg
|
No | Legacy Cg format — not supported |
Download shaders: github.com/libretro/slang-shaders
These are commonly used presets from the slang-shaders library that are known to work:
| Shader | Category | What It Does |
|---|---|---|
| CRT-Royale | CRT | High-quality CRT simulation with scanlines, bloom, and phosphor mask |
| CRT-Geom | CRT | Classic curved CRT look |
| CRT-Lottes | CRT | Fast, well-regarded CRT by Timothy Lottes |
| Scanlines | CRT | Simple, lightweight scanline overlay |
| Dot Matrix | LCD | Game Boy / LCD dot matrix effect |
| xBR / xBRZ | Upscaling | Edge-preserving pixel art upscaler |
| HQx (hq2x, hq4x) | Upscaling | Classic smoothing upscaler |
| Super-xBR | Upscaling | Higher-quality xBR variant |
| FXAA | Anti-aliasing | Fast approximate anti-aliasing |
This is not an exhaustive list. Most single-pass and many multi-pass slang presets work. Complex presets with many passes may have edge cases.
Some shader presets push beyond what the transpiler currently handles:
- Presets with a very large number of passes (10+) may fail or perform poorly
- Shaders that rely on compute shader stages not exposed in the slang preset format
- Presets that reference external LUT textures in non-standard paths
If a shader fails to load, OpenEmu will fall back to no shader without crashing.
- Download the slang-shaders repository (or a specific preset folder)
- In OpenEmu, open Preferences → Library
- While a game is running, go to Window → Shader (or use the HUD overlay)
- Select a
.slangppreset file
Shaders are applied per-core and remembered between sessions.
OpenEmu-Silicon and RetroArch both use the same upstream slang-shaders library. If you have a .slangp preset that works in RetroArch, there is a good chance it will work here too — the main difference is that OpenEmu-Silicon runs it through Metal rather than Vulkan or OpenGL.
You do not need RetroArch installed to use these shaders.
If a specific shader preset fails to load or renders incorrectly, please open an issue:
- Note the exact preset name and path within the slang-shaders repo
- Attach any console output from the crash report (see Troubleshooting: Console and Crash Reports)
- Include your Mac model and macOS version