Optimizing Cemu
If you need further help, ask on the official Cemu Discord Server for assistance.
Required Reading
For the best performance, we'll be using the Vulkan graphics API. This tends to run faster than OpenGL and allows us to use features such as asynchronous shader compilation.
Asynchronous Shader Compilation
When running games in Cemu, graphical shaders need to be re-compiled to work on a desktop GPU. This can take some time, which causes small stutters in the game every time a new one is sent to the emulator.
Doing this asynchronously allows the emulator to run the process in the background. This means that when the shader is first called, it skips being rendered to the screen, and is instead stored for the next time it's used, providing a much smoother experience.
The video below shows loading Breath of the Wild for the first time using asynchronous shader compilation. After these shaders have been recompiled and cached, they won't need to be converted again, so the graphical glitches stop.
TIP
You may need to update your graphics drivers to use this feature. Currently, this feature does not work on macOS at all.
Asynchronous shader compilation in an older, slower Cemu version. More recent builds can do this in under 1/10th of a second, depending on the CPU.
Importing shader caches
Asynchronous shader compilation goes a long way to speed up running games for the first time, however we can also simply download the shaders needed to run each game from the internet. If another user has previously compiled the shaders, they can upload them for other users to import into Cemu.
If you're using OpenGL, you will only need to download the shader cache. If you're using Vulkan, you will need to download both the shader cache and pipeline cache. Shader caches work on each game regardless of its region, while pipeline caches are locked to the region of the game that they were generated on.
VSync Matching
Vulkan also allows us to use a new experimental VSync technique which allows Cemu to use the game's built-in frame-pacing instead. This avoids tearing and reduces input latency compared to previous methods.
TIP
Ensure you are running the latest drivers and that your GPU supports Vulkan. If your GPU doesn't support Vulkan, follow the OpenGL Guide.
Cemu Settings
- Open the Cemu main menu
- Click
Options
->General settings
on the top bar - Navigate to the
Graphics
tab - Change the "Graphics API" to
Vulkan
if it is not already- If this doesn't appear, or you have problems using Vulkan, read the OpenGL Optimization Guide
- Ensure that your "Graphics Device" is set to use your most powerful GPU if your device has dual graphics
- Set "VSync" to
Match emulated display (Experimental)
- If you use a display with variable refresh rate (G-SYNC), set this to
Off
instead - This feature is experimental and may cause issues
- If you use a display with variable refresh rate (G-SYNC), set this to
- Enable
Async shader compiler
- Navigate to the
Audio
tab - Under
General
, change "API" toXAudio2
- Set "VSync" to
Double buffering
- Navigate to the
Audio
tab - Under
General
, change "API" toCubeb
- Under
TV
, set "Device" to your primary audio output device - Set "Volume" to 100%
- Under
Gamepad
, set "Device" to your primary audio output device - Set "Volume" to 100%
- Close the Settings window
- At the top of your display, click "Debug"
- Disable "Accurate barriers (Vulkan)" if it's enabled
- Set "VSync" to
Double buffering
- Navigate to the
Audio
tab - Under
General
, change "API" toCubeb
Importing shader caches
- Open chriztr.github.io/cemu_shader_and_pipeline_caches in your browser
- Scroll down to the game and region that you want to download
- Click the download icon ( )
- Alternatively, click the "Download all" button near the top of the page
- Extract the contents of the
.zip
file to your Cemu folder - Repeat this for every game needed
Cemu should now be running the fastest it can, with a huge increase in performance for some users.