RetroArch 1.7.7 – Released!

UPDATE May 11, 2019: RetroArch 1.7.7 has been updated again. This latest hotfix release should fix several crashing issues that could happen at startup on the 3DS and WiiU. It should also be a generally more stable release than the previous version. If you already downloaded RetroArch before May 11, be sure to download it again and upgrade your existing version!

RetroArch 1.7.7 has just been released! Grab it here.

If you’d like to show your support, consider donating to us. Check here in order to learn more.

Buildbot/release woes – and a new Patreon goal

On a special note, this release took several days due to our buildbot no longer being up to the task of being able to process all of these builds within a timely manner. We have set out a new Patreon goal that would allow us to significantly upgrade our rented servers so that release cycles don’t have to take 10+ hours anymore. Please consider pledging to our Patreon.

New tiers and perks

We have created new tiers, there is now a $1 tier that gives you a special Discord badge and access to a Patron-only Discord channel. The $5 tier gives you all the perks of the $1 tier including a special subflair on our RetroArch subreddit page. There is now also a $10+ tier, if you become a member of this, you can choose to have your name/nickname inserted into RetroArch’s Credits screen in future versions of the program.

So, we reiterate, the release could have happened this past weekend, but unfortunately, we were met with the stark reality of a buildbot that has long since outgrown its shoes, and we now need to throw better hardware at it in order to make it perform much faster. So we ask for your help in that endeavor.

Highlights

Experimental alpha version of UWP/Xbox One version!


NOTE: This is a pre-alpha version of RetroArch for UWP/Xbox One! Please be aware that the current product is far from polished, and that whatever you see here might not be reflective of the finished product later on. Our sole purpose for releasing this is that Dominater01 had already made a release and we felt it would be remiss not to share this with our users, regardless of its current level of polish.

To learn more about this, read this article here.

Desktop UI – Settings

Ever since its inception, RetroArch users on the desktop have been clamoring for a Desktop UI that would allow them to manipulate all of the settings available in RetroArch. The most often heard complaint was that it was cumbersome to change these settings with a gamepad. Of course, our intention is to have a unified UI that mostly works the same across desktop, game consoles and mobile phones, but a reasonable argument could be made that it was counterintuitive to force a desktop user to go through a gamepad-centric UI.

So, to address these criticisms, a few versions back we debuted a companion Desktop UI that can be invoked by pressing F5. This was step 1. We have made this process a bit easier now too for Windows users. You can now go to the menubar, go to ‘Window’ and then select ‘Toggle Desktop Menu’ in order to go to the Desktop UI.

Step 2 was adding an actual settings screen. This has now been done as of version 1.7.7. Thanks to the great efforts of CozmoP and also due to some refactoring on our end, starting as of version 1.7.7, RetroArch will finally allow you to change settings inside the nice and easy Desktop UI (that can be triggered at any time by pressing F5 on your keyboard).

NOTE: The Desktop UI is only available for Mac, Windows and Linux. The desktop UI is powered by Qt 5.

Menu widgets

In this video, you will see some of the widgets in action when:
* Taking a screenshot
* Downloading a core

But there are many more widget elements available, such as:
* Fastforwarding
* Rewinding
* Showing the framerate onscreen
* Achievement notifications

Etc.

This is all courtesy of natinusala. More widgets will be added in the future.

Generic message widget, shader previous/next hotkey

Achievement notification widgets

New OpenGL Core driver supports Slang universal shader spec!


A new OpenGL driver has been made that targets OpenGL 3.2 and up. And unlike the older GL driver, this one supports only slang shaders. This means that this OpenGL driver can now finally use the same shaders as Vulkan, Direct3D 10/11/12, and Metal. This marks an important milestone for us since we are well on our way to having a true universal shader spec now that can cross around graphics API barriers.

To learn more about this, read this article here.

Legacy OpenGL 1.1 driver for GPUs with no vendor-supplied drivers!

Up until now, RetroArch required at least OpenGL 2.x support on the desktop. If your GPU did not have a driver supporting at least OpenGL 2.x, RetroArch would simply not run with the OpenGL driver.

There are plenty of integrated Intel video cards that have no real OpenGL support on Windows 10, so they have to rely on a fallback driver provided by Microsoft called ‘GDI Generic’. This limits these cards to OpenGL 1.1.

Now, those inconvenienced users can still use the OpenGL 1.1 fallback driver. Do note that it will be impossible for shaders to ever work with this video driver – OpenGL 1.1 dates back to 1997. It would take until 2003/2004 before pixel and vertex shaders would become a standard feature of any video card worth its salt.

To learn more about this, read this article here.

RGUI – Particle effect animation system and numerous improvements

RGUI is a low-fi CRT-friendly raster-based menu UI that in the past has been kept purposefully minimalist.

jdgleaver has really taken the bull by the horns and significantly improved upon RGUI, to the point where it now has:

  1. Thumbnail support (with scaling support)
  2. Theme support
  3. Fancy particle animation effects
  4. Drop shadow icons for text
  5. Extended ASCII character support (for accented characters)
  6. Much-needed performance improvements

To learn more about this, read these articles here and here.

Menu framerate is now framerate independent

Previously, the menu would be capped at 60fps. Users acclimatized to higher refresh rates would find the 60fps update to be lacking when they are inside one of the fancy raster menus inside RetroArch (XMB/MaterialUI/Ozone).

The menu framerate in RetroArch is now framerate independent. So, for instance, if you’re using a 120Hz resolution, XMB will animate at 120fps, and you will see smooth animation with menu shader effects like the ribbon effect, snow, or bokeh.

