Team LibRetro has just released version 1.9.1 of its famous RetroArch emulator.
Today marks an important day for the RetroArch project, more than 95% of the infrastructure has been migrated, the past is the past, now RetroArch is back for the future, and here is what remains to be done.
Some cores will still need to be added (mainly cores that require compilation with CMake for iOS), Windows binaries are currently unsigned. We have ordered an Extended Validation Code Signing Certificate which will allow our Windows binaries in the future to go through SmartScreen without issue.
It comes at a cost but it’s worth it according to LibRetro, when installing RetroArch on Windows with the installer, a SmartScreen filter may alert you that the application is not secure. You can safely ignore this.
For the very first time, there are nightlies for iOS (ARM64 / Aarch64), tvOS, and macOS. Same, for the very first time we have an Apple Silicon / Mac M1 compatible version of RetroArch.
For the first time ever, we also have a new backwards-compatible version of RetroArch for iOS 9 users. IOS users can choose between an iOS 9 version (which is 32-bit ARM only) and an iOS 11 version (which is 64-bit ARM only). For the first time, macOS nightlies are coded, along with Linux versions available for 64-bit and 32-bit x86 PCs as AppImage bundles.
As usual, the changelog is impressive.
3DS: support for graphical widgets
3DS: In case of error, only init gfx on the salamander version. This avoids graphics problems if the gfx is already initialized. Which should always be the case if called from a running kernel
3DS: update error applet
3DS: Activation of the Basic Updater Online
3DS: guard thread
3DS: authorization of the lateral rotation of the screen
3DS: enable threading and add threaded audio driver
ANDROID: Full screen function implementation on the notch (for Android 9.0 and above)
ANDROID: Added support for Play Store module.
ANDROID: Added option to switch all installed cores to Play Store versions
AUDIO: stores audio buffers on 64 bytes. This is the most common cache row size, which improves performance. Also fixes issues with platforms like PSP incorrectly assuming malloc to return aligned (16-byte) buffers. This recently broke versions of the PSP
AUDIO / ALSA: Fixed floating format detection
AUDIO / JACK: deinterlace in the recall process. This allows us to avoid the extra copying in the deinterlacing buffer and allows us to only use a single jack ring buffer.
AUDIO / JACK: (Audio / JACK) Fixed non-blocking write. Previously, we expected the condition variable even in the nonblocking case. This dramatically improves fast forward performance and puts JACK in line with other backends in this regard.
AUDIO / XAUDIO2: Fixed threaded audio bugs with cores like Dinothawr
CONFIG: Added support for saving primary options by directory and removing primary option overrides
CONFIG: Enabling the saving of modified parameters when ‘#include’ directives are used
CONFIG / DIRS: Activation of the configuration of the directories used for the Favorites, History, Images, Music and Video playlists
CONFIG / REMAPS: Allow loading of primary remaps without content
CONFIG / OVERRIDES: Fixed empty replacement paths when launching without content
CHEATS: fixes for maximum search value
CHEEVOS: generic memory mapping using rcheevos
CHEEVOS: Ensures badge textures are freed before video driver uninitialization. Should fix crashes with slang shaders.
CHEEVOS: Include execution state of success in save states
CHEEVOS: Prevents hardcore failover when emu managed cheats are active
CHEEVOS: Added Confirmation Submenu to Hardcore Toggle Achievements
CHEEVOS: Calculating the spacing of ranking widgets based on video resolution
CHEEVOS: Display main unsupported message when viewing list of achievements for unsupported kernel
CHEEVOS: Allows deactivation of leaderboard notifications and trackers separately
CHEEVOS: Added display widget for active leaderboards
CHEEVOS / CORE OPTIONS: Blacklist of basic options. Disable hardcore mode when some basic options are set
CLI: Added option to exit closed content
CONTEXT / PILOT CHANGE: Allow context change from gl to glcore
BASIC OPTIONS: Added option to reset all basic options for current core / content
BASIC OPTIONS: Added core options by folder
CRT / SWITCHRES: Improvements
CRT / SWITCHRES: Switch bug fixed on low resolution – This allows resolutions below 32 × 224 like 256 × 224 to work
BASIC DOWNLOAD: Improved search functionality of Basic Downloader
D3D10: Should now be able to use shaders with hardware accelerated libretro cores
D3D11: Should now be able to use shaders with hardware accelerated libretro cores
D3D11: Ignore the shader / stock mix when we have no texture. This happens if the kernel calls video_cb with the image set to null on the first frame and causes the black screens / driver to reset. The ffmpeg kernel appears to do this.
D3D11: Fixed shaders with scaled framebuffers
D3D11: Added support for the flip model – rollback to the blit model for operating systems where the flip model is not supported (Windows 7 and earlier). Will later add a menu option allowing the user to switch between the two
D3D12: should now be able to use shaders with hardware accelerated libretro cores
D3D10 / 11/12: Increase sprite capacity, we need it so that hardware rendered menu drivers don’t get stuck
DRM: fix race condition in drm_surface_set_aspect
DRM / KMS: Added support for custom HDMI modes / modes
DATABASE: Fixed a crash that could occur when selecting the cursor
DATABASE / EXPLORER: Fix – Prevent segmentation errors when accessing the “ Explore ” menu
EMSCRIPTEN: report only one screen pointer for rwebinput, fix blockage by clicking on an overlay
FILEIO / PERFORMANCE: Only try to call dir_check_defaults once per run session
FILEIO / PERFORMANCE / 3DS: Increase file buffer size and save block size. It seems to help save big savestates
FONTS: Improve handling of Arabic and Persian text
FONTS / FREETYPE: use fontconfig to select fonts if available
INPUT: Added hold mode for “ one button ” turbo fire
INPUT MAPPING: Refresh link list when changing device type
INPUT MAPPING / REMAPPING: Minor bug fix – Browsing remapping files starts browsing input_remapping_directory even if the core-subdir (where the saved files go) exists. Having remaps for many different cores makes the files findable major assets tedious, especially because remaps are not compatible between different cores (but perhaps for cores emulating the same hardware)
IOS: remove the ‘Core Downloader’ from iOS 9 / iOS 11 versions
IOS: IOSApp no longer crashes when a file is shared to it
INPUT: Keyboard device mapper rework
INPUT: New analysis of the input link order / erasure correction
INPUT: Duplicate key event blocking additions
INPUT: Prevent duplicate key events with keyboard shortcuts + keyboard device type
INPUT: Keyboard LED Driver
INPUT / AUTOCONFIG: allows unnamed / empty controllers to operate.
INPUT / GAME FOCUS: Add option to automatically activate “ game focus ” mode when playing / resuming content
INPUT / HOTKEYS: shortcut key to close content / unload kernel
INPUT / LIBCEC: map libcec-daemon keys to RETROK
INPUT / X11: Enable keyboard input when mouse cursor is not inside RetroArch window but window still has focus
INPUT / X11: Fixed mouse input when mouse is grasped
INPUT / UDEV / RUMBLE: Corrected rumble.
INPUT / WINDOWS / DINPUT: Simultaneous offset correction
INPUT / WINDOWS / DINPUT: prevent Win-key from opening the Start menu
INPUT / WINDOWS / DINPUT: option to disable Windows keyboard shortcuts
INPUT / WINDOWS / DINPUT: mouse input / clip with Alt-Tab
INPUT / WINDOWS / DINPUT: fixed mouse capture
INPUT / WINDOWS / RAWINPUT: correction of the position of the keys
INPUT / WINDOWS / RAWINPUT: fixed mouse capture
INPUT / WINDOWS / RAWINPUT: Prevents outside window mouse clicks while typing
INPUT / WINDOWS / RAWINPUT: option to disable Windows keyboard shortcuts
INPUT MAPPING / REMAPPING: Major Fix – Remapping file having different device type requires manual intervention after loading for kernel to register type correctly
JSON: new faster rjson json parser / writer library
JSON / RJSON: Replace rapidjson parser / writer in discord-rpc with rjson
LIBRETRO: Addition of an API extension for cores to query the number of active entries provided by the frontend
LIBRETRO: make sure RARCH_CTL_CORE_OPTIONS_LIST_GET returns false if no primary option is available
LIBRETRO: Added API extension to replace front-end audio latency
LIBRETRO: Added API extension for cores to monitor front-end audio buffer occupancy
LINUX: also displays / run / media or / run / media / $ USER in the list of drives
LINUX: adjust the brightness according to the limit. Looks like some platforms have non-standard maximums, but the variable is exported correctly so we can use it
LOCATION: add Finnish language
LOGS / SHADER: Spam reduction in Shader log
LOGS / CONFIG: cleaning up configuration logging
LOGS / SAVESTATE: cleaning up configuration logging
MAC: Apple Silicon / Mac M1 support
MAC: Code signing / notarization
MAC: Fixed a leak with NSTemporaryDirectory () on the ARC code (Automatic Reference Counting)
MAC: Support for extracting bundle assets on macOS
MAC: Universal Metal version for Mac ARM and Intel
MAC / UNIVERSAL: Added CoreAudio3 audio driver for Metal Universal version
MAC / IOS: extract assets only once during first installation
MENU: Add “ L2 + R2 ” Menu Toggle Joystick Combo
MENU: Menu text improvements; clarifications, consistency, text errors,
MENU: Adjust the initial hold times for menu scrolling
MENU: Restrict menu acceleration to navigation buttons
MENU: Add the ‘Driver Menu’ parameter to ‘User Interface’
MENU: Move the parameters ‘Scroll Menu’.
MENU: Separate menu ‘Turbo Fire’.
MENU: drop-down menu for the “Custom aspect ratio” parameter.
MENU: rearrange the mouse index next to the devices index
MENU: submenu for device index / mouse index
MENU: rearrange the user interface menu
MENU: Add menu entry “ Remove DSP plug-in ”
MENU: Hide the ‘Auto-Shader Delay’ menu setting when shaders are not available
MENU / ANIMATIONS: Fixed non-smooth text ticker + reduced duplication of line ticker code
MENU / ANIMATIONS / OZONE: Add cursor movement animation
MENU / ANIMATIONS / OZONE: implements backwash for the main menu when loopback is off
MENU / NOTIFICATIONS: cleaning of the on-screen notifications menu
MENU / NOTIFICATIONS: Add option to show / hide refresh rate notification
MENU / FILEBROWSER: Start automatic selection of last used path for more file browser menu entries
MENU / INPUT: Input port label settings
MENU / INPUT / XMB: Appropriate control port icons
MENU / INPUT / OZONE: Appropriate control port icons
MENU / QUICK MENU: Add remapping delete capability under quick menu commands
MENU / QUICK MENU: Limit the ‘State Slot’ drop-down list to a maximum of 1000 entries (+ Auto)
MENU: Customizable menu scrolling hold time.
MENU / DESKTOP: Fixed mouse cursor limited by window range on F5
MENU / DESKTOP: Add a simple shader option
MENU / DESKTOP / WINDOWS: Remove the broken ‘Update RetroArch’ feature for Windows. We want this not only to be system independent if we revert it, but also to work outside of the Qt desktop interface.
MENU / OZONE: New theme – Twilight Zone
MENU / RGUI: Addition of aspects 3: 2, 5: 3 and 3: 2/5: 3 (centered)
MENU / RGUI / TEXT RENDERING: Added support for Russian text
MENU / RGUI / TEXT RENDERING: Added support for CJK punctuation glyphs
MIDI / WINMM: Recovery from MIDI messages not managed by the device
MIDI / WINMM: Fixed winmm midi driver hanging when closing content
NETWORK: Added READ / WRITE_CORE_MEMORY network commands
NETWORK: Fixed reverse condition in socket blocking behavior
NETWORK / NETPLAY: try IPv4 if IPv6 fails
OGA / VIDEO: OGS support
OGA: This keeps the traditional DRM driver with the OGA one. The probe function bypasses the driver if the screen is not rotated to revert to the normal DRM driver.
OGA: Fixed messages not disappearing
OGA: implement RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER. This is a faster rendering code path for software rendered libretro cores that some libretro cores currently use. Video drivers in RetroArch must explicitly implement this for this code path to work at run time.
OPENDINGUX: Addition / Optimization of the interface
OPENDINGUX: Fixed frozen video when activating fast forward
OPENDINGUX / SDL: cleaning of OSD fonts
OPENDINGUX / SDL: Activation of the selection of the image interpolation method when using the gfx ‘sdl_dingux’ driver
OPENDINGUX / SDL: Enabling integer scaling when using the gfx ‘sdl_dingux’ driver
OVERLAYS: Added option to automatically resize overlays (with aspect ratio correction)
OVERLAYS: Hides the overlay when the gamepad is connected. Overlays will automatically be hidden when a gamepad is connected to port 1, and will reappear when the gamepad is disconnected.
OVERLAYS: New default overlays for mobile (neo-retropad)
OVERLAYS: In addition to the overlay scale, the user can now set an adjustment factor for the appearance of the overlay. Most overlays are designed for 16: 9 screens which means they get stretched / ugly on modern wide format phones and the like. By changing the overlay appearance adjustment factor, a user can scale the width / height of the overlay to achieve a uniform appearance regardless of display resolution.
OVERLAYS: Since scaling a gamepad overlay can result in buttons being too close together (or too far apart), the user can now adjust the effective spacing of the different “ halves ” of an overlay via the horizontal overlay separation and the vertical overlay separation. factors. The overlay horizontal separation divides the overlay in half vertically (left / right, at the center point) and applies a spacing offset (positive or negative) between UI elements on either side; The overlapping vertical split does the same, but the split is horizontal (up / down)
OVERLAYS / FIX: Overlay X Offset and Overlay Y Offset options have been fixed and now work correctly
OVERLAYS / FIX: All of the above options (and the overlay scale) are set and saved independently for landscape and portrait display orientations – so adjusting everything for a nice landscape layout will not break the portrait display
OVERLAYS / FIX: When using Vulkan gfx driver, memory is lost every time an overlay is freed
OVERLAYS / FIX: When threaded video is enabled, loading non-framing overlays (i.e. utility type overlays, where everything is hidden until the screen is touched) may generate errors segmentation due to improper use of realloc ()
OVERLAYS / FIX: When Show inputs on overlay is enabled, ASAN reports bit offset errors due to incorrect range checking when handling turbo inputs – essentially there is no upper limit to the considered input id range, which means overlay keyboard shortcuts (menu toggle, etc.) are incorrectly treated as having turbo support, causing bit shifts using id indexes totally inappropriate
PLAYLISTS / PORTABLE: Fixed initialization of the first load
PS2: Added Multitap support (up to 8 players)
PS2: fix for digital controllers and other unrecognized non-standard controllers
PS2: Fixed RA shutdown
PS2: Adding an audio mixer
REWIND: Prevents ‘Rewind Frames’ from being incorrectly set to ‘1’ when loading content
RUNAHEAD: Added Run-Ahead Toggle hotkey with notifications
RBUF / ANIMATIONS: Simplification of gfx_animation from dynarray to rbuf
RBUF / CORE UPDATER: Replacement of the static input array by a dynamic array via the RBUF library
RBUF / M3U: Replacement of the static input table by a dynamic table via the RBUF library
SENSORS: Android fixes / improvements (crash-) + added option to disable sensor input
SDL2 / VIDEO: Activation of the SDL2 video driver in Wayland / KMS
SAVESTATES: Added savestate garbage collector for auto-incrementing stavestates. As some issues indicate, there is a problem with the auto-incrementing save slot feature: the slot index will increase and very old save sets will not be deleted. This adds support for deleting old backup states with a user-defined (global) backup state limit. Instead of wrapping around the location counter, it will just delete the oldest save because it is simpler. At this time, there is a limit of one deletion per backup, which ensures that a user cannot delete many backups by accident if they set the limit too low.
SAVESTATES / SAVEFILES: Make sure save file and playlist compression is turned off by default
SHADERS: Added an option to store the last selected shader preset / pass directories
SHADERS: Using the last selected shader presets directory when changing shaders via previous / next keyboard shortcuts
SHADERS: Delete the parameters line
SHADERS: fix shaders for duplicate parameter loading bug
SHADERS: Fixed crash of changing num shader pass in UI
SHADERS / SLANG: Fixed slang shaders with rotation
STREAMING / FFMPEG: Added Facebook Game Stream option (for RetroArch versions compatible with integrated ffmpeg kernel)
SWITCH: Fixed disabled input link icons of a line
SWITCH: Solving audio problems
TLS / SSL: Added BearSSL support, as an alternative to mbedTLS
VIDEO: AddVariable BFI (black frame insertion)
VIDEO / DRM GO2: Dynamic resolution support
VIDEO FILTERS: video filter optimizations
VIDEO FILTERS: Added several LCD effect video filters
VIDEO FILTERS: Gameboy / Dot_Matrix video filters: Added XRGB8888 support
VIDEO FILTERS: Add Normal4x video filter
VIDEO FILTERS: Added video filter ‘Upscale_256x-320 × 240’
VIDEO FILTERS: Added ‘Upscale1.5x’ video filter
VITA: Temporary deactivation of VitaGL
VITA: correction of the bubble name
VITA: correct management of start-up parameters
VITA: 1.5x default menu scale to improve readability
WIFI / LAKKA: Addition of an appropriate WiFi menu, with the options Activate / Deactivate and Disconnect. It also helps remember WiFi passwords. The underlying tool (connman) is for storing passwords (that’s why it automatically logs in every time you start a Lakka device), so we expose it so the user doesn’t have to re-enter the pass when connecting to a registered wifi.
WII / HID: Added HID support for HORI Wired PS4 Mini Controller
WINDOWS: Added support for accelerators to the main win32 message loop
WINDOWS: Add accelerators for Open (Ctrl + O) and Full screen (Alt + Enter)
WINDOWS: Corrects some file I / O failures on Windows when paths are longer than 260 characters.
WINDOWS: Fixed crash on Windows startup when using Simplified Chinese.
WINDOWS / XP: The OpenGL 1 video driver is now the default driver for maximum backward compatibility on first start. It is of course always possible for the user to change this.
WINDOWS / MENUBAR: load accelerators, locate Win32 menu items in current language and display shortcut keys
WINDOWS / MENUBAR: Add ‘Reinit’ to the menu bar
WINDOWS / MSVC: Fixed restart crash on MSVC build when using SSE2
UWP: Does not default to XMB menu by default, defaults to Ozone instead
UWP / VFS: Use Win32 File APIs When Possible – Better File I / O Performance
WIIU / FILEIO / PERFORMANCE: faster startup times – removed the call path_is_valid () when loading textures
WIIU: fix touchscreen mouse emulation
Download: RetroArch 1.9.1