RetroArch 1.8.3 has just been released.
Grab it here.
Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love with our users. This project exists because of your support and belief in us to keep going doing great things. 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!
ANGLE brings OpenGL ES support to Xbox One and generic Direct3D 11 video cards!
We wanted to bring this feature to you as early as version 1.8.2, but due to time constraints we couldn’t make it in time. You can read our older article about it here.
Now, with version 1.8.3, we’re finally ready to deliver on the ANGLE promise. We’re rolling out ANGLE support for two platforms:
- Windows (64bit version)
- UWP version (64bit x64 version)
ANGLE is middleware developed by Google that serves as an OpenGL compatibility layer on systems where OpenGL support is either spotty or missing entirely. It converts OpenGL calls to Direct3D 9/11.
In this video, you will see ANGLE being used on RetroArch UWP. In specific, it allows us to run OpenGL cores now on the Xbox One, where only Direct3D 11/12 are available as graphics APIs. Mupen64plus Next is shown running in this video on an Xbox One S with fairly acceptable results.
RetroArch debuts with ANGLE support for the first time since version 1.8.3.
- For the regular Windows version, there are two binaries from now on – one with ANGLE (retroarch_angle.exe), one without (retroarch.exe). The non-ANGLE version will use your system-provided OpenGL driver, while the ANGLE version will use the ANGLE version of the OpenGL dynamic libraries.
- ANGLE works over OpenGL ES. This means that ANGLE requires separately compiled cores targeting OpenGL ES 2/3 instead of desktop OpenGL. What this means is that 1) you need separate cores for every Libretro OpenGL core you want to run, since the current OpenGL cores available for Windows assume that desktop OpenGL will be targeted, and 2) a libretro core has to have a working OpenGL ES 2 or 3 implementation in order for it to work. This will mean that currently, cores like Quake 2/3/Doom 3 won’t work since there are no working OpenGL ES 2 codepaths in those cores. However, Mupen64plus Next and Flycast do have OpenGLES 2 codepaths.
What usecases are there for using ANGLE instead of regular OpenGL?
There are several scenarios imaginable where you would want to use ANGLE. Here are some of them –
- UWP (shorthand for Universal Windows Platform) allows you to make one binary that will work on Windows Mobile 10, Windows 10 and Xbox One. The only graphics API available for UWP programs is Direct3D 11 or 12. So for OpenGL cores to work, a middleware layer like ANGLE which converts OpenGL to Direct3D is our only option. Therefore, ANGLE allows us to run OpenGL ES 2 cores on the Xbox One.
- Certain graphics cards might have nonexistent OpenGL support on Windows 10 and therefore fall back to Microsoft’s reference OpenGL 1.1 drivers. This is pretty much the worst case imaginable and really limits what you can do with OpenGL on such graphics cards. Intel HD 2000/3000 series integrated GPUs are pretty much in this position. For such GPUs, ANGLE might be your only option to get any kind of acceptable level of hardware accelerated graphics support with openGL-based cores.
- OpenGL driver support might be stagnating for certain graphics cards, and therefore several bugs go unresolved in their OpenGL driver implementations. ANGLE is a good way to work around that assuming you are OK with an OpenGL ES 2/3 feature set.
Which ANGLE-specific cores are ready to go right now?
The following two cores are ready right now for the 64bit version of RetroArch Windows and the 64bit x64 UWP version (compatible with Xbox One) –
- Flycast (GLES2)
- Mupen64Plus Next (GLES3)
Instructions on how to use them on the desktop 64bit Windows version
NOTE: To use these, make sure you start retroarch-angle.exe instead of retroarch.exe.
Make sure you have downloaded these cores first. Go to Online Updater, and download ‘Mupen64Plus Next (GLES3)’ and ‘Flycast (GLES2)’. These are the ANGLE-specific cores.
You will now have to start your content with either one of these two cores. For example – to start Flycast with RetroArch ANGLE, you select ‘Flycast (GLES2)’ from the list as the core instead of the regular Flycast core.
WARNING – YOU CANNOT use the normal Mupen64Plus Next/Flycast cores as long as you’re running retroarch-angle.exe. Those cores are compiled against desktop OpenGL instead of OpenGL ES 2/3, so they won’t work with the ANGLE version of RetroArch. Make sure you’re aware of this before you walk away with the mistaken impression that these cores don’t work.
Instructions on how to use them on the 64bit UWP version (Xbox One and Windows 10)
Fortunately, it’s much easier to use these cores with this version. For one, typically only the ANGLE-specific cores are available for these builds, and second, thanks to the automatic driver switching feature from version 1.8.2, it will be able to switch video driver seamlessly from Direct3D 11 to OpenGL (ANGLE) depending on the requirements of the core. This way, you get the best performance possible with the native Direct3D 11 driver for every core that doesn’t require OpenGL, and for the cores that do, it will seamlessly switch to it. No manual configuration necessary.
Performance recommendations for Xbox One
You will want to tinker with the following options to get an acceptable baseline performance on Xbox One systems:
* Make sure that Core Options -> Threaded Rendering is enabled.
* You can enable Div Match which might get you an extra 5 to 10% performance gain. Be aware though that on some games this might cause compatibility issues.
* Lowering resolution might help too.
Xbox One X users should on average expect a 10fps or more performance increase over regular Xbox One/Xbox One S.
As indicated in our earlier blog post, we have done many netplay improvements:
– We fixed a critical bug that would cause all players to be disconnected from the relay server if one player was leaving the game. That bug had been open for one year and we were finally able to fix it.
– Fix the “spectator” bug when using the relay server – When a player switches into the spectator mode (pressing “i”) while using the relay server, all players will disconnect.
– Overall stability has also improved. We fixed a memory leak that would cause the relay server to become unresponsive after some time.
We also opened a new relay server in Sao Paulo, Brazil, since Brazil represents such a large part of our netplay audience.
Furthermore, in the short term we are going to be writing the netplay lobby server from scratch. It will be published under the Affero GPL license as open source code once it’s ready, and the existing lobby will be replaced. You can expect much improved code over what is currently being used.
RetroArch PSP and Vita – Massively increased core collection
Something that separates RetroArch from so many other projects is how it simultaneously caters to the extreme high-end as well as the extreme low-end with its ecosystem of software. So while on the extreme high end we have been busy adding 300fps/360fps modes for some of the impending cutting-edge 300/360Hz monitors to arrive, at the same time core developers are working on backporting optimized assembly versions of the Z80/68000 CPU cores.
The backporting of Cyclone and DrZ80 to the libretro cores has led to a dramatic increase in performance for MAME 2000, 2003, and 2003 Plus.
But that is not all. So many other cores have been effortlessly backported to PSP now that debugging is far less painful on the system. FreeIntv, MAME 2000, TGB Dual and Handy are all new cores, all running effortlessly!
RetroArch 3DS – RACE added
For RetroArch 3DS, we have added the Neo Geo Pocket Color emulator RACE.
– On o3DS you get ~45-50 FPS
– On new 3DS, you get fullspeed performance
OpenDingux now a supported platform in the future
We have recently added support for the OpenDingux family of devices. It has been tested on an RG350 and should theoretically work on the GCW Zero as well. You can expect to see a proper release of the OpenDingux version later on. For now it can be built from sourcecode.
Many outstanding bugs have been fixed in this release. For the full details, see the Changes section further below.
- ANDROID/BUGFIX: Fix ‘Install or Restore Core’ regression
- BUGFIX: Ensure core info is always initialised when calling ‘drivers_init()’. This bug could prevent cores from doing content runtime logging
- BUGFIX/MENU: History size can only be set to 1 at a minimum
- BUGFIX/MENU: (XMB/OZONE) Fix ‘quick menu’ detection. XMB would not display savestate thumbnails in the quick menu if it was accessed via the main menu
- BUGFIX/CRASH/CORE UPDATER: Fix potential double free error
- BUGFIX/CRASH/OPENGL/WINDOWS: Fix regression in 1.8.2 that would cause GL-based cores to fail because it would try to erroneously load libGLESv2.dll instead of OpenGL32.dll (cores affected: VitaQuake 2/3/Dhewm3, possibly more)
- BUGFIX/MENU/DESKTOP UI: Show desktop menu on startup does not launch Qt UI on Linux
- CHEEVOS: Don’t disable achievement when AddAddress generates an out-of-range address
- CHEEVOS: Don’t reset triggers/leaderboards that failed to load
- CHEEVOS: Don’t count unsupported achievements as unlocked
- CORE UPDATER: Display number of cores updated when updating installed cores
- DINGUX: Initial port
- D3D11: Block FL9_3 devices from D3D11 driver because they don’t work anyway (current D3D11 driver uses SM4.0 which requires FL10_0 and up)
- D3D11: Fallback to GL driver when D3D11 fails
- EMSCRIPTEN: Fix assets
- HISTORY/FAVORITES: Bump up default to 200 entries from 100
- FFMPEG CORE: Implement packet buffer, fixes MP4 video playback for many files
- LOCALIZATION: Update Italian translation
- LOCALIZATION: Update Polish translation
- LOCALIZATION: Update Russian translation
- LOCALIZATION: Update Spanish translation
- MENU: Added ‘Hosting’ menu under Netplay menu
- MENU: Added ‘Subsystems’ menu
- MENU/FILEBROWSER: Fix file selection issues when starting from (or navigating to) the top level directory
- MENU/WIDGETS: Prevent looping of task title text
- RASPBERRY PI: Fix BGRA8888 color inversion issues in the menu and elsewhere with VideoCore GL drivers
- NETPLAY/RELAY: Add Sao Paulo (Brazil) relay server
- NETPLAY/RELAY: Fix the “spectator” bug when using the relay server – When a player switches into the spectator mode (pressing “i”) while using the relay server, all players will disconnect.
- NETPLAY/RELAY: Overall stability has improved. Fixed a memory leak that would cause the relay server to become unresponsive after some time
- NETPLAY/RELAY: Fixed critical bug that would cause all players to be disconnected from the relay server if one player was leaving the game. That bug had been open for one year and we were finally able to fix it
- SWITCH/LIBNX/BUGFIX: Fix onscreen keyboard input regression
- UWP: Add ANGLE support
- UWP: Wire up get_metrics to the fake context of D3D9/10/11/12 driver, enabling proper scaling and mouse/touch gestures
- VITA: Re-add Online Updater
- VULKAN: Fix font driver ‘vulkan_get_message_width()’ function
- VIDEO FILTERS: Only use threads when the number exceeds 1. Fixes race conditions with some CPU filters on Vita
- WINDOWS: Add ANGLE support for x64, separate binary (for now?)
Libretro Cores Progress Report
Also check out our Libretro Cores Progress Report from today to see how the various Libretro cores have progressed since last time around.