When you’re running a game that is capped at 60fps, it will cap the menu along with it. But once the game with the lower refresh rate cap is loaded out of memory again, the menu should return again to that native framerate.

Menu Font text issues fixed on Android and macOS

Severe font text issues have been fixed on both Android and macOS. Languages like Japanese should now display properly on Android without any of the graphical bugs that appeared on earlier versions.

We are also now using STB_font unicode as our font driver for macOS and iOS, so for the first time languages like Japanese and other non-Western languages should finally be rendered properly.

Press Quit Twice To Exit

RetroArch traditionally exits the program immediately when you press the ‘Escape’ key on your keyboard. This has been one of the most commonly heard complaints usability-wise, so while this is an acquired taste, it’s understandable that some wouldn’t want the program to function like this.

So now there is a new option for those who dislike it – ‘Press Quit Twice To Quit’. Go to Settings – Input, and enable it. You will notice that when you hit the Escape key now to exit, it will remind you through a popup message first that you need to hit the key another time for it to truly exit.

Android phones: Vibrate on touch

You can enable this by going to Settings -> Input, and turning on ‘Vibrate on key touch’.

Your Android phone will vibrate every time you touch an UI element inside the menu or overlay. This could be useful in order to get a sense of tactile feedback from your button interactions while playing a game.

Automatically set the user language based on your system language

This is a new feature at first-time startup. Right now, it should work on Android, Linux and Windows.

When starting up RetroArch for the first time, it will check what your system language is set to, and then make RetroArch use that same language. This way, you don’t have to manually change your language after starting up RetroArch for the first time.

If you find that for whatever reason you want to use either another language or revert to English, you can go to Settings -> User and set Language back to English.

Changes for macOS

The macOS version ‘Apple macOS High Sierra (and later) with Metal2’ now requires Metal, the new graphics API. If your system does not have Metal support, it will not run. There is no backwards compatibility support for OpenGL, as Apple is fast-tracking the deprecation of this API and it might not be there for much longer. This version requires macOS High Sierra and/or later (10.13).

Please be aware that cores which rely on Libretro GL will not work with this version of RetroArch.

Conversely, there is also a separate build where OpenGL support is still a thing, but there is no Metal driver. This version requires macOS/OSX Tiger or higher (10.7).

And so much more…

We could write an entire book about all the new features we added to RetroArch 1.7.7. The list is so exhaustive, in fact, that we had to split this release blog post up into several mini articles in order to properly do justice to all of the major features and platform releases that have happened as a result of this release. We might go into some more of the standout features later on in a future blog post, but for now, below is the massive CHANGELOG of this release.

General changelog

