Flycast Progress Report – Mip-mapping properly implemented now on both Vulkan and OpenGL



Some significant improvements have been made to the Dreamcast emulator core Flycast by flyinghead that serve to increase the graphics accuracy.

For one, the OpenGL renderer has mip-mapping support now for the first time. Second, all texture mipmap levels are now uploaded to the GPU. The Vulkan renderer no longer auto-generates mip-maps and instead uses the proper mipmap levels. What happened before is that these auto-generated mipmaps would ‘bleed’, whereas the ones provided by the game do not.

This caused issues with games like Railroad Tycoon 2 where the beach texture was not properly displayed.

Before the fix, you’d have weird magenta colors on the beaches with the Vulkan renderer. This has now been resolved.

To learn more about texture bleeding, you can read this StackExchange article here.

Another example of what texture bleeding looks like can be seen down below (and note that this is now also fixed) – previously texture bleeding would regularly occur at upscaled resolutions –

NFL 2K2 - texture bleeding issue when upscaling - how it looked before
NFL 2K2 – texture bleeding issue when upscaling – how it looked before

Many of these issues have now been fixed. See the picture down below how the title screen above for instance looks like now –

NFL 2K2 - texture bleeding issues fixed
NFL 2K2 – texture bleeding issues fixed

How mip-mapping looks like on Dreamcast

To best illustrate the effect mip-mapping has on the video output quality, let us show some comparison pictures at the Dreamcast’s native 640×480 resolution.

The picture down below shows Soul Calibur running with mip-mapping disabled:

Soul Calibur on Dreamcast with mip-mapping disabled
Soul Calibur on Dreamcast with mip-mapping disabled

The picture down below shows Soul Calibur running with mip-mapping enabled:

Soul Calibur on Dreamcast with mip-mapping enabled
Soul Calibur on Dreamcast with mip-mapping enabled

At higher resolutions you will notice the blurriness starting to gradually disappear.

Combining mip-mapping with anisotropic filtering

The Vulkan renderer allows you to apply Anisotropic filtering (AF) to the textures (to learn more about it, read the Wikipedia page here).

Soul Calibur on Dreamcast with mip-mapping enabled and 16 x AF filtering
Soul Calibur on Dreamcast with mip-mapping enabled and 16 x AF filtering

While you can still make out some of the far textures in the distance being slightly blurry as a result of the mip-mapping, overall the blurriness factor is significantly reduced as a result of the agressive 16x AF filtering being applied here, even at a very low resolution of 640×480.

Even further tweaking possible with PowerVR postprocessing filter

You don’t have to stop at mipmapping and AF filtering of course. You can also take advantage of leilei’s PowerVR post processing filters on top to further enhance the authenticity of the picture.

NOTE: For now, the PowerVR postprocessing filters only work with OpenGL. Vulkan support will arrive later.

Soul Calibur on Dreamcast with mip-mapping enabled and PowerVR postprocessing filter
Soul Calibur on Dreamcast with mip-mapping enabled and PowerVR postprocessing filter

Here we have mip-mapping enabled and PowerVR 2 Postprocessing filter enabled. NOTE: Because this is the OpenGL renderer, anisotropic filtering right now is not available, so we cannot show you a picture of how the PVR2 postprocessing looks like in conjunction with 16x AF. Neither can we show a similar picture on Vulkan right now because the aforementioned PVR2 postprocessing filters are not available there. Hopefully both renderers can be at feature parity soon in these departments.

How to get it

There are two ways to update your Flycast core. Start up RetroArch first –

a – If you have already installed the core before, you can go to Online Updater and select ‘Update Installed Cores’.

b – If you haven’t installed the core yet, go to Online Updater, ‘Core Updater’, and select ‘Flycast’ from the list. It will then download and install this core.

PCSX ReARMed now has dynarec support across multiple platforms!


If you can recall, a few days ago, Beetle PSX gained a dynamic recompiler based on Lightrec/GNU Lightning. We are happy to inform you that the latest version of PCSX ReARMed now available on the buildbot also has Lightrec support enabled for x86 (32bit and 64bit) and Aarch64 (64bit ARM).

How to get it

There are two ways to update your PCSX ReARMed core:

a – If you have already installed the core before, you can go to Online Updater and select ‘Update Installed Cores’.

b – If you haven’t installed the core yet, go to Online Updater, ‘Core Updater’, and select ‘PCSX ReARMed’ from the list. It will then download and install this core.

So what has changed?

Before, PCSX ReARMed only had a dynamic recompiler for 32bit ARM-based systems. Every other CPU architecture would instead have to revert to a CPU interpreter core. This mean that for every other achitecture, it would be far slower than the optimized 32bit ARM versions.

What has changed now is that x86 (32bit and 64bit) and Aarch64 (64bit ARM) now use the Lightrec dynamic recompiler. ARM 32bit will still use the Ari64 dynamic recompiler because it just happens to be much faster than Lightrec.

Other things important of note – the 32bit ARM version uses a different renderer, NEON GPU renderer. All the other versions use P.E.Op.S. Soft GPU. NEON GPU Plugin has an enhanced resolution which gives you a 4x upscaling, while P.E.Op.S. Soft GPU doesn’t have any such feature. We’d like to bring the NEON GPU Renderer over to the other platforms but right now, the C codepaths are pretty bad compared to the optimized 32bit ARM NEON codepaths. It would require a lot of work to bring it up to par and get rid of the graphics glitches, so Pete’s Soft it is for now.

Current limitations

  • Right now it won’t work with the HLE BIOS feature. The dynamic recompiler only works right now with a real BIOS.
  • Runahead won’t work reliably right now.
  • Right now, Lightrec in PCSX ReARMed uses the Cycle Timing Check mode. If you can recall from our earlier article on Beetle PSX, this is a dynarec mode with additional cycle timing checks, which makes it significantly slower than the ‘Max performance’ mode. Hopefully PCSX ReARMed can eventually use the ‘Max Performance’ mode soon, giving us an additional speed boost.

We hope these issues can be resolved soon.

Performance tests

Test hardware: Desktop PC – Core i7 7700k, Windows 10

Game Interpreter (No Dithering) Interpreter (With Dithering) Dynarec (No Dithering) Dynarec (With Dithering)
Final Doom 246fps 245fps 621fps 616fps
Resident Evil 250fps 248fps 642fps 639fps
Tekken 3 190fps 175fps 279fps 250fps