RetroArch - Gadsby


Read very important linux changes!

RetroArch 1.9.10 has just been released.

If you'd like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.10 version) is scheduled to be released very soon!

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 to 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!

Highlights

RetroArch is now finally on Steam!
On September 14, 2021, RetroArch finally appeared on Steam (available here). It is available right now for both Linux (SteamOS) and Windows. See our initial release article here. Since then, we have already had over 100K+ downloads on Steam and over one million visits. Thanks to you all! We aim to make RetroArch the very best it can be.

What you need to know:

  • New cores are coming as DLC additions.
  • There is no macOS version available on Steam yet (but we'd like to!)
  • Remote Play is supported. We make no guarantees as to how well this will work.
  • Steam Cloud sync should be supported for save files.
  • There is work underway on automation - the idea is that both cores and RetroArch on Steam would be updated automatically.

Lastly, we hope that new users can be understanding of the fact that RetroArch’s UI might have a bit of an initial learning curve. We are a small team, and we definitely intend to simplify the UI at least for beginners in the coming months, but we are simply not ready yet. So we hope people are understanding of this and appreciate the swiss knife flexibility and power of RetroArch in the meantime instead of focusing on the overall complexities or whatnot of the UI/UX.

The Steam version should be updated to 1.9.10 soon.

High Dynamic Range fixes for D3D11/D3D12!

  • Fixed contrast to be more correct - now scales from 0-10 linearly and behaves more the way you'd expect it to - changed name to ditch legacy settings users may have
  • D3D11/HDR: Fixed D3D11's blend, rasterizer and topology states not being set to the sames when using HDR and leaving the menu - caused issues with PCSX2's Shadow of the Colossus
  • Added ability to skip inverse tonemapper to the shader via the constant buffer using 'inverse_tonemap' - set to 0.0f to skip
  • Fixed potential bug when swapping between HDR and SDR and the bit depth not being set correctly

Filters

1.9.10 adds a new Picoscale_256x-320x240 video filter. This uses a number of high quality, high performance algorithms developed by irixxxx for Picodrive standalone to upscale 256x224, 256x239 and 256x240 content to 320x240 (content of any other resolution is passed through unchanged).

Much like the existing Upscale_256x-320x240 filter, this is intended for use on platforms/devices with native 320x240 resolution support, where it greatly reduces aliasing while producing a significantly sharper image than conventional (hardware) bilinear filtering.

Three filter variants are provided:

Picoscale_snn_256x-320x240: 'Smoothed' nearest neighbour
Picoscale_bl2_256x-320x240: 2-level-bilinear with 2 quantized weights
Picoscale_bl4_256x-320x240: 4-level-bilinear with 4 quantized weights

Essentially, both image 'smoothness' and performance requirements increase in order of snn -> bl2 -> bl4.

Go here to see several screenshots demonstrating the output of each filter type: (click for full-size images)

These filters are highly efficient. Tested with the Snes9x 2005 Plus core (a lightweight core which is nonetheless at the upper limit of many low powered handheld devices), we see the following increase in total performance overheads when each filter is applied (note that the existing Upscale_256x-320x240 filter is included for comparison):

Filter
Performance
overheadbl2
+13%
No filter
+0%
snn
+8%
bl4
+30%
upscale_256x_320x240
+27%

The performance overheads relative to the existing Upscale_256x-320x240 filter are:

Filter
Performance overhead
snn
-69%
bl2
-45%
bl4
+14%


Thus SNN and BL2 in particular have very little performance impact.

All credit goes to irixxxx - many thanks for giving us permission to use your work in RetroArch!

In other video filter news, the Switch/libnx port now also has video filters support!

Playlist Manager - New 'Refresh Playlist' option

The manual content scanner provides a quick and easy method for generating playlists - but there exists no convenient way to update playlists that already exist. If a user adds content to a ROM directory then they must go to the trouble of reconfiguring and re-running the manual scan (including selecting the ROM directory, system name, default core, etc.); if they have simultaneously removed some files, then they are also obliged to go to the relevant 'playlist manager' menu and 'clean' the playlist. This is time consuming and tedious.

1.9.10 adds a new Refresh Playlist option to the 'playlist manager' menus. When selected, the current playlist will be re-scanned with the manual scan configuration that was last used to generate/edit the playlist. 'Refreshing' a playlist also populates all entries of the Manual Scan menu - so it is easy to tweak values should the user wish to update the allowed file extension list, etc..

In addition: a new Validate Existing Entries option has been added to the manual scan interface. When enabled, any existing playlist is checked before commencing the content scan; entries referring to missing files, or files with invalid extensions, are then removed.

Validate Existing Entries is disabled by default, but automatically enabled whenever a playlist is refreshed. Thus selecting Refresh Playlist will both add new content and remove missing/invalid entries.

Note:

  • This functionality will not work with playlists generated before this commit, since they will lack the required metadata. It will be necessary for the user to re-run a 'normal' manual scan for any playlist they might want to later refresh; thereafter, the Refresh Playlist option will appear in the relevant 'playlist manager' menu and maintenance becomes a one-button affair.
  • We can only 'refresh' playlists created via the manual content scanner - not the database scanner. When performing a database scan, there is no practical method for extracting all required metadata for a repeat operation.

3DS - Add bottom screen idle state

Some nice QoL improvement for RetroArch 3DS users! 1.9.10 allows the bottom screen on the 3DS to be disabled when idle. On compatible devices, the bottom screen backlight is toggled.

If no core is running, the bottom screen is always idle with the backlight turned off.

If a core is running with the bottom screen in it's 'default state', the bottom screen will idle in ~6 seconds. The displayed text "Tap the bottom screen to go to the Retroarch menu" fades out and the LCD backlight is disabled.

When interacted with the screen, the backlight turns on and toggles the menu as usual.

When in the menu / paused, the bottom screen remains active.



RetroAchievements/Cheevos improvements

Don't write achievement credentials to override

Ignores changes to cheevos_token, cheevos_password, and cheevos_username when generating config override files.

While this is particularly important for not remembering a stale authentication token, not entering any credentials until after loading content, and then saving the override could lead to the actual password being stored in the override even after the authentication token is generated and put in the master settings file.

Since neither the authentication token nor the password should be stored in the override file, I believe it also makes sense to exclude the username, as having a per-override username would also require a per-override authentication token or password. If a players wants to have a separate retroachievements user for a specific core, they can still manually add the entries to the override file, but those will be cleared out any time they update the override file from within the application. A better solution would be to use separate master configs and launch using the --config option.

Disable slowmotion when enabling hardcore mode

There's already code preventing the user from toggling (or otherwise using) slowmotion when achievement hardcore mode is enabled. Slowmotion provides an advantage for the user's reflexes, so we don't allow it in hardcore mode.

This addresses an issue where the user could enable hardcore mode with slowmotion already toggled on, and it would remain on. The user would be locked in slowmotion as the toggle would be disabled, but with enough patience, it could be worth it. With this change, slowmotion is disabled when enabling hardcore mode.

Changelog

1.9.10
  • 3DS: Add bottom screen idle state
  • 3DS: Add unique IDs for Gearboy/Gearcoleco/Gearsystem, correct CAP32 code
  • 3DS/SAVESTATES: Fix RAM states to file when core deinits
  • AUDIO/MIXER: Pad sample buffers to prevent potential heap-buffer-overflows when resampling (fixes crash when using 30 kHz menu audio files)
  • AUDIO/LINUX/SNAP: Add JACK support
  • CHEEVOS: Don't write achievement credentials to overrides
  • CHEEVOS: Disable slowmotion when enabling hardcore mode
  • D3D9: Fixed MVP matrix issue for RGUI texture (main game frame still won't show up though)
  • D3D11/D3D12/HDR: Fixed contrast to be more correct - now scales from 0-10 linearly and behaves more the way you'd expect it to - changed name to ditch legacy settings users may have
  • D3D11/HDR: Fixed D3D11's blend, rasterizer and topology states not being set to the sames when using HDR and leaving the menu - caused issues with PCSX2's Shadow of the Colossus
  • D3D11/D3D12/HDR: Added ability to skip inverse tonemapper to the shader via the constant buffer using 'inverse_tonemap' - set to 0.0f to skip
  • D3D11/D3D12/HDR: Fixed potential bug when swapping between hdr and sdr and the bit depth not being set correctly
  • D3D11/D3D12/HDR: Added numerous helper functions to help create the correct values to colour the UI - normally the white UI elements should be rendered at paper white not max brightness for various reasons
  • BUGFIX/ANDROID: Fix crash that could happen on Android with Sameboy core - would crash on rumble function
  • GFX/WIDGETS: New regular widget message appearance
  • INPUT/MOUSE: Add distinct mouse zero index label for drivers that do not support multimouse
  • INPUT/RUMBLE: Add generic rumble gain to input settings
  • INPUT/UDEV/X11: Add workaround to fix keyboard input when using X11 + Udev
  • LIBNX/SWITCH: Add Video Filters support
  • LOCALIZATION: Fetch translations from Crowdin
  • OPENDINGUX/BETA: Disable OpenAL
  • PLAYLISTS: Add 'Refresh Playlist' option
  • STEAM: Initial release on Steam
  • UWP/VFS/XBOX: Improvements and bugfixes to UWP VFS driver
  • VIDEO/REFRESH RATE: Automatic PAL/NTSC refresh rate switch where available - as long as the platform display server allows changing refresh rates and the display has the desired refresh rate
  • VIDEO FILTERS: Add 'Picoscale_256x-320x240' video filter
  • WIIU/HID: Fix analog inputs on HID devices
RetroArch - Gadsby


Hello everyone!

We have been busy working on the Steam version to improve compatibility and stability. Right now, we need to make some changes for the Linux platform. For a long time, we have manually released everything on the Steam, this has now been automated for both platforms. Looking forward you can expect regular updates and soon a nightly branch. However, to simplify RetroArch on Steam we are moving to the same folder structure on all platforms. Additionally, on Linux, we are moving from the AppImage-based release to using the newer soldier runtime available in Steam to increase the likelihood of RetroArch working out of the box on more Linux distributions.

As there is a small risk for breakages for Linux users we felt the need to properly inform about this. So what does this change mean? Currently, the RetroArch base directory on Linux is RetroArch-Linux-x86_64-Nightly.AppImage.config/retroarch which you can see the retroarch's itself in a subdirectory instead of being in the main directory of the game, so our goal is basically same directory structure for every platform! Due to the chance of data loss our recommendation is to copy everything you care about, for example; save files, options, your cfg files etc. somewhere safe outside the Steam install. While Steam Cloud should keep everything safe, we do still feel the need to mention this, as the changes are not risk-free.

The update is currently scheduled to go out the 3rd of October together with the next frontend release.

Please contact us if you have any concerns!
RetroArch - Gadsby


Today, RetroArch has finally been released on Steam for both Windows and Linux/SteamOS. The Store page can be found here.
Differences between the Steam version and regular version
Functionally, RetroArch on Steam should be identical to the version you can get on our website, except for the following:
  • There is no Core Downloader to stay compliant with Valve/Steam's Terms of Service.
Instead, you can download and install cores in either one of two ways:
  • Manually dragging the core file (a .dll file on Windows, .so on Linux) over to the 'cores' directory of RetroArch Steam.
  • Installing the core as a DLC.
10 Cores Available At Launch
We have decided to launch with 10 cores at launch. These cores are available both for Linux/SteamOS and Windows users. A 'core' is a program that RetroArch loads. It can be an emulator, game, or any other program. RetroArch loads this 'core', and from there RetroArch becomes the program.

The cores currently available as DLC on Steam are as follows:
First, you install RetroArch on Steam. After that, you can install the cores either on Steam's browser page by clicking 'Manage DLC' and easily installing them all at once, or you can go to each respective page and install it from there.

More cores will be coming as DLC soon. We have no ETA on when these will arrive, but it will likely be a dripfeed of new cores on a periodic basis as it takes a lot of time preparing the pages, descriptions, logos, previews and whatnot that a Steam page requires.
Things to know
  • RetroArch on Steam is available for 64bit Windows/Linux users only for now. We are not sure if we will be supporting 32bit on Steam as well.
  • Builds right now are not automated but might be later on.
  • There is no macOS version available on Steam yet. There are no plans yet for this, but if there are updates on this, we will tell you.
  • Remote Play is supported. We make no guarantees as to how well this will work.
  • Steam Cloud sync should be supported for save files.
Lastly, we hope that new users can be understanding of the fact that RetroArch's UI might have a bit of an initial learning curve. We are a small team, and we definitely intend to simplify the UI at least for beginners in the coming months, but we are simply not ready yet. So we hope people are understanding of this and appreciate the swiss knife flexibility and power of RetroArch in the meantime instead of focusing on the overall complexities or whatnot of the UI/UX.
RetroArch - Gadsby


If you'd like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.9 version) is scheduled to be released very soon!

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 to 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!
Highlights
High Dynamic Range support for Direct3D 11/12 drivers!


We have now added HDR (High Dynamic Range) support to RetroArch's Direct3D 11/12 driver thanks to a generous contributor!
l
What you should know:

* The HDR settings can be found in Settings -> Video when you are using the Direct3D 11 or 12 driver. In order to change to D3D11/12, go to Settings -> Drivers, and change Video to 'D3D11/12'.

In case you don't see the option, and you have made sure first that your driver is set to Direct3D 11/12, it might be that HDR is disabled in Windows 10. Make sure HDR is enabled in Windows in case you don't see it pop up. In Windows, go to 'Display Settings' (pictured below) and make sure the HDR setting is turned on. If it doesn't show up, your display device might simply not support HDR.



* We now let Direct3D 11 compile frontend shaders against Shader Model 5.0 (SM 5.0) in case your graphics card driver supports D3D11 Feature Level 11.0 or higher. Previously, it would always compile frontend shaders against Shader Model 4.0, and unfortunately the AMD FSR shader that has just been added needs SM 5.0 capabilities in order to work.

* While HDR already works on the UWP version on PC, on Xbox there are currently several deal-breaking display issues with it, so it remains disabled there for now.
<h3>Thoughts on future RetroArch HDR support</h3>
* We still need HDR implementations for other modern graphics APIs, like Vulkan (and Metal and/or OpenGL core if possible). We have no ETA on when this will be done. Ideally a generous contributor submits it to us, just like what happened with D3D11/12.
* Slang [the shader format] will need HDR support as well in order to take full advantage of the expanded gamut. Right now the author that made the D3D11/12 implementation made a reference shader that he says can already take advantage of HDR - check out his new shader 'integer-scaling-scanlines.slangp'. You can find this preset inside the folder 'scanlines/shaders'. It is an integer scaling mode pixel perfect scanline shader for use with low resolution monitors, underpowered machines, the new HDR mode in RetroArch and for people who want pixel sharp scanlines with absolutely no moire patterns (but with the downside that integer scaling must be on and so not fill up the screen or over fill the screen).
* It needs to be pointed out that HDR support on Linux in general is very premature right now compared to Windows. Windows happens to be a bit further along at this point in this department. Hopefully this inequality will be addressed shortly. But just know that this might tie our hands a bit.
3DS Bottom touchscreen menu
https://twitter.com/i/status/1434063889122140160

A fully interactive touchscreen menu for the bottom screen of the 3DS has been added by the very generous contributor bulzipke!

The following functions are currently available on this screen:

Resume Game
Toggles RetroArch menu, closes it and goes back to the game.
Create Restore Point
If you touch this, save it to SD card.
If the Save State Thumbnails option is enabled, you can see Screenshots at the Load Restore Point
Load Restore Point
Shows the date when you saved it. (And show Screenshot if exists). If you change the State Slot, bottom menu will refresh Screenshot / date / state.



Some important convenience features came as a result of this too. Savestate loading / saving to RAM instead of to disk was added, so it's possible to have temporary suspend points without writing to disk. The state is only saved to disk when either:

* Closing the lid of the 3DS
* Pressing the HOME button
* Exiting RetroArch

This gives things a very seamless feel. Not only that, the saving of state to RAM is orders of magnitude faster vs. saving to disk, so now while doing these operations, things no longer slow to a crawl.

There's also the option to disable the bottom screen -
Settings->User Interface->3DS Bottom Screen

Although this option will not affect performance, it is estimated that "Tap the Touch Screen to go to the Retroarch menu" text may add additional battery consumption to draw the screen. So it's always nice to have the option to toggle it off if need be.
AMD FidelityFX Super Resolution (FSR) has been ported to Libretro/RetroArch!
https://twitter.com/libretro/status/1433511745641922572

A very generous contributor submitted a fully working implementation of AMD FSR as an slang shader for use in RetroArch! This shader should be fully compatible with the following video drivers in RetroArch:

* Metal
* OpenGL Core (or at least 4.0 with regular OpenGL driver)
* Vulkan
* Direct3D 11 (if your card supports Direct3D 11 Feature Level 11.0 or higher)
* Direct3D 12

We have had to update our Direct3D 11 driver to allow for the use of Shader Model 5.0 when your GPU supports it, since this shader requires SM 5.0 features and wouldn't work on D3D11 without it.

The contributor mentions in his pull request that implementing AMD FSR as a pixel shader seemed to work out just fine despite AMD insisting it is supposed to be implemented as a compute shader.

On top of this straight port of FSR, he also took the time to remake the SMAA shader. It is now supposed to be less of a port and just uses the original library unmodified, while adding a few features and higher quality search textures. The contributor wasn't too happywith the quality of this AA and wanted to check if it could be improved, mainly because FSR requires good looking AA (Anti-Aliasing) otherwise it wouldn't make much sense. In the end, quality gains were marginal, pretty much imperceptible. Despite that, there is also an AMD FSR+SMAA preset that you can use.

You can see some comparison images down below - to the far left is the image without any shaders, in the middle is AMD FSR, and to the right is AMD FSR + SMAA applied.



Ys Seven undub with the PCSX2 core in RetroArch. The image is zoomed in here by 2x. Left: no shaders, middle: AMD FSR shader, right: AMD FSR + SMAA.





1st image: Gradius V with the PSCX2 core in RetroArch, zoomed in to showcase how FSR can combat aliasing. Left: no shaders, middle: AMD FSR, right: AMD FSR + SMAA. Note how the jaggies become less pronounced by applying FSR, and how they become even less with SMAA added to the mix.

2nd image: Gradius V with the PCSX2 core in RetroArch, zoomed in. Top: no shaders, middle: AMD FSR, right: AMD FSR + SMAA.



3rd image: Panzer Dragoon running on Kronos with AMD FSR shader (click on the image to see it without shader applied).
Add enhanced search functionality to the 'Cheats' menu
1.9.9 adds enhanced search functionality to the Quick Menu > Cheats menu, similar to that in the core downloader and core manager menus:



In addition, the search feature may be used to filter cheats that are currently on or off: this is done by searching for the 'key' string .on or .off

* The key string is case insensitive
* The actual on/off text is localised - it matches whatever is currently shown as the cheat value (i.e. if the user language is set to French, the on key is .Activé
* The leading period was chosen because (a) it should be available on most keyboard layouts, (b) it is available on the first 'page' of RetroArch's OSK and (c) it is easier to type than enclosing the string with brackets, as it is displayed in the cheat value text


Faster sinc resampler and audio conversion for ARM NEON platforms
Previously, the audio sinc resampler and the audio conversion functions only had optimized SIMD codepaths written in ASM for ARM NEON. There are more and more platforms/toolchains now that prohibit or make it difficult to use assembly routines, or strongly recommend you resort to SIMD intrinsics instead.

So we have done exactly that now. All the audio conversion routines (float to signed 16bit integer, signed 16bit integer to float) and the sinc audio resampler now have ARM NEON intrinsic optimized codepaths available instead of just defaulting to C codepaths. This should contribute to performance on platforms like the Mac M1, Android devices, the PS Vita, iPhone devices, and ARM Linux hardware in general (both AArch64/ARMv7).

We have still left in these legacy ASM codepaths behind an ifdef in case someone still has a use for it, but from now on we will try to make sure to offer both intrinsic and ASM codepaths whenever possible, or intrinsic only if both can't be provided.
Important fixes
Fix cheat when using second instance runahead
Before, using cheats when second instance runahead was enabled caused undefined behaviour because the cheats are only applied to the primary core (and not the secondary one). 1.9.9 fixes the issue. It also ensures that cheats are correctly reapplied when second instance runahead is toggled on while content is running.

Fix menu sounds (audio mixing) when using the 'sinc' resampler with quality lower than 'normal'
Before, if the sinc resampler was used with a quality of lower or lowest, then enabling any 'menu sounds' (including cheevos notifications) would completely break in-game audio. 1.9.9 fixes the issue by ensuring that all audio mixer resamplers use the same quality setting as the main one. In addition, we ensure that the same backend driver is used.

1.9.9 also fixes a memory leak when loading system sounds without a driver reinit (i.e. when toggling menu sounds via the menu)

Fixed several crashes that could occur during fullscreen toggle
Fullscreen toggle should now be more robust in cores like PCSX2, Flycast and other 3D-based emulator cores.

Add option to (force-)write current core options to disk
RetroArch saves core options automatically when closing content - but if a badly behaved core causes a crash on close content, then the current core option settings will be lost.

1.9.9 adds a new Flush Options to Disk entry to the Quick Menu > Options > Manage Core Options menu. When selected, this will force the current core options to be written immediately to the active options file.

Since 99% of users will not need this functionality (it was requested for users testing the PCSX2 core) the entry is hidden by default, with visibility controlled via a new Settings > User Interface > Menu Item Visibility > Quick Menu > Show 'Flush Options to Disk' option.

This PR also fixes a rather nasty bug related to saving core options: At present, if a user has Use Global Core Options File enabled, and they create then delete a per-game or per-content directory options file via the Manage Core Options interface, when the current options are re-saved to the global file then any settings not related to the current core will be removed (!). This has been fixed by ensuring that all locally stored config file data is properly updated whenever per-game or per-content directory options files are deleted.

Highlight currently selected value in Shader Parameter drop-down lists

Before, when opening a shader parameter drop-down list via Quick Menu > Shaders > Shader Parameters, the selection cursor would always 'reset' itself to the top of said list. 1.9.9 ensures that the current parameter value will be auto-selected and marked.

Note that we may replace these shader parameter drop-down lists with keyboard input at some point, but we might as well fix this selection bug in the meantime (since it is so easy to do!).

Allow 'Vertical Refresh Rate' to be entered manually via keyboard/onscreen keyboard

Making significant changes to Settings > Video > Output > Vertical Refresh Rate (e.g. 60 Hz -> 50 Hz) is quite tedious, since holding left/right only modifies the value in 0.001 Hz steps.

1.9.9 adds the ability to set this parameter 'manually'. When Vertical Refresh Rate is selected, a new value can be entered via the OSK or physical keyboard.

For current settings where very long dropdown lists are spawned, we might consider switching over to this style of input instead.

Linux - udev - Look for "ID_INPUT_KEY", not "ID_INPUT_KEYBOARD"
Very important contribution by icculus (of SDL fame) -

This fixes programs using /dev/uinput to create a virtual keyboard failing to be detected on startup. Usual symptom is some sort of GPIO-based controller on a Raspberry Pi that looks like a keyboard to the OS and can control EmulationStation, but fails to work in-game unless you restart the controller's program while the game is running (in which case udev_input.c's hotplug code, which was using the correct string, would pick it up).

Core info cache files are now portable

Core info cache files should now be portable.

The core info cache stores absolute core paths, which breaks portability (i.e. if the cache is enabled and the core directory is moved, cores can no longer be loaded).

In truth, it is a mistake to cache the core path in the first place, since this is already retrieved from the filesystem regardless of whether the cache is enabled. 1.9.9 therefore removes core paths from the info cache, so the correct (dynamically determined) path is always used.

As a result, iOS now has core info cache files re-enabled again, which should lead to an increase in overall core info performance.
Changelog
1.9.9
  • 3DS: Add bottom touchscreen menu
  • 3DS/SAVESTATES: Save and load save states to and from RAM
  • AUDIO/MIXER: Ensure than menu sounds are re-enabled when calling CMD_EVENT_AUDIO_REINIT
  • AUDIO/RESAMPLER/MIXER: Fix menu sounds (audio mixing) when using the 'sinc' resampler with quality lower than 'normal'
  • AUDIO/CONVERSION/ARM NEON: Add intrinsic NEON versions for float_to_s16/s16_to_float - should lead to optimized codepaths for AArch64/ARMv7 architectures without being dependent on ASM codepaths.
  • AUDIO/RESAMPLER/ARM NEON: Add intrinsic NEON version for lanczos sinc function - should lead to optimized codepaths for AArch64/ARMv7 architectures without being dependent on ASM codepaths.
  • CHEEVOS: Upgrade to rcheevos 10.2
  • CHEATS: Add enhanced search functionality to the 'Cheats' menu
  • CHEATS/RUNAHEAD: Fix cheats when using second instance runahead
  • CONFIG: Add option to (force-)write current core options to disk (Quick Menu)
  • CORE INFO CACHE: Remove core path from core info cache. Should make core info caches portable now (for example: you can move RetroArch to a separate dir and they would still work).
  • D3D11: Use Shader Model 5.0 for frontend shaders if D3D11 Feature level is at least 11.0 or higher. Should fix some new shaders that require SM 5.0 (like AMD FSR)
  • D3D11: Add HDR support (not working for Xbox for now)
  • D3D12: Add HDR support (not working for Xbox for now)
  • EMSCRIPTEN: Fixed web player bug with filesystem and runtime
  • INPUT/OVERLAY: Fix overlay input when analog to digital mapping is enabled
  • INPUT/UDEV: Look for "ID_INPUT_KEY", not "ID_INPUT_KEYBOARD"
  • INPUT/WINRAW: Fix crash when overlay is enabled
  • MAC/METAL: Add Discord RPC support
  • MENU: Allow 'Custom Aspect Ratio (X Position)/(Y Position)/(Width)/(Height)' to be entered manually via keyboard
  • MENU: Allow 'Vertical Refresh Rate' to be entered manually via keyboard
  • MENU/SHADERS: Highlight currently selected value in Shader Parameter drop-down lists
  • STABILITY: Safer way of avoiding the race condition in audio_driver_sample/audio_driver_sample_batch - we can check audio-suspended to see if we're doing a fs/windowed toggle - enhances stability when fullscreen toggling/tearing down context
  • STABILITY: When audio driver write callback function fails, don't turn audio off completely - look if audio_driver_output_samples_conv_buf is non-NULL first before we attempt to write audio - enhances stability when fullscreen toggling/tearing down context
  • STABILITY: Input robustness for cores that use internal threading (full teardown/setup), no audio should be processed at this point in time
  • VIDEO: Screen resolution list sanitizing
  • VULKAN: Fix some Vulkan validation layer errors
  • UWP: Updated icons courtesy of Danp142
  • UWP/XBOX: Disable CPU model check on Xbox as it doesn't work and can even crash
  • UWP/VFS/XBOX: Code cleanup and simplification of UWP VFS driver
RetroArch - Gadsby


If you'd like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.7 version) is scheduled to be released a week from today.

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!
Highlights



New RetroFW port
We added support for OpenDingux before for JZ4770-based handhelds. After this, we added support for RetroMini RS-90 devices.

And now thanks to Poligraf, we have a working build for all the JZ4760-based handheld devices running RetroFW. RetroFW is a Dingoo based firmware runnin on the MIPS 4760 which is around 50% the speed compared to other devices running Opendingux.

Which devices does this cover?
  • RS-97
  • LDK
  • RG-300
  • Powkiddy Q80

A full listing can be found here.

  • 29 cores available at launch: Atari800, BlueMSX, Cap32, FCEUmm, fMSX, FreeCHAF, FreeIntv, FUSE, Gambatte, Genesis Plus GX, gpSP, GW, Handy, LRMAME2003, LRMAME2003 Plus, Mednafen PCE Fast, NXEngine, O2EM, Picodrive, Pokemini, Potator, Prboom, Prosystem, QuickNES, RACE, Retro8, SMS Plus, Stella 2014, Vecx

We have been told these cores all run well on the hardware.

All of these low powered handheld devices help us tremendously in optimizing our cores for the low end spectrum of hardware devices. gpSP, PCSX ReARMed and Picodrive are already starting to reap the benefits of it.

Core option categories
We are going to be making a persistent effort now to enhance RetroArch's UX and lower the acessibility curve. To that end, we now have also implemented core option categories support.

Up to this point, every core option in a core (Quick Menu -> Options) has all been shown in a a flat alphabetical list. Users can quickly get confused if they have to scroll down a massive list of options.

So, 1.9.8 finally adds core option categories. Options assigned to a category will be displayed in a submenu of the main core options menu on supported frontends. For example - here we assign Gambatte's mulitplayer options to a Game Boy Link category:





If you do not like this new behavior, there are always options to turn it off. Go to Settings > Core > Core Option Categories setting (enabled by default). When disabled, core option categories are ignored, and core options will effectively be displayed using the old v1 format.

Cores that already support core option categories
Core option categories have to be specifically added per core. Some of the cores that already support core option categories are as follows:
  • Final Burn Neo
  • Mupen64Plus Next
  • Beetle Saturn
  • Beetle PSX
  • Beetle PCE
  • Beetle PCE Fast
  • Genesis Plus GX
  • Snes9x 2010/2005/2002
  • DOSbox Pure
  • DOSbox Core
  • UAE (Amiga)
  • VICE (Commodore 64)
  • Have you ever noticed RetroArch starting a game in windowed mode and then blowing up the window to ridiculous sizes that exceeds the boundaries of your desktop? Well, we now have a solution for that!At present, when RetroArch is in windowed mode with Remember Window Position and size disabled, the window size will be equal to the core provided base_width/base_height multiplied by the Windowed Scale. This is potentially 'catastrophic': if a core has a very large base_width/base_height (e.g. PPSSPP with a x7 internal scale factor) and Windowed Scale is set to the default x3, then the window size can be enormous - potentially exceeding the capacity of the host GPU and causing RetroArch to crash.1.9.8 adds two new options:
    • Settings > Video > Windowed Mode > Maximum Window Width (default: 1920)
    • Settings > Video > Windowed Mode > Maximum Window Height (default: 1080)
      ...which can be used to cap the maximum window size to a 'sane' value.
    The PR also cleans up the Settings > Video > Windowed Mode menu, auto-hiding options where required, and re-initing drivers when toggling Remember Window Position and size. Also, since the 'remember' part of Remember Window Position and size is only enabled for Windows, an alternate Use Custom Window Size is provided on other platforms.
    Auto-updating core option menu visibility updates without toggling Quick Menu
    Cores are able to show or hide their options via the RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY callback on supported fontends. A significant shortcoming here is that if a change to one core option (via the frontend) affects the visibility of another option, the frontend cannot update the menu state until the core has run for at least one frame. So with the core options menu open, visibility updates cannot happen in real-time - instead, the user must toggle the quick menu off then on before the menu will change. This is ugly and confusing.1.9.8 adds a new RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK environment callback which allows the core to register a function that enables the frontend to (a) force a core-side option visibility update and (b) allows the frontend to check whether option visibility has changed. This means all show/hide operations can now generate real-time menu updates.
    Windows
    Plenty of important fixes for Windows users.If you experienced lockups in the past when disconnecting an audio device while using the WASAPI audio driver, well, rejoice, this will no longer happen. Simultaneous shift sticky fixes were made to the DirectInput input driver. Dinput would not send WM_KEYUP for both Shifts if they were pressed together and released, resulting in sticky Shifts= Pinball games ruined in DOSBox.The following fix was made to the Windows RawInput driver - the Left Alt key could get stuck when Alt-Tabbing. No more. The keyboard can now also be mapped to analog input axes, meaning you can bind the left and right analog stick on the RetroPad to your keyboard keys.
    PlayStation2 version
    1.9.8 solves the flickering issues that appear in the cores that use the FRAME_SKIP as Snes9x2002 does.Also, 1.9.8 basically mounts HDD partition if RetroArch actually started from the HDD unit.In this way, we skip the mount partition if the user just wants to use USB.
    macOS/OSX version
    Plenty of important fixes for macOS users this time!There were several serious memory leaks with the Metal video driver. These have now been fixed.Serious bugs related to the input autodetection subsystem have finally been fixed. Now when you connect a gamepad, it will no longer try to attach the same pad to two controller ports simultaneously. This has been a longstanding bug that we're glad has finally been consigned to the dustbin of history thanks to the help of a generous contributor who did quite some work to delve deep into this issue. We also made sure everything still works across a wide variety of macOS machines (from a PowerPC Mac running OSX 10.5 to an Intel and ARM Mac running more recent macOS versions).
    WiiU version
    Lots of improvements have been made once again to the WiiU port.All the libretro RPX cores are now compressed. Not only do they load faster (leading to faster startup times), but it means you have a lot more space left on your SD card.L3 and R3 buttons have been fixed on several gamepads, they were previously completely nonfunctional.Furthermore, promising work is underway for a PlayStation1 emulator core running on RetroArch WiiU. More on that later once more news is forthcoming.
    UWP/Xbox versions
    We have been fixing several bugs with the UWP port, many of these affecting in particular RetroArch users on Xbox One/Series.Microsoft recently released a new Dashboard update that caused some breakage for existing RetroArch installs. We have managed to fix the startup problem that occurred on the latest dashboard. We also fixed the onscreen keyboard display which was previously completely glitched out.Note that on the latest Dashboard, some compatibility problems still persist. For instance, it has been reported that several games on PCSX2 no longer work as of the recent update. This will require investigation and it is our guess if anything can be done about this, we will have to determine this after more investigation has occurred. For now, you might experience scaling issues with some of the ANGLE/GL powered cores like Mupen64Plus Next and Flycast because of the Dashboard update. We hope that we will be able to transition from ANGLE to something like GLon12 soon. What this would buy us is full desktop OpenGL support instead of just OpenGLES. This would mean a more complete superset of OpenGL (up to 3.3 from what we can hear), more cores that would work out of the box instead of custom cores made to work with ANGLE, etc. We will see if we succeed in this, but that's something for a later version.In the meantime, we have also enabled Translation features. Note that we haven't been able to implement the Text-to-Speech accessibility feature yet, but all other features should be there now for experimentation.We have also re-enabled the "Explore" tab on the Main Menu. We haven't found any issues with this anymore after the recent bugfixes/improvements we made to the underlying database code, but let us know if there are any more issues on that front.Several cores that used the libretro VFS subsystem and/or CHD loading previously no longer worked. Examples include the Beetle cores. This has been fixed.
    Screen resolution settings improvements
    Currently the "Screen Resolution" list wrongly alters also video_refresh_rate to the rounded value, as in 59.940 Hz becomes 59.000.This change makes sure all the 59.94 multiples (59/119 etc) result in the proper float value instead of integer.Also, previously notifications when setting the refresh rate would repeat itself twice. This has been fixed.
    Changelog
    1.9.8
    • AUDIO/WINDOWS/WASAPI: Stop deactivating audio on fast forward
    • CHEEVOS: Hide challenge indicators when resetting
    • CHEEVOS: Support for more than 64 memory regions
    • CHEEVOS: Automatically retry 'http error code -1'
    • CONTENT INFORMATION: Show content info label+path rows always
    • CORE OPTIONS: Core option categories implemented
    • CORE OPTIONS: Add option to disable core option categories
    • D3D10/11/12: Fix gfx_display_draw_texture - fixes OSK (On-Screen Keyboard) issues
    • DATABASE: Fix heap-buffer-overflow when fetching CRC values
    • DATABASE/EXPLORE: Fix CRC32 reading in explore menu
    • DATABASE/LIBRETRODB: Fix writing of numerical values
    • DATABASE/LIBRETRODB: Fix libretro-db loading on big endian platforms
    • DUMMY CORE: Skip state_manager_event_{deinit/init} when core type is dummy, should skip warning spam 'Implementation uses threaded audio. Cannot use rewind..' when using rewind
    • INPUT/UDEV: Limit udev device scan to subsystem 'input'
    • INPUT/SDL2/WINDOWS: Fix keyboard event keycodes
    • INPUT/WAYLAND: Fixes a bug where the first player's mouse, pointer, and lightgun are echoed to the other ports. Now, those other ports correctly report zero. In the future support for multiple mouselike devices will need to be added, which is a bigger project
    • INPUT/WAYLAND: The driver now respects keyboard_mapping_blocked
    • INPUT/WAYLAND: When possible, deprecated lightgun defines are replaced with the new ones. The coordinates are still using the old relative callbacks
    • INPUT/WINRAW: Trigger joypad driver reinit on DEVICECHANGE - avoids fullscreen toggle
    • INPUT/WINRAW: Alt sticky fix
    • INPUT/WINRAW: Prevent Alt getting stuck when Alt-Tabbing
    • INPUT/WINRAW: Add pointer status
    • INPUT/WINRAW: Add missing analog keybinds
    • LIBNX/SWITCH: Fix poll missing for controller 2-8
    • LIBNX/SWITCH: Fix layout not applied correctly and hangs when splitting joycons
    • LIBRETRO: Core options category API implemented
    • LIBRETRO: Fix RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE callback when runahead is enabled
    • LIBRETRO: Add environment callback for enabling core option menu visibility updates without toggling Quick Menu
    • LOGGING: Starting logging and verbose mode before first config load
    • LINUX: In some Linux Desktop Environments, like Budgie, task bar feature is unable to pin applications. With StartupWMClass= present in .desktop file, it is possible to pin the application
    • LOCALIZATION: Fetch translations from Crowdin
    • MENU: Relocate 'Manage Playlists' to top
    • MENU: Fullscreen resolution width/height settings no longer require 'advanced settings'
    • MENU/REFRESH RATE: Fix double notifications with refresh rate settings
    • MENU/OZONE: Ensure the existence of values used in selection calculation
    • MENU/OZONE/VULKAN: Casting to unsigned caused an integer overflow and after float promotion would lead to 'x' being a garbage value, leading to problems when this value was passed to vkCmdSetViewport. This stops Vulkan validation layers from complaining about it
    • METAL: Fixed font driver memory leaks
    • MOUSE: Change default mouse index to port index
    • MOUSE: Friendly names for mice where available
    • OSX: Fix some memory leaks
    • OSX: Fix controller duplication bug
    • PS2: Implement alpha for the video driver
    • PS2: Aspect ratio handling
    • RETROFW: Initial port
    • UWP/XBOX: Enable Explore tab by default - seems to work fine
    • UWP/XBOX: Fix startup issues with latest Xbox Dashboard updates - ANGLE cores still show up wrong
    • UWP/XBOX: fix issue where files where opened as OPENALWAYS instead of OPENEXISTING this fixes beetle cores
    • UWP/XBOX: fix issue where filesizes where not returned properly, this fixes loading arcade dat files
    • UWP/TRANSLATION: Enabled translation services for both UWP MSVC2017 and 2019. No TTS speech yet.
    • VIDEO: Fix refresh rate 59Hz rounding
    • WINDOWS: Remember original refresh rate
    • WINDOWS/VULKAN: Refresh rate fixes + cleanups
    • WIIU: Fix L3/R3 buttons
    • WIIU: Compress RPX libretro cores
    • WIIU: Add ICInvalidateRange (necessary for JITs)
    • WIIU: Slight filesystem optimisation
    • WIIU: Add option for running without core info (emscripten-style)
    What's next
    It has been often requested during our project's history, but yes, we finally want to do something on the UI/UX front. We have been considering introducing an 'Easy Mode' that should aim at making things much less of a maze to navigate for non savvy users.Stay tuned for more info!
Aug 1, 2021
RetroArch - Gadsby


Lakka 3.3 release


New version of Lakka has been released!


We are happy to announce new and updated version of Lakka.

Changes since version 3.2:


  • RetroArch updated from 1.9.5 to 1.9.7
    • Optimized scanning of large data sets
    • Added support for mapping multiple controllers to a single input device
    • ‘Analog to Digital Type’ usability improvements
    • Updated translations from Crowdin
  • Cores updated to their most recent versions
    • Dolpin: add dolphin-emu/Sys folder to RetroArch system folder
    • New: np2kai core (PC-98)
  • Generic: enable MIDI sequencer support
  • Generic: add Gamecon support
  • RPi: disable 4K modes

You can download the latest release from Lakka download page. If you want to follow the development of Lakka more closely, you can download latest Lakka nightly builds.

If you want to show your support for further development of the Libretro projects and ecosystem, you can learn more here.

Happy retro-gaming!

read here as well.

RetroArch - Gadsby


If you'd like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.7 version) is scheduled to be released a week from today.

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!

NOTE: We will update this notice as soon as we have uploaded the 1.9.7 version for UWP/Xbox as well to our server. For now, these still point to the previous version (1.9.6). We thank you for your understanding.
Release notes
A brand new platform port has been added for RetroMini RS-90 (and similar devices). These are low-powered mass-produced MIPS handheld devices that are sold for very cheap. To us, it is yet another opportunity to optimize our cores for low-end devices.

PlayStation2 users are in for a treat. gpSP (Game Boy Advance emulator core) has been optimized and tuned for PS2 to the point where it should run most games at fullspeed. RetroArch should also have a bitmap font driver implemented now instead of relying on gsKit like before.

WiiU users benefit from many improvements to file I/O optimizations (faster loading/startup times), network speed, and menu/font rendering.

Switch users should benefit from the 7zip compatibility added to this release.

Many improvements to the CRT SwitchRes feature have been made. For more details, see 'Changelog' below.
Highlights


New RetroMini RS-90 port

Following on from the success of our OpenDingux port for JZ4770-based handhelds, we are pleased to announce official support for RetroMini RS-90 devices running OpenDingux Beta. This tiny console has one of the weakest CPUs we have ever targeted; it has just 32 MB of RAM, an ultra-low resolution 240x160 display and is available for as little as $20 - but still it provides an enjoyable RetroArch experience.
  • All regular frontend features are working (excluding rewind and runahead support)
  • RGUI offers surprisingly comfortable performance at 240x160 (even thumbnails are supported - with a fullscreen toggle mapped to the start button)
  • Content can be displayed with integer scaling, or nearest neighbour and semi-linear software filters are provided for fullscreen viewing
Given the limited specifications of the hardware, a modest section of cores are available. The following generally run at full speed:
  • Gambatte: All GB games (GBC games have mixed success)
  • Genesis Plus GX: Master System & Game Gear games
  • Pokemini
  • QuickNES
...while these offer varying degrees of playable content with frameskipping enabled via core options:
  • Mednafen PCE Fast
  • Picodrive: Genesis
  • Potator
  • RACE
  • gpSP
For the best results, we recommend applying a per-application CPU overclock for the RetroArch application: highlight RetroArch on the device's home screen, press the select button > Edit RetroArch, and set Clock Frequency to 420 MHz (depending on the chip, a lower value may be required, or even higher may work correctly).
PlayStation2 - playable Game Boy Advance emulator added
https://twitter.com/fjtrujy/status/1413833994983071744

https://twitter.com/fjtrujy/status/1417898776510013440

gpSP should now be available for RetroArch PS2 starting as of version 1.9.7. This is a Game Boy Advance emulator core. Davidgf has been working hard on this core for the past few months and the results speak for themselves - this should be the first time that a PlayStation2 is able to run Game Boy Advance games at fullspeed.
WiiU improvements
In addition to the improvements listed for WiiU previously, there's also the following to mention:

Fix inputs breaking when connecting/disconnecting remotes
When a KPAD controller (Wiimote, Pro Controller, etc.) gets disconnected or has its accessory changed, the Wii U's API gives nonsensical results for a little while, even while claiming these results have no errors whatsoever. This was wreaking havoc in the input system and ended up leaving the controllers useless.
1.9.7 attempts to work around the console's API by filtering out some of the unknown results.

Download progress indicator fixed for large transfers
An important bug was fixed that was causing issues while downloading the Assets from within the program. When downloading a large file on a 32-bit platform, the progress indicator will get pinned to 100% after downloading roughly 40MiB. This causes a lot of stress for assets.zip, where the 40MiB mark is about halfway. This bug has been fixed. Note that this improvement is not only beneficial for WiiU but should benefit other 32-bit platforms in general.
Linux / xdg-screensaver improvements
1.9.7 provides a workaround for the long-standing issue of "protocol error" messages being written to stderr whenever the "Suspend Screensaver" option is enabled and the X11 context driver is used. These messages don't actually come from RetroArch - they're xdg-screensaver's, which is a script for cross-DE screensaver suspending that RetroArch calls to do its job.

It turns out, the script has a problem with title-less windows. See the related bsnes issue for analysis - kudos to Screwtapello for figuring this out. The proposed solution is to check if there's already a title, and if there isn't, to set it to a single "space" character, which is surprisingly enough for xdg-screensaver to work. The space character is picked so that there's no visible difference between the bogus title and no title at all. The alternative is to make sure that RA's window has a title at all times - too much of a hassle for something this trivial.
Changelog
1.9.7
  • 3DS: Add unique ID's
  • CRT/SWITCHRES: Fixed some Monitor index bugs ad updated to the latest SR2
  • CRT/SWITCHRES: Fixed monitor index corruption on Windows and added correct fractal scaling. Only used when required
  • CRT/SWITCHRES: Updated log defines to match SR upstream.
  • CRT/SWITCHRES: Added new SR_CONFIG_PATHS for non Windows and Linux systems. Not that SR works on them but to fix RA compile issues
  • CRT/SWITCHRES: Updated SR2 code base to latest. Added supprt for windows monitor indexing. Fixed monitor index bug where index 1 was not being used correctly and "auto" was not being sent.
  • CRT/SWITCHRES: Updated swithres for x86 windows fix
  • CRT/SWITCHRES: fixed SR2 auto issue
  • CRT/SWITCHRES: Fixed auto monitor bug
  • CRT/SWITCHRES: Fixed monitor index corruption on Windows
  • CRT/SWITCHRES: Fixed buffer size bug
  • CRT/SWITCHRES: Added correct fractal scaling. only used when required.
  • CORE INFO: Automatically disable core info cache when core info directory is read-only
  • EMSCRIPTEN: add MAME2003 / MAME2003-plus to web.libretro
  • INPUT/UDEV: udev fixes add pointer pressed to pointer device to allow udev users to access this device
  • LIBNX/SWITCH: Enable 7zip support
  • LINUX/XDG: Prevent xdg-screensaver's "Protocol error" messages
  • LOCALIZATION: Fetch translations from Crowdin
  • LOCALIZATION: Add missing languages for the first startup
  • MENU/XMB/WIDGETS: Add workaround for FPU bug that breaks scale factor comparisons on certain platforms (fixes XMB thumbnails on 32bit Linux/Windows)
  • MENU/RGUI: Enable fullscreen thumbnail toggle using RetroPad 'start' button
  • MENU/RGUI: Fix sublabel length when menu clock is disabled
  • NETWORK/HTTP: Fix HTTP progress indication for large files on 32-bit systems
  • NETWORK/NATT: implement natt fix from void()
  • OPENDINGUX: Fix display when cores 'drop' frames
  • OPENDINGUX BETA: Use ALSA audio driver by default
  • OPENDINGUX BETA: Fix IPU scaling when running 256x224 (SNES/Genesis) content
  • PATHS: Fix garbled path string
  • PS2: Implement proper ps2_font driver instead of using the font driver from gskit
  • PS2: Use BDM for increasing up USB stability
  • PS3: First basic RSX driver for PSL1GHT
  • RS90: Initial port
  • RS90: Fix offset of OSD text
  • RS90: Disable menu clock by default
  • RS90: Hide 'Bilinear Filtering' video option
  • RS90: Move appdata (retroarch) base directory to external MicroSD card
  • RS90: Add optional approximate 'semi-linear' scaling filter
  • SHADERS: Max Shader Parameters increased to 1024
  • VIDEO: Add 'Integer Scale Overlay' - Force integer scaling to round up to the next larger integer instead of rounding down
  • VIDEO: New 'Full' aspect ratio added. This aspect ratio is useful when used with a shader which has a border in it. The aspect ratio is set to the full window area, so that the viewport spans the whole viewport. When using a border type shader like the Mega Bezel this allows the graphics to span the whole window regardless of the user's monitor aspect ratio
  • VITA: Wrong flags for not piglet version
  • UNIX: Correct backlight max_brightness path
  • UWP/XBOX: Default to Direct3D11 driver on UWP builds
  • UWP/XBOX: Do not use windowed mode on UWP/Xbox by default, set default resolution to 1920x1080 by default. Should fix display issues with Dolphin/PCSX2 on Xbox
  • WIIU: Fix inputs breaking when connecting/disconnecting remotes
  • WIIU: Input - ignore some bogus KPAD results
  • WIIU: Font rendering fixes - render font lines with correct spacing, and only sample alpha channel when rendering fonts
  • WIIU/NETWORK: Network speed optimisations - WINSCALE, TCP sACK, large buffers
  • WIIU/LIBFAT: Increase cache size on WiiU
  • WIIU/FILE IO: Filesystem optimisations - add fast path for already aligned buffers
  • WIIU/FILE IO: Use 128K vbufs for WiiU - we have loads of RAM and large vbufs are very beneficial
  • WIIU/MENU/OZONE: Fix Ozone rendering error (scissor fix)
  • WIIU/MENU/OZONE: Use Ozone icons instead of XMB Monochrome
RetroArch - Gadsby


RetroArch is now available on the Amazon App Store! Note: Will work best with a gamepad. Link here.

As of this moment, RetroArch is available on the Google Play Store (here and here), Amazon App Store (here),Steam (here, available by requesting access) and Itch.io(here).
RetroArch - Gadsby


If you’d like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.6 version) is scheduled to be released a week from today.

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!

Release notes
Be sure to also read our Libretro Cores Progress Report (a link will appear here later).

Windows users (with XAudio2 audio driver): RetroArch would previously hang/lock up if you happened to disconnect your current audio device. For instance, this could happen if you were playing with headphones on and you decided to suddenly disconnect your headphones. This has now been fixed. Instead of it locking up the program, instead the sound is just lost instead.

Security concerns over the AI Service on Windows have been addressed.

Improvements to the Windows installer have been made. This should hopefully prevent potentially disasterous situations from happening again. This could happen for instance when the user pointed the installer to install to a directory he should not be pointing to (like C:\Program Files for instance or the desktop), and did not heed the warning.

Linux users should hopefully no longer experience crashes when toggling between normal and threaded video mode with OpenGL thanks to a patch by grant2258.

The Direct3D 11 driver has been improved for Windows users thanks to Stenzek (DuckStation author). Several fixes: tear control support is queried. If not supported, flip mode presentation will not be used and Direct3D will resort back to the legacy blit model instead (less optimal and worse windowed mode). DXGI Alt+Enter handling has been disabled since it would conflict with RetroArch’s fullscreen mode switch. Non-vsynced output without the flip model should also be properly fixed now, when tear support is enabled and flip model is used, it should be possible to fastforward.

Highlights
Optimize scanning of large data sets
When scanning content, the amount of time required to push each new entry to the resultant playlist increases exponentially with playlist size. For small romsets this is typically unnoticeable, but when dealing with very large data sets (e.g. arcade romsets) scanning quickly becomes impractical. A full arcade romset can take several hours to scan – or days on Linux (where certain file operations that are a NOOP on Windows, etc. are very slow).

This happens because the ‘push entry to playlist’ routine is highly inefficient. It has to check whether the entry being added already exists in the playlist, which requires a content path comparison – which in turn involves several expensive operations to resolve ‘real’ file paths and deal with any inconsistencies in archive path notation. The problem is that these expensive operations happen every time: push an entry to the playlist, and it will process and compare every existing content path until it finds (or does not find) a match; push another entry and it will process every path again. Once a playlist hits a couple of thousand entries, this constant reprocessing grinds the scanning process to an effective halt.

1.9.6 solves the issue by caching all parameters derived from content paths on first use, so when pushing multiple entries to playlists the expensive path operations are only carried out once per existing entry. In addition, hash keys are used to minimise lengthy string comparisons. This greatly improves the efficiency of content scanning – and also of playlist management features (since these require nested playlist searches, which now also use the cached content path values/hashes).

For example, before with 1.9.5 and earlier, it was effectively impossible to scan 100k files. Now with 1.9.6, on a low spec development machine running Linux:

  • A manual scan of 100k files takes 20 minutes
  • Performing a Clean Playlist operation on the resultant playlist takes 5 minutes

Add support for mapping multiple controllers to a single input device
1.9.6 adds support for the remapping of individual controllers to arbitrary core input devices. This allows multiple controllers to be assigned to one input. To configure this, a new Mapped Port option has been added to the Quick Menu > Controls > Port N Controls menu:



Here, the Port 2 Controls refers to the physical controller; Mapped Port refers to the core port that will receive input from this controller.

For example, to map physical controllers 1 and 2 to the player 1 input of a core, set the following:

  • Port 1 Controls > Mapped Port > 1
  • Port 2 Controls > Mapped Port > 1

There are various use cases for this remapping:

  • It allows multiple controllers to be used when playing hotseat multiplayer games that normally support only a single controller
  • It allows hybrid-type controllers (e.g. two joysticks mounted in a cabinet) to be used as a single device
  • It allows easy swapping of player 1/player 2 (etc.) inputs – for example, when the PSX version of Metal Gear Solid asks the player to plug their controller into port 2

Note that these configuration settings are independent from the main RetroArch config file. To make any changes persistent, a Core, Content Directory or Game remap file must be saved.

1.9.6 also cleans up a long standing issue when configuring remaps: before, changes to Device Type and Analog to Digital Type via the Quick Menu while a core is running will ‘bleed through’ to the main config file. This is harmful and unintuitive behaviour. With 1.9.6, the global settings for these values are cached when initialising a core, and restored when the core is unloaded. (This essentially became a necessity for using the port remapping functionality, since it is rather easy to create complex configs that should in no way touch the main config file…)

‘Analog to Digital Type’ usability improvements
RetroArch is able to map the left or right analog stick of a gamepad to D-Pad input via the per-port Analog to Digital Type menu setting. Unfortunately, this is a ‘trap’ for new users: mapping a stick in this fashion disables its analog input, which creates confusion when using cores that have native analog support. Many users enable Analog to Digital Type by default, then complain on reddit/discord that analog controls do not work for PSX/N64/etc. games.

1.9.6 modifies the Analog to Digital Type functionality such that it can be disabled automatically for cores that have native analog support. The setting now has the following values:

  • None: No mapping
  • Left Analog: Map left stick to D-Pad, but disable mapping if core attempts to read analog input
  • Right Analog: Map right stick to D-Pad, but disable mapping if core attempts to read analog input
  • Left Analog (Forced): Always map left stick to D-Pad, disabling left stick analog input
  • Right Analog (Forced): Always map right stick to D-Pad, disabling right stick analog input

In addition, a sublabel has been added to the Analog to Digital Type menu entries, which should help to explain what they actually do.

Finally, this PR required some modification of input overlay-related code, during which the following bugs were fixed:

  • There is no longer contention between analog stick inputs when an input overlay and physical controller are attached to the same port
  • Input overlays no longer generate analog stick input in addition to D-Pad input when Analog to Digital Type is set to the left or right stick

AI Service (Windows) Security Improvements
Several security-related improvements have been made to the AI Service functionality for Windows in an attempt to address concerns that this could be abused. Speech input is no longer sent as a commandline argument to PowerShell, and both the language and speed parameters are properly sanitized and only allow for a few hardcoded safe values to be passed now. This should mitigate most of the attacks that could be thought of with regards to injection.

Windows Installer improvements
Several safeguards have been put in place to prevent people from making a severe mistake during the installation process on Windows. With the installer program, it is no longer possible to install RetroArch to a directory that has existing files or subdirectories. Instead, it has to be written in a new directory. We have to insist on this because the uninstallation process involves wiping RetroArch’s entire directory and everything in it. In the past, people could have made the mistake of pointing it to “C:\Program Files” without putting it in a separate subdir, with disastrous results on deinstallation. While the installer program did warn about this and asked you with a dialog prompt if you were sure, nevertheless we cannot take this risk to begin with. This has been resolved by simply deallowing this to happen by forcing you to install RetroArch to a new empty dir.

Changelog
1.9.6

  • ARCHIVE: Fix archive delimiter detection when file path contains no slashes
  • ANDROID: Do not duplicate port 0 mouse and gun inputs to other ports
  • AUDIO/XAUDIO2: Fail instead of crashing when disconnecting an audio device
  • CHEEVOS: Reset cached progress each time menu is opened
  • CRT/SWITCHRES: Add support for switchres.ini core and directory overrides
  • D3D11: Don’t use allow tearing flag with blit swap chains. Also disables the flip model if the allow tearing flag is not supported.
  • D3D11: Disable DXGI’s ALT+ENTER handling
  • D3D11: Don’t pass ALLOW_TEARING when unsupported
  • D3D11: Fix non-vsynced output without flip, black screens in fullscreen
  • D3D12: Relocated ‘d3d12_gfx_sync’
  • D3D12: Fixed swap interval option
  • GFX: Fix uninitialized variables in gfx_display_draw_cursor
  • HISTORY: Hide ‘Add to Favorites’ when viewing an entry of the favorites playlist
  • INPUT: ‘Analog to Digital Type’ usability improvements
  • INPUT: Add support for mapping multiple controllers to a single input device
  • INPUT/REMAPPING: Add support for mapping multiple controllers to a single input device
  • INPUT/LIGHTGUN: Bind lightgun trigger to first mouse button by default
  • INPUT/WINDOWS/RAWINPUT: Mouse access violation fix
  • INPUT/UDEV: Only add mouse if it has buttons and add vebose device friendly names
  • INPUT/UDEV: Skip mouse with no button errors and keep the rest
  • INPUT/UDEV: Fix Game Focus mode
  • INPUT/UDEV/X11: Change udev driver for dual lightgun support in X11
  • LIBNX/SWITCH: Update to libnx 4.0.0
  • LOCALIZATION: Fetch translations from Crowdin
  • LOCALIZATION: Fix Switchres menu texts
  • MENU/OZONE: Ensure sidebar display status is updated correctly when performing rapid menu navigation
  • MENU/XMB: Dynamic wallpaper fix
  • MENU/XMB: Icon opacity fix
  • MENU/QT/WIMP: Fix default core detection when playlist file name does not match ‘db_name’
  • PLAYLISTS: Optimise scanning of large data sets
  • SECURITY: Plug so-called high-risk vulnerability related to Powershell – avoid injection – don’t send speech input as commandline argument
  • UWP/XBOX: Add expanded resources Rescap to increase performance of UWP version in app mode on Xbox
  • WINDOWS/INSTALLER: Add smarter isEmptyDir reference implementation that looks for subdirectories from NSIS documentation
  • WINDOWS/INSTALLER: Register new function DirectorySet that is called when pressing the “Next” button on the MUI_PAGE_DIRECTORY, aka the install folder selection GUI. DirectorySet contains the criteria for an acceptable folder, which are:
  • IfFileExists “$INSTDIR\retroarch.exe” returns 1
  • IfFileExists “$INSTDIR\*.* returns 0, there is no existing folder
  • IfFileExists “$INSTDIR\*.*” returns 1, there is a folder, and isEmptyDir returns 1, therefore the folder is empty, including of subdirectories
  • X11: Fix threaded video segfault
Jun 29, 2021
RetroArch - Gadsby

Hi there community,

last Sunday a tragedy befell the emulation community, when Near tragically took their own life. While we feel Near needs no introduction, we feel it is only right to let people know of the extent to which Near’s work laid the foundational framework of Libretro/RetroArch, and what other great projects they worked on, including of course bsnes (which needs no introduction at this point).

Among Near’s other great accomplishments: libsnes (which later turned into our fork, libretro), libco (a cooperative multi-threading library), Higan (a multi-system emulator), Ares, and various other auxiliary projects.

Out of respect for Near’s untimely passing, we have delayed the release of the next RetroArch by a full week. You won’t be seeing us doing any promotional material or coverage for it until then, and who knows, we might even skip going into it at all. We feel this right now is more important and should get front and center coverage.

We asked three people familiar with Near to provide their own eulogy. Recognize that we speak from the heart and that our purpose in doing this is to pay proper respect and tribute to a great programmer in the emulation scene, the likes of whom we might never get again.



Hunter Kaller
About 15 years ago, I was just getting into open-source software and the Super Nintendo was always my favorite console, so I was excited to find a relatively new open-source emulator that ran even the weird, unpopular games. The author of the emu had a forum where they posted their releases and all the cool stuff they were working on, and that forum was home to a tight community of other smart, creative folks.

That forum was the old bboard, and that emu author was, of course, Near. As we all know, Near was extremely prolific, driven in their pursuit of perfection, and generous enough to share their many accomplishments with the world at large. In addition to their work on bsnes, Near also documented their relentless reverse engineering escapades on the bboard, along with their efforts to understand the entirety of as many facets of software development as they could, top to bottom. The bboard was home to some pretty epic (in the classical sense) threads in which Near would dive head-first into topics–like the fundamentals of signal resampling–that most of us outside of graduate-level computer engineering programs consider black magic.

It is no exaggeration when I say: without Near and the community they cultivated on the bboard, there would be no libretro and no RetroArch.

Libsnes (which would serve as the basis for libretro) was Near’s design to decouple their backend code from the endless frustrations of frontend coding. The bboard is where Themaister first developed and released SSNES, which would become RetroArch. They met Twinaphex while attempting to port bsnes to the PS3 via libsnes+SSNES on Near’s behalf. To this day, many of our cores depend on Near’s libco cooperative threading library. I could go on.

With that said, we did not always agree or even get along. Near’s perfectionism frequently put them at loggerheads with individuals who felt some thing or other was already “good enough” (that is basically the tl;dr of how libsnes became libretro), and, on a personal level, I do not presume Near considered me a “friend” (or even thought of me much at all, for better or for worse). Like most of the people reading this, I suspect Near had a much larger effect on my life than I had on theirs.

Nevertheless, I hope Near understood the immense positive effect they had on my life and the lives of countless other individuals, not just through their numerous accomplishments but also as a compassionate and insightful human being. The world is a less-interesting place now, without Near.

Alcaro
We were never the closest friends; I was around for a while, but I was always more interested in bsnes than you, Near.

I now realize I was wrong. Too many open source maintainers are valued only for their contributions and otherwise taken for granted, leading to tragedies like this.
May you finally have the peace you were denied in life.



Daniel De Matteis
I have been a bsnes fan since the very beginning when it was first announced. I remember running Mega Man X2 on an Pentium 4 PC at the time in 2005 with a premature version of bsnes and feeling that finally there was an emulator that could get the sound exactly right, and it played exactly right. Those are memories and experiences that I will always cherish.

I was not even really involved in programming until around half a decade later. I had a chance meeting with Themaister around 2010 when Near was trying to see if bsnes could run acceptably well on a PlayStation3. It didn’t, and we pretty much got stuck at the 50fps mark, but what that chance occurrence did show me was the massive potential of libsnes as an emulation abstraction layer and how easily software could be ported across platforms so effortlessly without having to maintain multiple copies of a codebase per platform. I was sold there and then on the entire potential of libsnes and SSNES. And one thing lead to another.

Fast-forward to 2021 and it’s been well over a decade since the project started and I’ve been running it now for all this time. You now know of libsnes as libretro and SSNES as RetroArch but the core concept has remained fundamentally the same, right down to the same API. Where there was in 2010 only one emulator implemented as a core (bsnes), now there is nearly 200 implementations, and not all of them even emulators. The only credit I can take in this is that I have put an inhuman amount of time in building the road so that people will come with daily maintenance and coordinating of projects so that everything works well within Libretro/RetroArch as an ecosystem. But Near absolutely deserves the credit for coming up with the foundational pillar on which this all stands. While I won’t profess to be a brilliant coder myself, I do recognize brilliance and potential where I see it. And projects like hiro, libco, and libsnes definitely show that raw genius that was in Near. I’m afraid it will be highly unlikely we will ever see a programmer as gifted involved in open-source emulation again, certainly not one with as much commitment and passion. Everyone with an appreciation for the Super Nintendo (yes, even Nintendo themselves) owes a huge amount of debt to Near for doing the near impossible in documenting and preserving this system and its back catalogue for all of posterity. It is very rare that you see someone with such selfless commitment dedicating themselves towards fully preserving a system.

Person who wishes to remain anonymous
Near was a very kind and sweet person, who cared for others. They were very talented and was amazing at what they did. I hope that they have found peace.
...