– 3DS: Add unique IDs to prevent cores overwriting each other.
– 3DS: Fix screen tearing when running 50Hz content.
– ANDROID: We now target API level 26 (minimum is still API level 9).
– ANDROID: Add option to vibrate on touch (works in menu or overlay).
– ANDROID: Add device vibration option for cores that support rumble.
– ANDROID: Add gamepad vibration support for cores that support rumble.
– ANDROID: Allow stylus/pen to move mouse without pressing down.
– AUDIO: Avoid deadlocks in certain audio drivers when toggling menu sounds on.
– BLISS-BOX: Support PSX Jogcon (requires firmware 3.0).
– CHEEVOS: Fix crash when reading memory that is out of range.
– CHEEVOS: New Cheevos implementation enabled by default.
– CHEEVOS: Pop-up badges when an achievement is triggered.
– CRT: Dynamic super resolution support.
– DISCORD: Fix potential crash when username is empty and discord is disabled.
– DISCORD: Ask to join support for Linux.
– INPUT/ANDROID: Add “Input Block Timeout” option.
– COMMON: For platforms without HAVE_THREADS, don’t automatically resume content when saving/loading states
– COMMON: Make playlist sorting optional and consistent.
– COMMON: Fix sorting of playlists with blank labels.
– COMMON: Fix content scanner creating false positive playlist entries that also have wrong label and crc32.
– COMMON: Add some MMX-optimized pixel conversion routines.
– COMMON: Fix typo preventing some SSE2-optimized pixel conversions from being used.
– COMMON: Add option to track how long content has been running over time.
– COMMON: Fix buffer overflows in system information.
– COMMON: Add option to change screen orientation via the windowing system (Android, Windows, X11).
– COMMON: Show CPU model name in log.
– COMMON: Add “Help -> Send Debug Info” option (and F10 hotkey) to send diagnostic info to the RetroArch team for help with problems.
– COMMON: Show GPU device name/version in log.
– COMMON: Add menu option to write log info to a file.
– COMMON: Add subsystem support for playlists. Subsystem info is automatically saved to the history playlist for easy relaunching.
– GL: Add new “gl1” OpenGL 1.1 compliant video driver for legacy GPUs and software renderers
– GL: Add a new “glcore” driver with slang support (requires GL 3.2+ or GLES3).
– GL: Draw OSD on top of overlay.
– GONG: Add savestate support.
– GONG: Add video refresh rate core options.
– GONG: Two player support via core option.
– GUI: Fix text alignment when using stb_unicode.
– GUI: Fix text display issues when using Japanese (and other unicode-dependent language) text with stb_unicode.
– GUI: Set language on first startup to the user’s preferred OS language (Windows, *nix and Android).
– INPUT: Add (scaled radial) analog deadzone and sensitivity options.
– LIBRETRO: Add Turkish language support.
– LIBRETRO: Allow non-accelerated video to rotate the display.
– LOCALIZATION: Update Chinese (Simplified) translation.
– LOCALIZATION: Update Chinese (Traditional) translation.
– LOCALIZATION: Update Dutch translation.
– LOCALIZATION: Update French translation.
– LOCALIZATION: Update German translation.
– LOCALIZATION: Update Japanese translation.
– LOCALIZATION: Update Polish translation.
– LOCALIZATION: Update Russian translation.
– LOCALIZATION: Update Spanish translation.
– LOCALIZATION: Add new Turkish translation.
– MIDI: Fix startup crash in midi driver.
– MENU: Bugfix – you can no longer get stuck in Online Updater -> Update Core screen when toggling between ingame and menu.
– MENU: Selectively hide ‘Take Screenshot’ for video drivers that don’t support taking screenshots.
– MENU: Framerate independent menu rendering. MaterialUI/Ozone/XMB/RGUI can now run at higher framerates.
– MENU: Thumbnails work in history list.
– MENU: Menu widgets.
– MENU: Add memory statistics support to more context drivers.
– MENU: Enable ozone driver for UWP builds.
– MENU: Add optional “looping” menu text ticker with configurable speed.
– MENU: Fix core video rendering when using ozone with GL cores that implement the scissor test.
– MENU: Add optional playlist sublabels (associated core + play time, where available).
– MENU: Dropdown list settings now apply immediately.
– MENU: Add setting to require pressing the “Exit RetroArch” hotkey twice to confirm.
– MENU: Now able to run at higher refresh rates than 60Hz.
– MENU: Enable “Add to Favorites” without loading a core.
– MENU: Allow core name to be hidden on history/favorites playlists.
– MENU: Populate crc32 and db_name fields when adding history/favourites playlist entries.
– MENU: Fix TTF files not showing in OSD/menu font selection screen.
– MENU: Fix audio/video filters not showing in file browser.
– MENU/MaterialUI: Add subsystem support.
– MENU/MaterialUI: Add currently selected entry in dropdown menus.
– MENU/OZONE: Add mouse support on entries (no sidebar yet).
– MENU/OZONE: Allow collapsing the sidebar.
– MENU/OZONE: Add thumbnail support.
– MENU/OZONE: Battery notifications.
– MENU/OZONE: Add wifi icon for network entries.
– MENU/QT/WIMP: Add git version and build date to Help->About window.
– MENU/QT/WIMP: Fix content loading via the file browser.
– MENU/QT/WIMP: Add new settings window to control all RetroArch settings.
– MENU/RGUI: Improve playlist titles.
– MENU/RGUI: Add option to hide associated cores in playlists.
– MENU/RGUI: Add internal upscaling option.
– MENU/RGUI: Add subsystem support.
– MENU/RGUI: Add menu sublabel support.
– MENU/RGUI: Re-enable “Load Core” option when content is loaded.
– MENU/RGUI: Add optional “Collections” entry to main menu.
– MENU/RGUI: Add “Lock Menu Aspect Ratio” option.
– MENU/RGUI: Add “full width” layout option.
– MENU/RGUI: Ensure menu color theme is applied immediately.
– MENU/RGUI: Fix “Lock Menu Aspect Ratio” option when using custom viewports.
– MENU/RGUI: Add widescreen support.
– MENU/RGUI: Allow text to be centred when selecting widescreen layouts.
– MENU/RGUI: Add inline playlist thumbnail support.
– MENU/RGUI: Add optional shadow effects.
– MENU/RGUI: Performance optimizations.
– MENU/RGUI: Add optional extended ASCII support.
– MENU/RGUI: Add optional delay when loading thumbnails.
– MENU/RGUI: Add on-screen keyboard.
– MENU/RGUI: Battery notifications.
– MENU/XMB: Prevent crashes when resizing to a tiny window.
– MENU/XMB: XMB honors the ‘show menu sublabels’ setting now – was previously RGUI only
– NETPLAY: Fix stall-out causing total disconnection with >2 players.
– NETPLAY: Different (more intuitive?) default netplay share policy.
– NETPLAY: Add hotkey option to toggle hosting on/off.
– NETWORKING: Encode URLs to allow for spaces in directory names.
– OSX: Prevent crash on exit.
– OSX: Metal is now the default video driver for the RetroArch Metal build.
– OSX: Enable CoreAudio v3 driver for Metal.
– OSX/MACOS/IOS: Now uses the STB Unicode font driver.
– PS2: CDFS support.
– PS2: Implemented analog support for ps2 controllers.
– PS2: Fix audio freeze after restarting core.
– PS2: Fix issues with load state and the font driver.
– PS2: File I/O now works for USB and network host.
– PS2: Support cores with extra padding in their frame buffers.
– SCANNER: New option ‘Scan without core match’. When this is enabled,
supported extensions by all installed cores are not checked, and instead
it will add all content it finds to a playlist. This way, you can install the core you need later on after scanning. Not enabled by default.
– SHADERS: Don’t alphabetize shader presets.
– SWITCH: Add rumble support.
– SWITCH: Add USB keyboard support.
– VITA: Add bluetooth mouse and keyboard support.
– VULKAN: Fix color issues with RGBA8888 swapchains in readback (screenshots).
– WII: Don’t init overlay when RAM is beyond 72MB.
– WII: Skip CRC calculation on content load, can improve load times of larger games by several seconds.
– WINDOWS: Fall back to gl1 driver if accelerated GPU driver is unavailable.
– WINDOWS: Allow winraw and xinput to work without dinput (needed for WinRT).
– WINDOWS: Add MSVC2017 ARM desktop support.
– UWP: Fix rewind by opting for slower codepath.
– UWP: Fix relative path name issues when loading shaders.
– UWP: Optimizations for VFS system.

