RetroArch – Hardware video decoding – coming soon!

As you may well know, RetroArch has embedded video player support on platforms such as Windows, and Linux. Just like VLC, Kodi, mpv and other video players out there, it accomplishes this by leveraging the ffmpeg project.

Up until now, all video decoding was performed entirely in software. This means that the CPU has to do all the decoding instead of being able to delegate it to the GPU. This meant that on some systems, video playback could be too slow if the CPU was too underpowered. This so happens to be the case on many ARM SoC devices out there, such as the Raspberry Pi and Odroids.

Now, we finally support hardware video decoding through ffmpeg’s own APIs! This should really help on systems where there is a CPU bottleneck and the GPU happens to support hardware decoding. Whether or not you are able to decode 1080p, 1440p or 4K on hardware depends entirely on your GPU’s capabilities however.

In addition to hardware decoding, frame based multithreading is now enabled for SW based video decoders, but actual effectiveness hasn’t been proven yet.

The core switches back to SW based decoding if the HW based decoding couldn’t be initialized.

The following backends have been tested:

  • DXVA2 [Windows]
  • D3D11VA [Windows] (it will use this when using the D3D11 driver
  • VDPAU [Linux] (Tested on an AMD System with VDPAU to VAAPI layer)

We have performed the following tests so far:

  • Nvidia Titan XP/RTX 2080 Ti
  • – Can hardware decode 1080p/1440p/4K content.

  • Intel UHD 630
  • – Can hardware decode 1080p/1440p/4K content.

  • AMD Radeon R9 290x
  • – This is a slightly older card from 2014. It only supports 1080p hardware video decoding at best. 1440p and 4K content therefore falls back to software video decoding. This means that if your CPU is not up to the task, you won’t be able to run this content at fullspeed.

As a stress test video, we picked a 4K video (3840×2160) with a total bitrate of 29561 kb/s (h264/AVC1, YUV420P), running at 30 frames per second. The CPU we’re using for this test is an Intel Core i7 7700k. With such a CPU, we don’t really have a CPU bottleneck and we are merely GPU bound when it comes to rendering the content.

With software decoding (the current default in RetroArch) – we averaged around 55fps with the 2080 Ti. Our CPU load averages around 15% with GPU load averaging around 11%.

With hardware decoding (the 2080 Ti defaults to DXVA2 for this test) – we averaged 77fps with the 2080 Ti. Our CPU load averages around 11% with GPU load averaging around 20%.

What remains to be done

We will still need to gather tests for the following backends:

  • Cuda
  • Videotoolbox
  • DRM
  • OpenCL
  • Mediacodec

Future plans

In short, we hope this will really help out RetroArch’s video playback capabilities not only on desktops such as Windows and Linux, but also on the ARM SoCs, and in specific our own Linux distribution, Lakka.

But hardware video decoding is not the end-all-be all. There is certainly a lot of room for improvement for future speedups, and these are being investigated. But that’s the subject of another blog post somewhere down the line.

For now, rest assured that big things are coming up for the next version of RetroArch!

Doom 3 Libretro core dhewm3 coming soon to Core Updater!

The #Doom 3 source port dhewm3 finally hits #Libretro/#RetroArch, allowing you to play Doom 3 natively on #RetroArch! This is all thanks to the efforts of Rinnegatamante, who previously did the Quake 2 and 3 source ports to libretro/RetroArch.

In the video above you will see us running through the beginning sections. This video was recorded at a resolution of 1440p (256×1440) running at 120 frames per second. To top all this off, internally the game is rendering at a 4K resolution (3840×2160), yet it still outputs to 1440p ultimately.

This will hit the buildbot Core Downloader soon, targeting at first Linux and Windows. We will see which other platforms it can be ported to later on. It’s a far more demanding games than previous id Tech games at least.

Design decisions

Some decisions were made during the porting of this:

  • Right now it’s using the gamepad only as a control scheme, and requires pretty much the use of two analog sticks. There might be more controller configurations in the future, including full-fledged keyboard and mouse support. For now, as stated before, it’s only the gamepad.
  • Internal resolution can be increased up to 4K (3840×2160). It will make sense to increase this later on.
  • Just like the Quake 2/3 cores before it, with minimal tweaking Doom 3 runs generally great on higher refresh rates.
  • For Doom 3 we are targeting fixed framerates (you can set the target framerate as a core option). We are well aware that while the game was made for Geforce 3, a lot of this hardware and even more recent ones struggled to reach a solid 30fps framerate, never mind a stable 60fps.

RetroArch 1.8.1 released!

RetroArch 1.8.1 has just been released. This version sees the coming of age of the mobile UI, which now has support for thumbnails. This will bring a transformative change to the way people get to interact with the UI on Android/iOS. And the best part is that this is only the beginning, even more drastic UX enhancements are planned!

Grab it here.

If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!

On-demand thumbnail downloading now enabled by default on Android/iOS

We’ve made the decision to enable the auto thumbnail scraping feature by default on Android/iOS since both devices are likely to be connected to the Internet. This is inline with what the majority of people on these platforms would want the default behavior to be. All other platforms remain unaffected – for systems other than Android/iOS therefore, it has to be enabled manually for it to work.

In case you are using your device offline and/or you don’t want a HTTP request to be performed every time you browse a new entry in a playlist, you can turn this setting off by going to ‘Main Menu -> Online Updater’ and turning off ‘On-Demand Thumbnail Downloads’.

MaterialUI – Thumbnail support plus more themes! The mobile UI finally grows up!

We are beyond excited to present to you even more UX enhancements for MaterialUI, the default UI for mobile devices like Android and iOS.

There is now initial thumbnail support for playlists in MaterialUI!

RetroArch 1.8.1 adds the Thumbnails and Thumbnail Upscaling Threshold options under User Interface > Appearance, and adds two new options: Portrait Thumbnail View and Landscape Thumbnail View. There are currently only list view implementations, which look something like this:

Portrait Thumbnail View


List (Small)

List (Medium)

Landscape Thumbnail View


List (Small)

List (Medium)

List (Large)

Note the new ‘switch thumbnail view’ icon on the title bar (next to the search icon). This shows up when viewing any playlist provided that User Interface > Appearance > Thumbnails is set to anything other than OFF. Touching this icon switches to the next view mode (this is done independently for each screen orientation). Pressing the ‘scan’ button on a gamepad (RetroPad X) has the same effect.

On-demand thumbnail downloads are fully supported.

All loaded thumbnails have a nice ‘fade in’ animation.

A couple more screenshots –

We implore everybody that might have bounced off earlier versions of RetroArch for Android/iOS to please give this new version a chance. We are trying our best to be receptive to user feedback and whip the UX into shape so that it becomes a user interface that you will come to love instead of tolerate (at best). Thumbnail support has been missing for a long time so this is bound to be a big deal along with the other UX enhancements that version 1.8.0 already brought with it



  • BUGFIX/MENU: Fix menu rendering with Mali GPUs after changing video dimensions
  • CDROM: Adds pregap support to cdfs helper methods
  • CHEEVOS: Provides the new PCEngine hashing algorithm for RetroAchievements
  • LOCALIZATION: Update French translation
  • LOCALIZATION: Update Polish translation
  • LOCALIZATION: Update Spanish translation
  • MENU/MATERIALUI: Initial thumbnail support
  • MENU/MATERIALUI: Cutie / Virtual Boy theme added
  • MENU/MATERIALUI: Bugfix – Under certain extreme circumstances, entries with very long sublabel strings could have their text prematurely ‘clipped’ as the entry is scrolled beyond the top of the screen
  • MENU/MATERIALUI: Bugfix – Certain setting value strings were unnecessarily truncated (with a …) when using smooth ticker text
  • MENU/XMB: Sunbeam theme added
  • SWITCH: Accelerometer, gyroscope and illuminance sensor support
  • VITA: Accelerometer and gyroscope sensor support

What’s next?

We will be following this blog post up in the upcoming days with more about the Doom 3 core that libretro devs have been working on. Stay tuned – this core represents a big milestone for us since it is a semi-modern game running as a libretro core inside RetroArch, and our aim has always been to appeal beyond the emulation scene. We are fully supportive of even more non-emulator cores in the future, but we won’t forget about the emulation scene either, and we have some BIG announcements coming up that still remain a secret. So stay tuned and wait for further information to arrive when the time is right!