We, as the developers of RetroArch and Libretro, are proud to announce that yet another new option is available to developers who are using the Libretro API. In addition to being able to use Vulkan and/or OpenGL for hardware rendering, you can now also use Direct3D 11 inside your cores!
While it should be noted that this is still in an experimental stage, there is already a core that will be taking advantage of this — the PPSSPP libretro core, which has recently been upstreamed thanks to Ali Bouhlel and Henrik Rydgard, the original developer. You will be able to use either Direct3D 11 (on Windows), OpenGL or Vulkan renderers with the PPSSPP core.
Some history –
Libretro as an API started out in 2010/2011 only allowing for software rendered graphics. This is truly platform and hardware-agnostic, and for most systems that do not use any kind of 3D rendering and have little to gain from moving over to hardware-accelerated graphics APIs this is the preferable strategy. However, because software rendering has to be handled by the CPU, is only really practical for older games/emulators emulating older 2D-based systems.
OpenGL hardware rendering was added as an option to the Libretro API back in 2013. This coincided with Android and iOS ports appearing for RetroArch, and this was before the platform holders all decided to go their own separate ways and start targeting their own APIs. So being able to target OpenGL (ES and non-ES) as a developer in your libretro core was a great and convenient way to make cross-platform code that would run on most platforms. The only requirements for using OpenGL in your core was that you would adhere to at least OpenGL 2.x on the desktop and/or OpenGL ES 2.0 on mobile. While fixed-function OpenGL was theoretically possible, we only ever provided a test core for it, and we had an unwritten agreement in general that OpenGL usage in Libretro cores should be non-fixed function.
In 2016, the next-generation Vulkan graphics API was launched, and nearly at the same day, RetroArch and Libretro as an API started supporting the Vulkan API. Later that year, new Vulkan renderers for two of our emulators, Beetle PSX and Parallel N64, were made. Since then, Vulkan support has been added to other libretro cores as well, such as PPSSPP and the Dolphin core.
Now in 2018, there is an additional third option available to developers — Direct3D11 support! Targeting this API will of course limit you to Windows 7 and later. However, there are valid reasons for targeting Direct3D 11. On some devices like the Surface Pros, OpenGL drivers are apparently notoriously bad and you need to use Direct3D rendering in order to get decent performance. To this day, users of AMD GPUs on Windows still complain about OpenGL renderers performing worse than their Direct3D equivalents. Whether this is deliberate through sabotage or it’s just circumstantial misfortune, there are legitimate reasons for targeting Direct3D 11 from a performance perspective, and since UWP supports D3D11 natively and using either Vulkan or OpenGL would only be possible through several abstraction layers, it is nice in our humble opinion that the option exists vs. it not existing at all.
We would of course much prefer that there was a real crossplatform graphics API that magically worked everywhere, had great performance everywhere, and that required somebody to just write a graphics renderer once. Unfortunately, industry powers for whatever reason never seem to want things to actually get too easy for developers, so until then, covering all our bases with the Libretro API and trying to support as many of the predominantly available graphics APIs as possible seems to be a more pragmatic decision.
And what’s more, thanks to the excellent SPIRV-Cross project, we are fast approaching a situation where the Direct 3D 11, Direct 3D 12, Vulkan and (maybe soon?) OpenGL drivers available in RetroArch will be capable of using the same shaders instead of each needing their own separate shaders.
See here a video of PPSSPP running with Direct3D11 on RetroArch –
Here’s a rundown on what you can expect from RetroArch v1.1, the next version of RetroArch to be released. Please bear with us that it has taken us so long since v126.96.36.199 to come up with a new official release. This v1.1 version has been long in the making to ensure that this new version will be a big major milestone for RetroArch in general.
So, here’s what the release will comprise of –
Going all PSP – PPSSPP core
We have ported the popular PlayStation Portable emulator, PPSSPP, over to the libretro API. This marks the second big libretro implementation to be using libretro GL after Mupen64 Plus.
It is shaping up to be a very stunning release. Linux users will especially appreciate the changes we’ve made which makes it possible to run PPSSPP in DRM/KMS mode (something which wasn’t possible in standalone since glew has X11 dependencies).
We’re aiming for two modes of operation. One mode will be in which the PPSSPP core functions much like standalone – where it saves everything inside a main PPSSPP assets directory and you install games from PPSSPP’s GUI. The other mode is more like a headless mode – the way every libretro core has functioned up until now. Saves will be saved in .srm form and it will be possible to directly boot ISOs/PBPs/.BINs without having to install them first from a GUI. There’s something to be said for both modes of operation.
We of course take no credit for any of the real emulation work in PPSSPP – the only thing we take credit for is porting it to the libretro API. We take nothing away of the accomplishments made by this team and we hope that the libretro port can be pushed upstream once it’s done. Please pay them a visit at http://www.ppsspp.org/ and support their efforts to improve PSP emulation – they’ve already come a long way in the two years it has been public.
We’ve made some screenshots of the core in action which you can check out here and on Twitter. We’re striving to expose as many of PPSSPP’s features as possible through core options for headless mode operation.
Needless to be said, we think this will be one of the main standout features of RetroArch v1.1. Hopefully it will open up people’s minds about how RetroArch and libretro doesn’t necessarily mean retro-grade graphics – some of these games like Tekken 6 and Soul Calibur Broken Destiny don’t look far removed from their PS3 versions when upscaled to 2x or 3x. And to see it running as fluidly as it does in RetroArch without any audio breakup whatsoever or any frames dropped is a sight to behold.
The PPSSPP core will be available for PC (we’re aiming for Linux/OSX and Windows), and mobile (iOS/Android/Blackberry). After version 1.1 is released, we will research an Xbox 360 port.
Going all PSP – RetroArch PSP
Just having a PSP core would be one thing, but RetroArch v1.1 is going to go one extra mile by also simultaneously appearing on the PSP itself.
Nearly all of the credit for this port should go towards aliaspider- I played only a minor but crucial part in the proceedings. He has really done a bang-up job porting over a great many new cores over that are useful for the PSP, as well as improving the performance of existing cores so that they run well on the PSP.
Right now we have greatly improved the performance of FCEUmm, NXEngine, Gambatte, Mednafen PC Engine (and others) so that they run fullspeed at PSP. Please keep in mind that a PSP for general purpose code is about two times as slow as a Raspberry Pi. So you’re dealing with a very weak CPU here, and so it necessitates specific PSP-specific code to really get the most out of its performance. And thankfully the libretro API allows for this – the libretro API doesn’t prevent you from taking advantage of PSP-specific hardware features in order to speed up performance inside a core.
Aliaspider also made a port of TempGBA over to the PSP. This is a Game Boy Advance emulator based on gpSP Kai (itself based on gpSP – a now defunct emulator by Exophase). There’s also a preliminary port of the popular CPS2/Neogeo emulator, but it isn’t yet done. No idea yet if this core will make it for the v1.1 release.
Like hunterk’s previous blog post indicated, the portability of RetroArch is really coming into its own now. With the PPSSPP core, it will be possible to run RetroArch PSP itself. So essentially what you have is that RetroArch PSP can be made to run inside a PSP emulator which itself is being run inside a native platform version of RetroArch. How much farther can we go from here? The future only knows.
Several new cores will be appearing. We made a port of fMSX and BlueMSX to the libretro API. This was a home computer released in the mid-1980s that was backed up by a consortium of companies (among them a little company called Microsoft and another small fish called Sony). Oddly enough, while it couldn’t really be considered a major worldwide success, it was relatively popular in Japan and (of all countries) The Netherlands. This home computer is also noteworthy for receiving some of the first games Hideo Kojima made in his career, such as Penguin Adventure (one of the first games I ever played BTW) and Metal Gear 1/2.
There will be RetroKeyboard support for these cores to sweeten the deal, but we will also try to have some sane default configs for the RetroPad per-game for some of the more popular games.
There will also be a Vectrex core, Vecx. This was another ’80s game console, and the main notability of this game console is that it wasn’t using sprite rasterization but rather vector-based. For all practical purposes it could be considered the first real home console capable of ‘3D graphics’.
Lakka – a new GUI beginning
Lakka will appear inside RetroArch starting as of version 1.1. So far, users have been using a very low-fi menu called RGUI. It is perfectly scalable from low-resolution displays to high-definition TVs, but there’s no denying it looks very much like something you would expect from a DOS program.
Lakka will be a more full-featured eyecandy UI. It will require OpenGL support inside the RetroArch version, so expect this to be usable on RetroArch PC and Android/iOS/Blackberry (PS3 maybe if it makes it for v1.1).
In terms of features and appearance, Lakka looks a lot like the PSP’s XMB frontend.
In the future, more menu drivers can be added, each being tailored towards a specific enduser preference. We have made the menu code far more generic to allow for different implementations which doesn’t require the coder to rewrite all the settings logic again and again.
You can watch a video of a prototype in action here – keep in mind that this is still a prototype and that the final version will look a lot more refined. In case you wonder, the guy showcasing it here is one of the authors responsible for the Lakka GUI – Jean-Andre Santoni (known also as kivutar).
Audio DSPs / Software Video Filters
We already touched upon this in the previous blog post about RetroArch v188.8.131.52 (which has now morphed into version 1.1). This feature has been implemented and it makes it possible to apply audio DSP filters and video software fitlters to RetroArch’s audio/video output.
We received a Blackberry Z10 phone from Blackberry sometime ago. In return, we will fully support Blackberry 10 starting as of v1.1. A new audio driver has been written, ALSA QNX, which should be far more optimal than the OpenAL driver we had before. We also intend on writing a nice Qt UI which wraps around RetroArch itself.
I know there has been a lot of discontent among Blackberry users that there have been so few releases, but rest be assured, we’re working on it.
Revamped iOS / OSX ports
I finally bought a Macbook Pro, and so I’ve been spending a lot of work on the OSX / iOS ports of RetroArch as of late. We’ve revamped nearly all of the settings so that it is possible for settings to be exposed to WIMP menus. This will be put to good use in the OSX / iOS ports of RetroArch.
The iOS version will be totally revamped as well. Cjori was working with me sometime ago on Controllers For All support. Hopefully I will be able to approach him a week before release time or so that we can do some final beta testing before we put the final polished version out.
X-Arcade Tankstick support
I received an X-Arcade Tankstick courtesy of Xgaming, and in return this device will be fully supported. Android support will be added, and I will also look into making it possible to bind it in RetroArch as two separate game controllers instead of it being recognized as a keyboard.
After v1.1, I will look into adding USB input drivers for the PlayStation3, Wii and Xbox 360 ports so that we will be able to use the X-Arcade Tankstick on thosee consoles as well without using their proprietary gamepad converter (which costs an additional $30).
Revamped Android port
Lots of work still remaining on the Android Port. The input code has been totally revamped and it should be possible to map a new gamepad directly from the menu. New input overlays have also been made (such as a a default RetroPad overlay) which works quite well.
Maybe if we make it in time we can revamp a lot of the UI code as well using our new generalized settings code which should prevent code duplication issues in the future.
Improvements to existing cores
Lots of improvements have been made to Mupen64Plus since the last new release, as well as a lot of other cores. We will also try to bring over the MAME/MESS 2014 cor e to Android – this might not appear on the Google Play Store since this will increase the APK size by about 150MB or so – instead a more fully featured version might be available on our new website.
Starting with the release of v1.1, there will be another big change – a new server (Virtual Private Server), and with it will come a buildbot. We will finally have the ability to do continuous integration tests and have daily builds for the cores and the RetroArch platform versions. The existing website will soon be moved over to the new host – the transition will be as seamless as possible to the user, so hopefully you guys won’t notice when we finally make the switch.
So when will it come?
The rest of this month will be spent by me and others feverishly working to get all of this stuff in a presentable state. We also want to do a fair bit of Quality Assurance so that this next big version will be very solid. The estimated release is somewhere in early September. A new release is contingent on all these different factors all coming together. In case some parts might take longer than expected, we might just drop a version of v1.1 with some of these features being added later. In any case, you shouldn’t have to wait longer than early September. Again, we’re sorry for some of the delays and announcements from before but we’re really trying to ensure here that this next RetroArch release will be a real big gamechanger and so the delays are justified from that perspective. Hopefully you’ll agree once it is dropped.
Also, I’m sure I neglected to mention a fair few new features as well in this writeup. In any case, there have been far too many changes since February of this year to sum up in one blog post. When v1.1 hits I will put up a more comprehensive overview of everything that has been added ,changed and improved.