RetroArch 1.7.7 – Experimental alpha version of UWP/Xbox One version!

NOTE: This is a pre-alpha version of RetroArch for UWP/Xbox One! Please be aware that the current product is far from polished, and that whatever you see here might not be reflective of the finished product later on. Our sole purpose for releasing this is that Dominater01 had already made a release and we felt it would be remiss not to share this with our users, regardless of its current level of polish.

PLEASE BE AWARE, THIS IS A ROUGH DRAFT OF RETROARCH AS A WINDOWS 10/XBOX APP. THE FINAL PRODUCT WILL BE MUCH BETTER AND IN NO WAY IS THIS REFLECTIVE OF THE QUALITY OF THE FINAL PRODUCT.

We ask for your patience while testing this; you might find file system performance lacking and some manual steps might need to be performed that are obviously not user friendly. Do note that we are very conscious of these current limitations and we hope to have them resolved in future versions.

Where to get it

Go to our RetroArch Downloads page.

For Windows 10 PCs, go to the Windows 10 logo and download both the certificate and the .appx file.

For Xbox One users, just go to the Xbox One logo and download the pre-alpha.

NOTE: This won’t replace the regular Windows version on PC. For regular PC users, the UWP port is nothing but a downgraded/gimped version of our main Windows version. You can use this version for academic purposes, but I would not recommend using it primarily on Windows.

Running this on PC

1. Download and extract this version of RetroArch on your PC.

2. Make sure you download the certificate too, you will need it immediately afterwards –
Download certificate here.

3. First, make sure that you can actually install Windows/UWP apps from outside the Windows Store. Go to Settings -> Applications. At ‘Installing Apps’, select ‘Allow apps from anywhere’. In case you’d prefer it to be limited to Store-only apps, you can change this back later after you have finished these instructions and installed RetroArch already on your PC.

Created with GIMP

4. Now we need to install the certificate that we downloaded in step 2. Double click on it.

5. Click on ‘Install Certificate”.

When you are at this screen and it asks for any dependencies, you might have to add this file :

Microsoft.VCLibs.x64.14.00.appx.

6. A Certificate Wizard will now appear. Of the two questions, select “Local Machine”.

7. Check ‘Place all certificates in the following store’, click on ‘Browse…’, and select ‘Trusted Root Certification Authorities’.

8. After we have verified that the certificate is successfully installed, we start up RetroArch.appx. If an app identical to this was already installed, you would not be able to install this program right now. As it is, click on ‘Install’.

Running this on Xbox One

1. Download and extract this version of RetroArch on your PC.

2. Go to your Xbox. Make sure you have changed your Xbox to ‘Developer Mode’ (see here for more information on how to do that).

3. On the Developer home screen, go to “Remote Access Settings” and enable Xbox Device Portal. You might have to setup a username and password as well. You can do this by selecting Remote Control settings.

When you connect to the IP on PC and you see this page, make sure to click ‘Show Advanced’ and click ‘Proceed’.

4. Go to the Device Portal on your PC. This is the IP of your xbox one (it will show up on the Developer home screen) (if its being picky do this https://ip:port)

5. Goto “Add” on device portal and choose the .appxbundle (see step 1) then hit next

6. Goto “Choose File” if there are any dependency files needed (you will have to install all files one at a time) then hit next.

7. It will install. After this is finished, you can go to the Xbox One and run RetroArch.

8. You should now be able to run RetroArch UWP on Xbox One.

Compatibility list

Dominater01 has made a Google Spreadsheet compatibility list for RetroArch on Xbox One.

First-time setup procedures

As has hopefully been stressed before, this is a very early version of RetroArch for UWP devices. As such, the first time you start it up, you need to do some first-time configuration before everything looks properly and is ready to go.

In this video, you can see the first-time setup procedure – it is the same for both Xbox One and Windows 10 –

Set type of RetroArch App on Xbox One to ‘Game’ in order to get faster USB disk access

By default, any app you install gets assigned with type ‘App’. In order for RetroArch to become much quicker at accessing USB storage, we will need to change it to ‘Game’.

Be aware that after making this change, you will need to reboot your Xbox One for the changes to take effect. Otherwise you might run into issues.

NOTE: You will only be able to use USB 3.0 HDDs/storage on Xbox One.

Gain access to files beyond the sandbox

By default, your level of access to the filesystem with an UWP app is limited to the basic sandbox directory your app lives in. This is of course far too limiting for most RetroArch users, so to enable full filesystem access, go to Load Content, and then select ‘Enable external file access’.

You will be presented with a screen looking like this:

Go to ‘Choose Which Apps Can Access your file system’ and make sure that RetroArch is enabled there. This dialog screen might then close, and you might have to restart the program again.

What works

  1. Fully working Direct3D 11 driver
  2. Menu drivers like XMB/MaterialUI/Ozone/RGUI work as you would expect.

Already known issues

  1. Very slow filesystem performance.
  2. [Core issues] Closing content when running a PSP game with PPSSPP crashes RetroArch.
  3. [Core issues] Loading savestates on the PCSX ReARMed core crashes.
  4. [Core issues] Dolphin Core doesn’t work.
  5. GL Cores aren’t compatible/loadable (this is because only Direct3D 11 is being used right now, and we arent’ using ANGLE right now).
  6. RetroArch on Xbox One won’t highlight the text on the onscreen keyboard unless set to a white background.
  7. Having the rewind feature on slows the PCSX core
  8. Setting directories to USB by default isn’t saving correctly.
  9. Scanning content currently does not work.
  10. Leaving retroarch idle for hours crashes.

RetroArch 1.7.2 – Released!

RetroArch 1.7.2 has just been released! Grab it here.

This latest version has also been uploaded to the Google Play Store.

If you’d like to show your support, consider donating to us. Check here in order to learn more.

Highlights

Runahead latency reduction – better latency than the real hardware

A visual representation by Durante of how the runahead system works in practice.
A visual representation by Durante of how the runahead system works in practice.

This might just be our biggest release yet, thanks in no small part to the new runahead latency reduction system. This feature has already been all the rage over the Internet. Well known people like Durante of DSfix fame praised it and the popular site Ars Technica has dedicated an entire article to this game-changing feature.

We ran an article on this new feature before, and since then, several facts have changed on the ground which bears pointing out. First of all, several performance improvements have been made since. Secondly, the feature has now been enabled for the vast majority of the RetroArch platform ports.

The versions that have this feature enabled and exposed now includes:

  • PlayStation3
  • Xbox OG
  • Wii
  • WiiU
  • Nintendo Switch
  • Android
  • PC (Windows)
  • PC (Linux)
  • macOS
  • iOS

Here are some basic things you should know:

  • Every game has a certain built-in amount of lag frames. In order for the runahead system to perform as expected, you should set it to the same amount of frames to read ahead that the game you’re running is working by. So, for example, if a game like Super Mario World for the SNES has a guaranteed 2 frame input lag, for the best results, set Runahead frames to 2.
    You can count the amount of lag frames a game has by using the frame advance feature in RetroArch.
  • For playable performance, your system should be at least capable of running the core at twice its regular speed. These performance demands go up commensurate to the amount of frames you want to run ahead. The higher performance you get with a core, the more frames you can run ahead at fullspeed.
  • While the runahead system is core agnostic and therefore technically we don’t need to patch up cores in order to work with the runahead system, there are several things that can be done in order to improve performance considerably. To this end, Dwedit has submitted several patches to some of the cores in order to make them perform much better. Some of these cores include (but are not limited to) the Snes9x cores, QuickNES, FCEUmm, Nestopia, Gambatte, and even Mednafen/Beetle PSX.
  • There are currently some things you should know about Mednafen/Beetle PSX when it comes to runahead. First of all, in order for this core to work correctly with runahead, you should use the software renderer. The OpenGL and Vulkan renderers are currently buggy with runahead. Second, even after several savestate performance improvements, it is unlikely you will be able to set runahead to higher than 1 frame while still being able to run at fullspeed. This might likely change once our bounty for the Beetle PSX dynarec is finally fulfilled (and on that note, it has already reached $720, and a coder is working on a potential solution)
  • An often heard question that has been asked is – will this work on a Raspberry Pi? There is no straight answer to this since it heavily depends on the core’s performance. Based on our performance tests on the PS3 and Xbox OG, QuickNES and Gambatte should be at least two cores that should run at fullspeed with runahead set to 6 frames or less. Your mileage may vary on any of the other cores. The quick rule of thumb is that the faster the core, the higher chance there is to get it to run at fullspeed with more runahead frames.

How to check the amount of lag frames a game has

RetroArch has the ability to pause a core and advance it frame by frame. Perform the following steps to determine the amount of lag frames of a game:

  • Pause emulation (press ‘p’ button on keyboard).
  • Press and hold the jump button on the controller.
  • Advance emulation frame by frame (press ‘k’ button on keyboard) until the character jumps.

The number of k presses before you get a reaction should be the number of lag frames you can safely remove with run ahead.

Performance, scalability

So, how well does all this scale? Of course, the more expensive hardware you throw at a latency reduction approach like this the better, but how low can we actually go in terms of specs and still obtain good results? To figure out a basic answer to this question, I decided to test the runahead system on two old game consoles that are not exactly powerhouses at this point. The first of the lot is the Xbox OG, powered by a fairly mundane Pentium 3/Celeron 733MHz CPU. The second is the PlayStation3. Its PPU is roughly equivalent to a Pentium 4 2.4GHz CPU in terms of real-world performance, and even that comparison is probably pushing it. So this is not exactly powerful hardware.

Street Fighter Alpha 3 FBAlpha 2012 No runahead 104fps PS3
Street Fighter Alpha 3 FBAlpha 2012 Runahead – 1 frame 57fps PS3
Mega Man 2 QuickNES No runahead 124fps PS3
Mega Man 2 QuickNES runahead – 1 to 6 frames 124fps PS3
Mega Man 2 Nestopia No runahead 124fps PS3
Mega Man 2 Nestopia Runahead – 1 frame 76fps PS3
Mega Man 2 Nestopia Runahead – 2 frames 54fps PS3
Super Mario World Snes9x 2010 No runahead 113fps PS3
Super Mario World Snes9x 2010 Runahead – 1 frame 78fps PS3
Super Mario World Snes9x 2010 Runahead – 2 frames 65fps PS3
Super Mario World Snes9x 2010 Runahead – 3 frames 56fps PS3
Sonic 1 Genesis Plus GX No runahead 116fps PS3
Sonic 1 Genesis Plus GX Runahead – 1 frame 51fps PS3
Bomberman 94 Mednafen PCE Fast No runahead 124fps PS3
Bomberman 94 Mednafen PCE Fast Runahead – 1 frame 83fps PS3
Bomberman 94 Mednafen PCE Fast Runahead – 2 frames 66fps PS3
Sonic 1 SMS Gearsystem No runahead 120fps PS3
Sonic 1 SMS Gearsystem Runahead – 1 frame 63fps PS3
Sonic 1 SMS Genesis Plus GX Runahead – 1 to 6 frames 124fps PS3
Mega Man 2 QuickNES Runahead – 1 to 6 frames Fullspeed Xbox OG
Mega Man 2 FCEUMM Runahead – 1 frame Fullspeed Xbox OG
Mega Man 2 FCEUMM Runahead – 2 frames Not fullspeed Xbox OG
Sonic 2 Genesis Plus GX No runahead Fullspeed Xbox OG
Sonic 2 Genesis Plus GX Runahead – 1 frame Not fullspeed Xbox OG

We consider any PC from the year 2005/2006 (whether desktop or laptop) to be significantly more powerful than either of those consoles, so these test results bode quite well for the scalability and feasibility of the runahead method.

Features like the runahead system will also naturally increase the demand for ever faster cores so that people on lower specced hardware can use runahead with more frames in advance.

CRT Switch Res – GroovyMAME-like features for 15KHz capable CRT monitors!

Thanks to forum-user Alphanu, RetroArch now has the ability to query cores for their exact video timing data, which can be used to switch to native-resolution, 15 kHz modelines for use with standard-definition CRT TVs.

This is a big step for retro purists, as RetroArch can now output “pixel-perfect” video with accurate timing to compatible displays, even quickly switching between interlaced and non-interlaced modes on the fly.

This capability is currently Windows-only and requires modelines to be created in advance by CRT_EmuDriver or Custom Resolution Utility with a compatible GPU. Linux support is coming soon.

In case you’d like to learn more, follow these links:

Direct3D improvements, additions, and a new Direct3D10 driver

With RetroArch 1.7.1, we really stepped our game up to finally start treating Windows as a first-class citizen platform. You have seen this in the form of dedicated Direct 3D 11/12 video drivers that had the ability to run the same shaders as Vulkan, our new slang shader spec that is made possible by the impressive Khronos/ARM-backed project SPIRV-Cross.

Increased backwards compatibility

Previously, the Direct3D 11 driver required that your graphics card driver supported at least Shader Model 5.0. We have since downgraded this requirement to Shader Model 4.0. As a result, I am now able to use the Direct3D 11 video driver on an old 2010 laptop GPU that only supports Shader Model 4.0 (it’s an ATI Mobility Radeon HD 4300). We also try to support more D3D11 feature levels instead of just defaulting to 11.0.

New Direct3D 10 video driver

On some systems, though, you won’t be able to make use of the Direct3D 11 driver no matter what. One of those systems happened to be another old laptop I had lying around here. This one has a Geforce 9200M GS, and the specs state that it supports up to Direct X 10 and Shader Model 4.0. Direct3D 11 is a no go on this GPU even with the increased backwards compatibility.

It’s for this purpose that me and aliaspider spent some time to finally make the Direct3D 10 driver feature-complete. Direct3D 10 should be available from Windows Vista and up, whereas Direct3D 11 is available from Windows 7 and up. The Direct 3D 10 driver should be feature complete and identical to the Direct3D 11 driver, with the sole exception of hardware rendering contexts not being available right now with Direct3D 10.

Which brings us to the last Direct3D-related subject…

Direct3D-powered libretro cores are now possible!

This feature is easily worth its own article, but since we already covered this before and because 1.7.2 has so many huge features, we will relegate this to a side note. Nevertheless, it is none the less important.

Up until now, if you wanted to use hardware-accelerated 3D rendering in a libretro core, your options were OpenGL and/or Vulkan. There is now a third option – Direct3D 11, and the first libretro core that supports this is the PPSSPP core!

With all these features, we now have everything in place to really do an UWP version of RetroArch justice.

Input remapping system improvements

The input remapping system (available from Quick Menu -> Controls) had many obvious limitations previously. Some of these included:

  • It was not possible to map keyboard from more than one gamepad (for instance with Dosbox)
  • It was not possible to map more than one button to the same action
  • It was not possible to unmap buttons or analogs
  • It was not possible to map a button to trigger an analog response (for instance, in an N64 emulator, running in Super Mario 64 with the D-pad)
  • It was not possible to map an analog to another analog
  • It was not possible to map an analog to produce a button response

Most of these restrictions have now been lifted at long last thanks to radius, and the visual representation is also much improved now.

To read more about this, also visit the related forum thread here.

Do note that all your existing remap files are now obsolete, and you should start from scratch. This was a necessary evil unfortunately in order to progress.

Various Quality-Of-Life improvements

We have tried to do various consequential Quality-of-Life improvements for this release:

  • XMB and MaterialUI menus should scale much better now depending on the output resolution. Previously, the XMB and MaterialUI menu elements were too small if you were running at a resolution of 1440p or 4K.
  • Boxart / thumbnails now react better to other elements on the screen and can resize or adjust themselves accordingly. There are also new ways of showing a thumbnail on the left and right side of the screen in XMB. It is also possible to determine what ‘type’ of thumbnails get shown on the left and right, respectively.
  • There are two layout modes now for XMB – you can choose between Desktop and Handheld. Desktop is the default look of the XMB as it was now, mirroring the PS3 layout, while Handheld goes for an XMB look that is more in line with how it looked like on PSP. Previously, the default layout was ‘automatic’, where it would default to the PSP layout if you were running at a resolution of 320×240.
  • Shaders should work again with the Vulkan video driver on the Android version.
  • When you select a shader preset now, it should only show you the supported shader presets based on the video driver that is currently selected. In other words, it will no longer show you GLSL shaders and/or presets when you have selected the Vulkan video driver, just as an example.
  • Certain video features were never implemented for some platforms. We now hide features like Black Frame Insertion, GPU Hard Sync and Swapchain images if the video driver in question doesn’t implement them. It is conceivable that for some of these drivers, these features might be implemented later, but overall we feel it declutters the menu considerably by simply not showing settings that have no effect at all when toggled due to them being unimplemented.
  • We now expose certain convenience features on the Quick Menu, such as Latency, Rewind and Overlay settings. You can also hide these settings respectively by going to User Interface -> Views -> Quick Menu and disabling these categories.
  • The shader next/previous hotkeys are more intelligent now and deliberately skip over shaders that are not supported by the current video driver.
  • (For Linux users) Wayland should now have proper scaling with XMB menu driver.
  • (For Linux users) Allow compositor disabling on X11 fullscreen through _NET_WM_BYPASS_COMPOSITOR.
  • On platforms where this is supported, ‘Set Display-Reported Refresh Rate’ is a convenient way of setting the exact refresh rate that the OS/video driver has reported to the application. This might be more accurate than measuring the refresh rate yourself by waiting for 2048 samples or more before hitting the Action button on ‘Estimated Screen Framerate’.
  • Display Framerate is now moved to ‘Onscreen Display – Notifications’. A handy feature showing all sorts of statistics is now exposed in this submenu as well.
  • RetroAchievements updates

    The future is now. Arcade achievements using the FB Alpha core are fully supported in this version. This brings support for Neo Geo and Capcom arcade boards (Metal Slug, Marvel Super Heroes).

    – Capture your greatest moments with the automatic screenshot feature! Look back fondly on the time you grinded your RPG character to level 99 for internet points.

    – RetroAchievements on a retro computer?! Windows XP builds of RetroArch now support achievements!

    General changelog

    ANDROID/OPENSL: Prevent crashes when setting audio latency too low (buffer count can never be lower than 2 now).
    CRT: Added CRT SwitchRes.
    COMMON: Hide the ‘Core delete’ option if the ‘Core updater’ is also hidden.
    COMMON: Add way to reset core association for playlist entry.
    COMMON: Fix invalid long command line options causing infinite loop on Windows
    COMMON: Add OSD statistics for video/audio/core.
    COMMON: Added runahead system; allows you to drive down latency even further.
    COMMON: Fix buggy behavior that could happen with ZIP file reading on some platforms as a result of not initializing struct.
    CHEEVOS: Support Atari 2600, Virtual Boy, and Arcade (only Neo Geo, CPS-1, CPS-2 and CPS-3 and only with fbalpha core).
    CHEEVOS: Add option to automatically take a screenshot when an achievement is triggered.
    CHEEVOS: Fixed incompatibilities with Neo Geo Pocket achievement sets.
    CHEEVOS: Store only login token, not password.
    D3D10: Added D3D10 driver to release build. Has working shaders (Slang), overlay, and menu display driver support. Should be on par capabilities wise with D3D11 driver except for there being no hardware rendering right now.
    D3D11: Experimental hardware renderer. Allows for libretro cores to use D3D11 for hardware rendering. First core to use this is PPSSPP.
    D3D11: Increase backwards compatibility, shaders compile with Shader Model 4.0 now, added support for more feature levels.
    D3D10/D3D11/D3D12: Fix crashes with completely black or white thumbnail textures in XMB.
    GUI: Support disabling window decorations on Windows and Linux.
    LIBRETRO: Addition – Functions to enable and disable audio and video, and an environment function to query status of audio and video enables.
    LOCALIZATION: Update Italian translation.
    LOCALIZATION: Update Polish translation.
    MENU: Add Rewind/Latency/Overlay settings to Quick Menu, add options to show/hide them (User Interface -> Views -> Quick Menu)
    MENU/RGUI: Only show Menu Linear Filter for RGUI and only show it for video drivers that implement it (D3D8/9/10/11/12/GL)
    MENU/RGUI: Add User Interface -> Appearance options.
    MENU/RGUI: D3D8/D3D9: Hookup Menu Linear Filter
    MENU/XMB: Disable XMB shadow icons by default for PowerPC and ARM for performance reasons.
    MENU/XMB: Left/right thumbnails are now automatically scaled according to layout.
    MENU/XMB: Add Left Thumbnails (additional to the right).
    MENU/XMB: Fixed left/right tab regression.
    MENU/XMB: Fix scaling of tall images that were cut on bottom previously.
    MENU/XMB: Menu scale factor setting now changes texts length, image scaling and margins.
    MENU/XMB: Mouse cursor scales correctly now.
    MENU/XMB: Add toggle to show/hide Playlist tabs.
    MENU/XMB: Add menu layout – can switch between Desktop, Handheld and Auto.
    MENU/XMB: Don’t load menu pipeline shaders unless XMB is selected (D3D10/D3D11/D3D12/GL/Vulkan)
    MENU/VIDEO: Only show black frame insertion for the video drivers/context drivers that support it (so far this includes – D3D8/D3D9, OpenGL, Vulkan)
    MENU/VIDEO: Only show max swapchain images if supported by video driver and/or context driver (so far this includes – DRM EGL context driver, VideoCore EGL context driver, Vulkan)
    MENU/MaterialUI: Automatic DPI Scaling should be much improved now, now scales as expected at 1440p and 4K resolutions.
    MENU/MaterialUI: Fix wrong calculation of an entry height causing long playlists to end up outside of screen range. This also could cause crashes on low DPI screens.
    IOS: Fixed crash when opening downloaded roms from Safari or using the “Open in..” functionality. Added the compiler flag to support keyboard remapping to controls.
    IOS: Fixed buffer overlap that caused a crash while trying to download GLSL shaders from the buildbot.
    PS3: fix URLS
    REMAPS: Mapping keyboard keys from more than one gamepad (works with dosbox)
    REMAPS: Mapping more than one button to the same action
    REMAPS: Unmapping buttons
    REMAPS: Unmapping analogs
    REMAPS: Mapping a button to trigger an analog response (tested with mupen, can run on SM64 with the d-pad now, triggers a full analog tilt)
    REMAPS: Mapping an analog to another analog (having more than one analog mapped to the same output causes issues)
    REMAPS: Mapping an analog to produce a button response
    SCANNER: Should be able to scan dual-layer Wii disc images now, filestream code now supports files larger than 4GB.
    SHADERS/SLANG: Slang shaders should work again on Android version and MSVC versions (basically all the Griffin-based versions).
    SHADERS: If GL context is GLES2/3/Core context, Cg shaders are unavailable. Applies to shader list too.
    SHADERS: Hide cg/glsl shaders from being able to be selected if D3D8/9/10/11/Vulkan video drivers are selected.
    SHADERS: Hide slang shaders from being able to be selected if D3D8/9/OpenGL video drivers are selected.
    SHADERS: Prevent crashes from occurring if we have the GL video driver in use and we try to skip to a slang shader through next/previous hotkeys
    SHADERS: Fix shader parameter increase / decrease functions
    SUBSYSTEM: handle savestates properly (cart1 + cart2.state0)
    VULKAN/X11: Fix X11 Vulkan bug from Wayland driver.
    VULKAN: Fix multi-line text spacing in menus with Vulkan driver.
    WINDOWS XP: Add Cheevos support.
    WINDOWS/MSVC 2003/2005/2010/2013/2015/2017: Add Cheevos support.
    VITA: Bugfix for ‘PS Vita takes many time to start to accept input’ issue.
    X11: Allow compositor disabling on X11 fullscreen through _NET_WM_BYPASS_COMPOSITOR
    X11: Prioritize NET_WM_STATE_FULLSCREEN in true fullscreen mode
    WIIU: Fix OOB read/write in keyboard driver.

    What’s coming next for RetroArch

    So, RetroArch 1.7.2 had some pretty major new features, right? By all indications, it looks like RetroArch 1.7.3 will be no different. So let us give you some sneak peek at what might be arriving down the road for the next version…

    A Qt-powered WIMP desktop UI!

    Ever since RetroArch’s inception in 2012 (and even way before that when it was just known as SSNES), we have stuck to our guns and insisted on a uniform menu experience that obviously took its design cues from mainstream gaming consoles like the PlayStation.

    While this lends itself very well to game consoles and the like, there is also a very vocal minority (or majority, depending on how you look at it) that has definitely made it well known that they would really prefer a native WIMP UI at times to be able to do mundane tasks like select/load a ROM, or browse through a playlist easily with the mouse, etc. And certainly, an argument can be made that on a traditional desktop PC, it might not be ideal at all times to be confined to the same kind of input limitations as say a traditional gamepad.

    For 1.7.3, the way we will try to reach for a concession with these users will be through the way of this companion UI. What you see in these screenshots will be a WIMP (Windows, Icons, Menus, Pointers) GUI powered by Qt. It will be available for RetroArch versions that run on PC Operating Systems like Linux, Windows and macOS.

    The way we envision this UI to work is a bit like how it is possible in Steam to switch between Big Picture mode and the traditional desktop UI. We still want the console-style menus to be RetroArch’s main user interface and we believe this scales fairly well onto game consoles, mobile devices and handhelds. But there is no denying, as Windows 8 all taught us, that there is no such thing as one true universal UI that can scale well across every potential device, so the user should definitely have his/her options.

    The two screenshots you see here are not just mockups, they are already operational in bparker’s branch. What you see here is the result of about one solid month of work, and it’s already reaching quite satisfactory levels.

    We have kept a tight lid on it until now, but felt the time was right to reveal more details about it. We are doing this primarily for the users, and we hope that they will like it, and through designing this we are also trying to be more receptive to user feedback than we might have been in the past.

    Despite all this, as with anything in our codebase, we do insist that from a programming point of view, that this will not impose any huge dependencies, and that all of these individual coding parts are modular in nature and can be easily compiled in or out of any build. With RetroArch we always have to walk a fine line between staying lightweight and not becoming perceived of being too bloated yet also trying to meet increasing user expectations, and it’s not necessarily always possible to be in the middle of these two opposing camps. So we try to do our best to satisfy both groups this way, and stay true to our design goals while also making sure that we keep the users happy who don’t care about the underlying codebase but just care about the results from an enduser perspective of what they can do with the program. It’s a big challenge and definitely a balancing act but we feel we have become better over the years in terms of finding the right balance.

    2018 The Year Of The Libretro Frontend

    Libretro, the underlying platform and ecosystem that powers most of what you see in RetroArch, will see an explosive growth throughout the rest of this year, both by our efforts and outside forces also only tangentially related to our project. You will see the Libretro logo not only in more places, but you will also see popular programs like Kodi finally adopting the API wholesale.

    While it was never our direct intent to have our API be synonomous with retro gaming and emulators, we do not mind this being the biggest driver of growth in this emerging ecosystem and are grateful for the developments there.