- INPUT: Combo hold + 'enable_hotkey' correction. Fixed issue with having menu toggle hold combo in different button than 'enable_hotkey', which caused 'enable_hotkey' to also act as menu toggle if held long enough, and simplified and unified duplicate code in start+select holds to a single function.
- INPUT: input_keyboard_event: Don't check hotkey binds when device is RETRO_DEVICE_POINTER
- INPUT: Add input_keymaps_translate_rk_to_ascii() for correct character input to input_keyboard_event
- INPUT: input_overlay_poll: Delay clearing INPUT_OVERLAY_BLOCKED flag until there is no overlay input (Avoids stray input after osk_toggle)
- INPUT: Send keyboard events for modifiers before other keys (for correct modifier+key input if hitboxes overlap)
- INPUT: Remember currently set keyboard mapping bits during same config read, because otherwise customized keybinds can get cleared out of the bits on the next iteration, causing keyboard events to get passed to the core when they should get blocked.
- INPUT/LINUX/UDEV: Log mouse devices in info level
- INPUT/LINUX/UDEV: First working version of udev driver with touchscreen support and gestures.
- INPUT/WAYLAND: Add wayland to input driver list
- INPUT/MENU: move port X binds into retropad binds submenu and add appropriate help text and sublabels to discourage people from messing around in there unnecessarily
- LANGEXTRA: Enable language autodetect for all builds with LANGEXTRA
- LIBRETRO: Add new context hardware render enums - enables autodetection of DX12 for PS2 core
- LIBRETRO: Add API to check JIT availability on iOS
- LIBRETRO: Allow RETRO_ENVIRONMENT_SET_MEMORY_MAPS also after core startup. Change the comment in libretro.h about the removed limit and handle the environment call during core runtime in RetroArch.
- LINUX: Input driver fix 8+ joypads. It was reported that controllers beyond 8 worked only partially (analogs yes, but not buttons), and the found fix was also confirmed.
- MOBILE: On mobile in portrait mode, don't override custom viewport
- NETWORKING: Enhance netpacket interface
- NETWORKING/NETPLAY: Enable core host to refuse connecting new players to limit the number of connected players
- NETWORKING/NETPLAY: Enable a core to flush outgoing packets and read incoming packets without waiting for the next frame (can be used for lower latency or blocking reads)
- OPENDINGUX/RG350: Enable networking for RG350
- OPENGL/WAYLAND: Add frame callback after egl_swap_buffers to improve latency when max_swapchain <= 2
- OSD/STATISTICS: Show current video + audio drivers in statistics
- OSD/STATISTICS: Ensure statistics text is aligned left
- OSX/MACOS: Fix steam OSX core path
- OSX/MACOS: Add HAVE_STDIN_CMD support
- OSX/MACOS: fix mouse grab in windowed mode
- OSX/MACOS/IOS/TVOS: Enable SSL in macos/ios/tvos builds
- ANDROID: In Android builds, add input_android_physical_keyboard configuration option and its corresponding menu entry to force a device to act as a physical keyboard. When running on Android, RetroArch considers most devices that emit dpad events as gamepads, even if they also emit other keyboard events; this is usually the right thing to do, but it has the side effect of not letting some actual keyboards (e.g.: Logitech K480) act as such inside RetroArch. This configuration option allows users to manually select a specific input device to act as a physical keyboard instead of a gamepad, which is handy when emulating computers as opposed to consoles.
- AUTOMATIC FRAME DELAY: Helped delay to decrease easier when it should and helped delay to stay put when it should when triggering pause & menu with or without pause & fast-forward & slow-motion & geometry change
- AUTOMATIC FRAME DELAY: Recalibrate delay on video reinit (fullscreen toggle and such)
- AUTOMATIC FRAME DELAY: Show (x effective) only in menu item and not in dropdown list items when auto is enabled
- CHEEVOS: Allow repositioning of RetroAchievement notifications
- CONFIG/INPUT: Unload restores current global config
- CONFIG/INPUT/OVERRIDES: Removing a file does not unload current override
- CONFIG/INPUT/OVERRIDES: Saving an empty override removes the file if it exists, and won't save when it does not
- CONFIG/INPUT/OVERRIDES: Prevent the use of RUNLOOP_FLAG_OVERRIDES_ACTIVE with appendconfig
- CORE OPTION: Core option setting type checks. Added checks for getting and setting core option type, since otherwise there will be a crash on close content after browsing to core option categories. Also fixed the no-show switch icon for lone wolf "Lock Installed Core".
- FRAME DELAY/MENU: Show Frame Delay without VSync
- GENERAL: Start unpause restriction. Limit the feature using retropad start button to unpause RA to the setting it was made for; "pause on controller disconnect".
- GENERAL: Savestate thumbnail aspect ratio fallback. Thanks to at least one certain core that announces aspect ratio as 0, we have to add the same fallback in savestate thumbnails that is happening elsewhere in normal video driver use anyway.
- GENERAL: Add support for system subdirs per core/database. Added the trivial and graceful automatic ability to send a different system directory to cores if it exists, for keeping the system dir more sane. First by using the core/library name just like in configs and saves, and then by playlist name, like in thumbnails, and of course default to the current global system dir.
- GENERAL: Ignore system subdir replacement if subdir has subdirs.
- IOS: Fix #14778 - In addition to sending logs to asl_client, add them to the logfile.
- IOS/VULKAN/MOLTENVK: Vulkan video driver on iOS
- LATENCY/PREEMPTIVE FRAMES: Add Preemptive Frames to Latency Settings. RunAhead alternative that reruns core logic to "rewrite history" before the current frame. Frames are only rerun when the controller state changes, so it's faster overall.
- LATENCY/PREEMPTIVE FRAMES: Call retro_run before retro_serialize (#14893). Fixes preemptive frames not starting up with a few cores
- INPUT/BSV/REPLAY: Fix BSV playback from a starting state for DOSbox
- INPUT/BSV/REPLAY: Associate states with replays. Now states can be saved and loaded during replay recording and playback in a way that keeps the integrity of the recording. Recordings also have a (moderately) unique identifier associated with them.
- INPUT/BSV/REPLAY: Add checkpointing feature for replay recordings. If cores are not deterministic, or if they only have bounded determinism, we can obtain less drift if replay files also contain periodic checkpoint states. These are configured by the new retroarch setting replay_checkpoint_interval (measured in seconds). States are inserted into the replay file in between frames. This also fixes the settings display for the replay autoincrement max keep setting.
- INPUT/FRAMEADVANCE: Use non-rendering pause mode when frameadvance is triggered
- INPUT/HOTKEYS/OVERLAYS: Do not block input overlay hotkeys
- INPUT/HOTKEYS: Hotkey blocking correction. Turned out the previous hotkey blocking changes worked properly only with winraw driver and not the rest (at least with Windows), because input_keyboard_event() could be called at the wrong moment, and thus storing keyboard menu press there broke the separation of controller Guide menu button and keyboard menu key. Also allowed the blocking to work in both directions so that controller hotkeys won't get blocked if only keyboard has "enable_hotkey" bind.
- MENU/HELP: Help for turbo modes (#14919). Help text added for each of the selectable turbo modes.
- MENU/INPUT: Add unified back action to all menu drivers. Usability boost for all menu drivers resulting in similar behavior as with Ozone currently, which is pressing back/cancel enough the selection jumps first to Main Menu and when pressed again jumps to the first item, so that when a core is running, Quick Menu is very quickly accessible from anywhere. And when core is not running, the first item would be Load Core.
- MENU/INPUT: Override bind save + menu manager overhaul
- MENU/INPUT: Allowed and fixed input bind saving to overrides
- MENU/INPUT: Overhauled override menu
- MENU/INPUT: Pressing Start on the top active file entry reloads current overrides as startup would
- MENU/XMB: More room for longer item labels and values
- MENU/XMB: "Core Downloader" has extra space for item and "installed" indicator
- MENU/XMB: Fixed "Menu Scale Factor" to not require restarting to get the actual end result
- MENU/XMB: Adjusted scale factor to behave better with both layouts
- MENU/XMB: Fixed savestate thumbnails and adjusted vertical fade factor in "Handheld" layout
- MENU/XMB: Changed thumbnail shadow to outline and tightened fullscreen thumbnail margins
- MENU/XMB: Adjusted global shadow opacity
- MENU/XMB: Remove "Framebuffer opacity" from XMB as it does not use it. Also, rename the corresponding menu title, since "framebuffer" is not that intuitive.
- MENU/OZONE: Refresh thumbnail on close content hotkey
- MENU/OZONE: Ozone footer enhancements (#14926). Add Help button (Select) and Reset to Default (Start) to footer where applicable.
- MENU/OZONE: Ozone footer enhancements (#14934). Display Help footer only if there is actual info to be displayed, either actual help, or sublabel if it is not visible otherwise.
- MENU/OZONE: Ozone footer enhancement: Scan button (#14949). Display Scan button in footer when it is applicable.
- MENU/OZONE: Add Clear button to Ozone footer (#14947). Add indication of Clear button when it is applicable (currently: keybinds).
- MENU/SOUNDS: Scroll sound fixes. Correctly get list size in xmb.c for playing scrolling sound when switching categories, play the scrolling sound when pressing cancel in ozone, play the sound when scrolling with ZL and ZR, play the correct sound when scrolling with L
- MENU/WIDGETS: Show square sized widget on volume mute. Volume widget is currently fixed size always, and thus showing a lot of empty space when muting, therefore shorten the box to icon size only when muting.
- NETWORKING/MENU: Remove extra space from : delimiter
- NETWORKING/MENU: Trim useless/duplicate garbage from the end of ipv6 address. Windows shows %[adapter number], Linux shows %[adapter name], which already shows before the address
- NETWORKING/STDIN: Add LOAD_STATE_SLOT N command to stdin/network protocol
- OSX/MACOS: Make sure to use the file system path name, not the URL name
- OSX/MACOS/IOHIDMANAGER: Various memory access fixes to prevent crashes (#14459) (#15000). Prevent double free and null dereference when the controller is quickly reconnected. Handle error when controller device query returns null instead of crashing.
- OSX/MACOS/METAL BUILD: Fix input events (keyboard/mouse) sometimes going lost when switching between fullscreen and windowed mode. Fixes lots of longstanding issues
- OSX/MACOS/OPENGL: Fix for fullscreen OpenGL driver in Metal macOS build
- OSX/MACOS/SLANG: The change to apply shaders would be executed and then a command to apply shaders would immeidately be enqueued, to run asynchronously
after the current event handler, which then did exactly the same. Fixes issue #14789 - Turning on shaders on Metal build 1.14.0 stable for Mac OS will slow emulation drastically thing, creating a busy loop.
- PS2: Avoid loading extra drivers when not needed. Fixed a bug where it wasn't using the variable extra_drivers, for loading the specific IRX needed drivers. This is increasing compatibility with some specific PS2 models that sometimes fail when loading cores.
- PS3/PSL1GHT: Add improvements to the RSX driver (#14965)
- PS3/PSL1GHT: Add modern_alpha_blend and modern_opaque rsx shaders
- PS3/PSL1GHT: Add perf improvements to the rsx driver
- PS3/PSL1GHT: Add RSX video driver
- PS3/PSL1GHT/MENU/XMB: Do XMB menu scaling for psl1ght
- RUNLOOP: Currently when core is paused, video output will be stopped completely too, making it impossible to animate widgets while paused, therefore:
- RUNLOOP: Added a new runloop state for pause which renders last cached frame
- RUNLOOP: Allowed rewinding while paused so that it acts like backwards frameadvance. Also moved rewind step taking before menu iteration so that steps won't be lost while in menu when menu_pause is disabled
- RUNLOOP: State load and reset while paused will forget pause for x frames in order to show proper output
- RUNLOOP: Allowed reading pause hotkey while menu is active
- RUNLOOP: Allowed reading screenshot hotkey while menu is active
- RUNLOOP: Joined 2 fullscreen hotkey checks to one (Any ideas why they were separated for paused and non-paused states, since one works fine for both..?)
- RUNLOOP: Implement GET_HW_CONTEXT_NEGOTIATION_INTERFACE_SUPPORT. Fairly trivial. Just report the latest version.
- SAVESTATES: State slot hotkey adjustments -
- SAVESTATES: Allow selecting -1 Auto slot with hotkeys
- SAVESTATES: Allow wrap-around from -1 to 999 and backwards
- SAVESTATES: Show failure message when trying to load a state that does not exist instead of plain "Loading state"
- SAVESTATES: Shorten the duration of slot change notification
- SAVESTATES: Change the widget type to the same type as shader toggle for better back and forth action. Closes [Widgets] Save state slot switcher
- SHADERS: Shader Preset - Wildcard Replacement in Paths on Load. When a simple preset loads, text wildcards which are found in paths inside the presets will be replaced with values coming from the current RetroArch context. The replacement will be executed on both texture paths and reference paths.
- VIDEO: Allow manual video swap interval forcing. The addition of auto swap interval effectively prevented manual forcing, which is beneficial when the rate is not reported properly. Therefore use the interval in the calculation only when using automatic interval.
- VULKAN/WAYLAND: Don't clamp the number of requested images. Due to an unfortunate "feature", MESA always reports 4 as the Vulkan surface's minImageCount in Wayland.
However, values of 2 and 3 work perfectly well, even if they are out of spec, providing way better latencies when using the Vulkan backend on Wayland.
So this removes the artificial clamping that was being done to desired_swapchain_images, because it's not really necessary and was causing very noticeable input lag on Wayland+Vulkan.
- WAYLAND: On scaled desktops the wayland backend deciding to resize based on values multiplied by the scale factor twice. Resulting in continuous attempts to rebuild the swapchain when in fullscreen.
- WAYLAND: Wait for splash screen configuration. Before, configuration (resize) events for the initial wayland window could happen before or after set_video_mode which could result in a small or corrupted window. Now we make sure that the initial window has processed it's resize events before window size is set by set_video_mode.
- WAYLAND: Changes the initial window to show a RetroArch logo copied from the icon of the X11 backend.
- WAYLAND: Build pointer-constraints and relative-pointer protocols.
- WAYLAND/GL: GL is sometimes not rescaling property (Super + Left).
- WIN32: Fix keyboard event characters. Added sending key chars to all input drivers (currently they only send scan codes), and also missing mods for raw.
- WIN32: Fix restart if path has spaces. CreateProcess does not like to have anything executable path related in the second parameter lpCommandLine if the path has spaces. Thus strip everything from args except the actual parameters.
- D3D12: Fixed some shaders not appearing with the d3d12 driver - this reintroduces a validation error though but it seems to work as in not crash and is the old RA behaviour. Guess we need a different way of fixing the validation issue.
- FASTFORWARD: Restore framelimit on fastforward toggle. Fast-forward was broken after toggling vrr_runloop off, since it will force frame limit to 1.0 (even on every frame) and never restores it. So let's make sure the wanted ratio is applied when toggling FF (Fastforward).
- GFX/VIDEO FILTERS: (picoscale_256x_320x240) Added snn function to upscale Fuse (ZX Spectrum) core borderless output to 320x240. ZX Spectrum resolution of 256x192 was previously unsupported.
- HOTKEYS: Further reorder internal hotkey items for consistency and removed SEND_DEBUG_INFO, OVERLAY_NEXT and OSK from visible hotkey bind list. "Send Debug Info" stuff is removed as much as possible without breakage due to translation files.
- INPUT/AUTOCONFIG: Disable 'pause on controller disconnect' by default - was enabled by default on 1.13.0
- INPUT/OVERLAY: Fix analog drift blocking touch input (could occur on overlay_next if physical inputs shown on overlay)
- INPUT/OVERLAY: Fix overlay_next buttons lighting up in unison
- INPUT/OVERLAY: Skip meta keys in input_overlay_add_inputs (not supported by input_state_internal)
- INPUT/WINDOWS/WINRAW: Fix mouse position when using input overlay with mouse cursor
- INPUT/WINDOWS/WINRAW: Fixed mouse position to use the same method required for menu items and pointer when simulating input overlays with mouse, since it won't work with multi mouse method
- INPUT/WINDOWS/WINRAW: Fixed passing mouse position to core also when using aforementioned method
- MENU/OVERLAY: Fix overlays behind menu without core running. "Show Overlay Behind Menu" is currently broken with Ozone and XMB (with any other color theme than Plain) when running without a core.
- MENU/OZONE: Allowed drawing sidebar and thumbnail bar background color also when core is running
- MENU/OZONE: Stopped using different padding and position for savestate thumbnails vs imageviewer
- MENU/OZONE: Removed gradient background effect when core is running, because some themes already have gradient background, which creates ugly rough steps
- MENU/OZONE: Fixed "Gray Light" theme from using the same background as "Gray Dark", which makes selection cursor near impossible to see
- MENU/UX: Menu icon improvements - Menu Visibility icons (Quick Menu + Settings)
- MENU/UX: Menu icon improvements - Playlist Manager icons
- MENU/UX: Menu icon improvements - Explore icon as database icon
- MENU/UX: Menu icon improvements - View and filter icons as cursor icon (folder icon in GLUI)
- MENU/UX: Menu icon improvements - View save + delete icons
- MENU/UX: Menu icon improvements - Moved Explore + Views below Standalone Cores
- MENU/UX/OZONE: Removed icons from menus where others items don't have icons, and added icons to menus where the rest have icons
- MENU/UX/OZONE: Changed the way "no icon" is handled from kludgy way of not drawing SUBSETTING icon
- MENU/UX/XMB: Changed playlist entry index positioning to bottom right when thumbnails are in vertical mode, because big lists will overlap with arrow and current "breadcrumb" icons when the position is next to current selection
- MENU/UX/XMB: Added a rather nasty hack to prevent showing wrong icons under Explore as "breadcrumb" icon
- MENU/UX/XMB: Optimized certain icon drawing loops (Main horizontal icons were looped even when not visible, and all previous "breadcrumb" icons were looped when only one certain was needed)
- MENU/UX/MATERIALUI: Fixed showing icons where there should not be any (Waitable Swapchains, Show Recording + Streaming)
- OSX/MACOS: Fixed Cocoa keyboard not allowing to map Analog stick
- HOTKEYS: Fix shader toggle and add hotkey + sublabel
- HOTKEYS: Cleanups and corrections - Keep hotkey pause and menu pause separate in order to not trigger unwanted pause when toggling menu regardless if menu will pause or not
- HOTKEYS: Cleanups and corrections - Allow unpausing with Start (makes resuming more convenient after controller disconnect if menu does not pause)
- IOS13+: Pointer movement accuracy. iPad Trackpad Pointer Movement Accuracy through absolute location (for iOS 13.4 and above)
- IOS13+: Adds iPad Trackpad Support to iOS13 Project (for iOS 13.4 and above)
- INPUT: Fixed the way devices were previously indexed. Input devices were only being indexed in order and would stop at the first time an input has no device connected to it. The problem is when a device gets disconnected, that input will have no devices connected to it, but the next input may still have a device connected. So, that makes changing the port of the currently connected devices impossible.
- INPUT/AUTOCONFIG: Add option for pause on controller disconnect
- INPUT/AUTOCONFIG: Driver independent disconnection notification. Should show disconnect notification now properly on Windows with XInput and/or DirectInput pads
- INPUT/HID: Added usb hid controllers for the famous ZeroDelay encoder and also for "Kade: Kick Ass Dynamic Encoder" to be able to use some custom arcade sticks.
- INPUT/OVERLAY: Ignore hitboxes with zero area. I.e. Set 'reach_x' or 'reach_y' to zero to ensure no hitbox math is done. This simplifies designating animation-only descriptors (e.g. for eightway areas) or obsolete descriptors.
- INPUT/OVERLAY: Add 'reach' and 'exclusive' for hitboxes. Allows stretching hitboxes and handling their overlap.
- VULKAN: Fix HDR inverse tonemapping. Only skip tonemapper if HDR10 is explicitly enabled by last shader pass. Otherwise, we are simply just inheriting the bit-depth of the swapchain.
- CONFIG/CLI: Allow use of --appendconfig with override cfgs instead of getting ignored
- CONFIG/LOGGING: No more console startup logging if logging to file
- CONFIG: Saves config on exit only once instead of (worst case scenario) 3 times
- DATABASE/EXPLORE/VIEW: Add View feature - Add saving of a filter set in the Explore menu into a so called "View" file which then gets listed alongside playlists. This also adds the ability to filter a category by range in the Explore menu and not just filter on exact matches.
- MENU/XMB: Remember selection per main tabs. Addresses the following : collection playlists can contain hundreds or thousands of items. When scrolling through one, pressing left or right by accident can be common. This resets the playlist to the top
- SAVESTATES/NOTIFICATIONS: Add delay to savestate notifications, so that GPU savestate screenshots stay untouched
- SAVESTATES/SCREENSHOTS: Avoid 'video_gpu_screenshot' with savestates. Allow GPU screenshots with savestates only when there is no other way of getting a screenshot.
- AUTOSAVE: Change/improve exit behavior of autosave thread - if condition variable is signaled, the loop is ran another last time so we can do a final check/save before stopping the thread.
- CDROM: Fix memory leak caught with asan - buf passed to filestream_read_file
- CORE INFO/NETPLAY: Ensure current core info is initialized at runloop_event_init_core when netplay is enabled
- CHEEVOS: Upgrade to rcheevos 10.4
- CHEEVOS: Allow creating auto savestate in hardcore
- CHEEVOS: prevent invalid memory reference if game has achievements but core doesn't expose memory
- CHEEVOS: Release achievement badge textures when video driver is deinitialized
- CHEEVOS: Re-enforce hardcore limitations once achievements are loade
- CHEEVOS/MENU/MATERIALUI: Show achievement badge icons in MaterialUI driver
- D3D9: D3D9 has been split up into two drivers - D3D9 HLSL (max compatibility, no shader support yet) and D3D9 Cg (dependent on deprecated Nvidia Cg runtime library)
- D3D9/HLSL/XMB: XMB fix
- D3D9/CG: D3D9 Cg driver fixed
- D3D11: Fix overlay not showing up
- D3D11/12: Reduce lag with WaitForVBlank - this rather simple addition seems to make D3D11/12 very very close to Vulkan/GLCore regarding input lag.
- D3D11/12: Add waitable swapchains and max frame latency option
- D3D11/12: Make waitable swapchains optional
- DATABASE: Reformat 'rdb_entry_int' - Nitpick adjustments for database entries: Capitalize "Release Date", and remove space before : from Release Date rows which use integer
- DATABASE/EXPLORE: Allow On-Demand Thumbnails in Explore menu
- DATABASE/EXPLORE/MENU/OZONE/XMB/RGUI: Explore menu thumbnails
- GFX: Enable automatic configuration of 'VSync Swap Interval'
- GFX/FONT/FREETYPE: Use FT_New_Memory_Face - first read it from file to memory beforehand -
this solves an asset extraction issue when selecting 'Update Assets' - apparently FT_New_Face keeps an open file handle to the font file which
prevents it from being overwritten/deleted while the program is still running.
- GFX/THUMBNAILS: Thumbnail aspect ratio fix
- GFX/THREADED VIDEO: Optimizations, fixes and cleanups
- GFX/VIDEO FILTERS: Add Upscale_240x160-320x240 video filter with 'mixed' method
- GLSLANG: Fix compilation with ./configure --disable-builtinglslang - was missing linking against -lMachineIndependent and -lGenericCodeGen static libs
- INPUT: Fix off by one error for input_block_timeout setting. Also default to 0 for this setting (pretty massive performance gain)
- INPUT/OVERLAY: Block pointer input when overlay is pressed
- INPUT/REMAPPING: input_remapping_save_file - existing remapping file was needlessly reloaded
- INPUT/REMAPPING: Add option to disable automatic saving of input remap files
- INPUT/LINUX/UDEV: Fix lightgun scaling on Y axis
- INPUT/LINUX/X11/LED: Add LED keyboard driver
- INPUT/WINDOWS/LED: LED keyboard driver cleanup
- INPUT/WINDOWS/WINRAW: Clear key states when unfocused
- INPUT/WINDOWS/WINRAW: Fix pointer device position
- IOS: iOS app icon fixes & revisions
- LIBRETRO/SAVESTATES: Implement an api call for context awareness
- LOCALIZATION: Updates
- LOCALIZATION: Add Catalan language option
- LOCALIZATION: Fix some bad localization
- LINUX: Make memfd_create call more backwards compatible by calling it through syscall - on older systems, you'll have to include linux/memfd.h for the MFD_ defines, and call memfd_create() via the the syscall(2) wrapper (and include unistd.h and sys/syscall.h for it work). We exclude linux/memfd.h header include because we already provide the MFD_ defines in case they are missing
- LINUX/MALI FBDEV: Fix assertion failed on video threaded switch
- MENU: Menu paging navigation adjustments
- MENU: New Menu Items for disabling Info & Search buttons in the menu
- MENU: Allow the user to use volume up/down/mute hotkeys from within the menu
- MENU: Add missing sublabels for non-running Quick Menu
- MENU/XMB/OZONE: Prevent unnecessary thumbnail requests when scrolling through playlists
- MENU/OZONE: Fix playlist thumbnail mouse hover after returning from Quick Menu
- MENU/OZONE: Thumbnail visibility corrections
- MENU/OZONE: Playlist metadata reformat
- MENU/OZONE: Savestate thumbnail fixes
- MENU/OZONE: Add savestate thumbnails
- MENU/OZONE: Header icon spacing adjustment
- MENU/RGUI: Savestate thumbnails
- MENU/SETTINGS: Turn Advanced Settings on by default, this entire filtering of settings will need a complete rethink anyways
- MENU/WIDGETS: Widget color + position adjustments
- MIYOO: Exclude unused HAVE_HID for Miyoo
- MIYOO: Enable screenshots
- MIYOO: Enable rewind
- NETWORK: Allow MITM server selection on OK callback
- NETWORK: Replace socket_select calls
- NETWORK: Implement binary network streams
- NETWORK: Poll support
- NETWORK: Check connect errno for successful connection
- NETWORK: Get rid of the timeout_enable parameter for socket_connect
- NETWORK: Fix getnameinfo_retro's port value for HAVE_SOCKET_LEGACY platforms
- NETWORK: Define inet_ntop and inet_pton for older Windows versions
- NETWORK: Define isinprogress function
- NETWORK/NATT: Move natt files to "network"
- NETWORK/NETWORK STREAMS: Add function netstream_eof
- NETWORK/NETPLAY: Fix game CRC parsing
- NETWORK/NETPLAY: Disable and hide stateless mode
- NETWORK/NETPLAY: Change default for input sharing to "no sharing"
- NETWORK/NETPLAY: Enforce a timeout during connection
- NETWORK/NETPLAY: Disallow clients from loading states and resetting
- NETWORK/NETPLAY: Special saves directory for client
- NETWORK/NETPLAY: Ensure current content is reloaded before joining a host
- NETWORK/NETPLAY: Fix client info devices index
- NETWORK/NETPLAY: Fix input for some cores when hosting
- NETWORK/NETPLAY: Memory leak fixes
- NETWORK/NETPLAY: Force a core update when starting netplay
- NETWORK/NETPLAY: Fix NAT traversal announce for HAVE_SOCKET_LEGACY platforms
- NETWORK/NETPLAY: Refactor fork arguments
- NETWORK/NETPLAY: Fix content reload deadlocks on static core platforms
- NETWORK/NETPLAY: Disallow netplay start when content is not loaded for static core platforms
- NETWORK/NETPLAY: Show client slowdown information
- NETWORK/NETPLAY: Improve check frames menu entry
- NETWORK/NETPLAY: Do not try to receive new data if the data is in the buffer
- NETWORK/NETPLAY: Copy data on receive, even if the buffer is full
- NETWORK/NETPLAY: Fix lobby sublabel CRC display on some platforms
- NETWORK/NETPLAY: Support for customizing chat colors
- NETWORK/NETPLAY: Small launch compatibility patch adjustments
- NETWORK/NETPLAY: Support for banning clients
- NETWORK/NETPLAY: Minor tweaks to the find content task
- NETWORK/NETPLAY: Support for gathering client info and kicking
- NETWORK/NETPLAY: Fix possible deadlock
- NETWORK/NETPLAY: Initialize client's allow_pausing to true
- NETWORK/NETPLAY: Disable netplay for unsupported cores - with stateless mode being disabled for now, there is no reason not to include this. Refuse to initialize netplay when the current core is not supported (no proper savestates support)
- NETWORK/NETPLAY/DISCOVERY: Ensure fixed width ints on packet struct
- NETWORK/NETPLAY/DISCOVERY: Support for IPv4 tunneling (6to4)
- NETWORK/NETPLAY/DISCOVERY/TASKS: Netplay/LAN Discovery Task refactor - aims to prevent blocking the main thread while awaiting for the LAN discovery timeout; This is accomplished by moving the whole discovery functionality into its task and using a non-blocking timer to finish the task. Also fixes discovery sockets not being made non-blocking, which could cause the main thread to hang for very long periods of time every pre-frame.
- NETWORK/NETPLAY/TASKS: Find content task refactor - fixes many issues along the way, including a couple of nasty memory leaks that would leak thousands of bytes each time the task ran. It also expands the original concept by matching currently run content by filename (CRC matching is always performed first though).
- NETWORK/NETPLAY/TASKS: Find content task refactor - Ensure CRC32 is 8 characters long
- NETWORK/NETPLAY/LOBBY: Add setting for filtering out rooms with non-installed cores
- NETWORK/NETPLAY/LOBBY: Add a toggleable filter for passworded rooms. In addition, move lobby filters into its own submenu for better organization.
- NETWORK/NETPLAY/MENU: Chat supported info for the host kick submenu
- NETWORK/NETPLAY/MENU: Localize relay servers
- NETWORK/NETPLAY/MENU: Host Ban Submenu
- NETWORK/NETPLAY/MENU: Add client devices info to the kick sub-menu
- NETWORK/NETPLAY/MENU: Path: Netplay -> Host -> Kick Client - Allows the host to kick clients. Allows the host to view client information: connected clients (names), status (playing/spectating) and ping.
- NETWORK/NETPLAY/VITA: Add net_ifinfo support
- NETWORK/NETPLAY/VITA: Enable partial LAN discovery
- NETWORK/NETPLAY/VITA: Change default UDP port to 19492
- NETWORK/NETPLAY/VITA: Do not multiply negative timeout values
- NETWORK/UPNP: Attempt support for remaining platforms
- NETWORK/UPNP: Support for IPv4 tunneling
- ODROID GO2: Increase DEFAULT_MAX_PADS to 8 for ODROIDGO2, since that impacts the RG351[X] consoles. The RG351[X] have a USB host controller and can have an arbitrary number of USB gamepads.
- ONLINE UPDATER: Online Updater menu reorganizing
- OSX: Fixed items of system top menu bar on macOS
- OSX: Revision to macOS app icon set
- PLAYLISTS: Ensure history list will contain CRC32
- PLAYLISTS: Fix CRC32 comparison - as state->content_crc has "|crc" suffix.
- PS4/ORBIS: Orbis/PS4 Support using OrbisDev toolchain
- PS4/ORBIS: Update xxHash dependecy
- PS4/ORBIS: Shader cache
- RETROFW: Exclude unused HAVE_HID for RetroFW
- RETROFW: Support battery indicator on RetroFW
- RETROFW: Enable menu toggle button on retrofw devices
- SHADERS: Shader Preset Loading of Multiple additional #references lines for settings
- SHADERS: Shader Load Extra Parameter Reference Files - this adds the ability to put additional #reference lines inside shader presets which will load additional settings. The first reference in the preset still needs to point at a chain of presets which ends with a shader chain, and subsequent #reference lines will load presets which only have parameter values adjustment. This allows presets to be made with a modular selection of settings. For example with the Mega Bezel one additional reference could point at a preset which contained settings for Night mode vs Day mode, and another reference could point to a preset which contained settings for how much the screen should be zoomed in.
- SHADERS/MENU: Increase shader scale max value
- SCANNER/DC: Fix Redump bin/cue scan for some DC games
- SCANNER/GC/WII: Add RVZ/WIA scan support for GC/Wii
- SCANNER/PS1: Improved success rate of Serial scanning on PS1 by adding support for the xx.xxx format
- SCANNER/PS1: Changed return value of detect_ps1_game function to actuially return a failure when the Serial couldn't be extracted. Scanner will then fallback on crc check, and usually ends up finding the games in the database.
- SWITCH: Enable RWAV (WAV audio file) support
- STRING: Do not assume char is unsigned
- TASKS: More thread-awareness in task callbacks
- TASKS: Fix race condition at task_queue_wait
- TVOS: Revised tvOS icons w/ updated alien.
- VFS: Fix various VFS / file stream issues
- VULKAN: Fix more validation errors
- VULKAN: Attempt to fix validation errors with HDR swapchain. Always use final render pass type equal to swapchain format. Use more direct logic to expose if filter chain emits HDR10 color space or not
- VULKAN/ANDROID: Honor SUBOPTIMAL on non-Android since you'd want to recreate swapchains then. On Android it can be promoted to SUCCESS.
SUBOPTIMAL_KHR can happen there when rotation (pre-rotate) is wrong.
- VULKAN/DEBUG: Automatically mark buffer/images/memory with names
- VULKAN/DEBUG: Move over to VK_EXT_debug_utils. Debug marker is deprecated years ago.
- WINDOWS: Fix exclusive fullscreen video refresh rate when vsync swap interval is not equal to one - refresh rate in exclusive fullscreen mode was being incorrectly multiplied by vsync swap interval, breaking swap interval functionality at the gfx driver level
- WIN32: Do optimization for Windows where we only update the title with SetWindowText when the previous title differs from the current title
- WIN32: Skip console attach when logging to file
- WIN32: Remove black margins with borderless non-fullscreen window
- WIN32/TASKBAR: Release ITaskbarList3 on failed HrInit - pointer wasn't NULL'd, thus set_window_progress would cause weird behavior
- WII/GX: Fix potential datarace
- WIIU: Implement sysconf and __clear_cache
- WIIU: Add OS memory mapping imports
- UWP: Added launch protocol arg 'forceExit' so a frontend can tell an already-running RetroArch UWP instance to quit.
- UWP: Enable core downloader/updater
- UWP: Remove copy permissions as its inefficient as we can just directly assign the new ACL and that works
- Xbox/UWP: Remove expandedResources
- Xbox/UWP: UWP OnSuspending crash fix
- Xbox/UWP: Enable savestate file compression by default for UWP/Xbox - got told there are no more issues with it
- Xbox/UWP: Add support for 4k to angle on xbox for MSVC2017 build
- 3DS: Add a menu toggle for switching between old and new 3DS speeds, located in the 'Power Management' menu. Enabled by default, hidden on old 3DS devices.
- MIYOO: Improve CPU architecture and model name identification for Miyoo
- MENU/SETTINGS: Remove 'Advanced Settings' flag from 'Settings > Core' menu
- MENU/MATERIALUI: Add 'Gray Dark + Light' themes
- MENU/RGUI: Add 6x10 extended ASCII and Latin Extended A and B fonts. These will enable most Latin alphabets to be displayed in RGUI.
- MENU/RGUI: Add 'Gray Dark + Light' themes
- MENU/XMB: Add title margin adjustment
- MENU/XMB: Vertical fade corrections
- MENU/OZONE: The size of the thumbnail bar can now be changed though a new option (Settings->User interface->Appearance) up to double its normal size.
- ARCHIVE: Allow loading files from archive subdirectory
- AUDIO: Remove frame limit from audio batch callback. Before, if a core used the audio batch callback, there would be a hidden cap of 1024 on the number of audio frames that could be sent. If a core exceeded this value, any excess samples were silently discarded. While this is sufficient for 'normal' samplerates/framerates, it means that e.g. a core using the batch callback to send 44100 Hz audio at 30 fps with would have entirely broken sound. This has been fixed by removing the audio batch frame limit.
- AUDIO/RESAMPLER/NEON: Implement sinc kaiser NEON function
- CHEEVOS: Check netplay status when unlocking achievements
- CHEEVOS: Support for hashing buffered NDS ROMs
- CHEEVOS: Fix hung task whe badge doesn't exist
- CLI: Load save states from command-line or playlist
- CORE INFO CACHE/SETTINGS: Restore missing 'Cache Core Info Files' menu entry
- DATABASE: Serial scanning for Gamecube/MegaCD/SegaCD/Saturn/PSX/PSP/Dreamcast/Wii
- EMSCRIPTEN: Add Jaxe, WASM4 cores
- FILE IO: Fix incorrect file names for remap files when the content path doesn't have a preceding slash
- INPUT/OVERLAY: Added support for showing the overlay behind the menu instead of in front. This is currently only supported on the GL, Vulkan, D3D 9/10/11/12 and 3DS drivers.
- INPUT/UDEV: Convert abs mouse from screen to viewport coordinates; fix relative mouse coords
- INPUT/WAYLAND: Ignore mouse clicks on window decoration
- LINUX: Added support for Linux GameMode (https://github.com/FeralInteractive/gamemode), which can be toggled on/off in the Power Management or Latency settings menus.
- NETWORK: Fix dummy notification - no longer shows a netplay initialization failed notification when netplay is not enabled
- NETWORK: LAN addresses only for UPnP - Some router devices might accept non-LAN addresses without raising an error.
- NETWORK: Filter out non-connectable rooms. Add an option for filtering out non-connectable netplay rooms.
- NETWORK: Netplay spectator notification fix. Fix double notification when the host switches to spectator.
- NETWORK: Prevents long-term pausing from clients dishonoring allow pausing
- NETWORK/LOBBY: Lobby Viewer: Filter out rooms that are not running RetroArch
- NETWORK/LOBBY: Lobby Viewer: Display a non-connectable tag to non-connectable rooms
- NETWORK/LOBBY: Host: Display warning if we are announcing to the internet but our room isn't connectable from there
- NETWORK/RELAY: Custom relay server support - Add support for custom user-ran relay servers
- NETWORK/RELAY: Replace Canadian relay server with Singapore relay server. Current relays: New York/USA, Madrid/Spain, Sao Paulo/Brazil, Singapore
- NETWORK/UPNP: Various refactors/improvements, no more dependent on miniupnpc
- NETWORK/UPNP: Various UPnP binding fixes for specific routers
- NETWORK/UPNP: Accept IGD v2 service types
- NETWORK/UPNP: Delay lobby server announcing - delay the announcing in order to give UPnP's port forwarding more time. Fix the remaining truncation warnings.
- NETWORK/UPNP: Smart interface selection - Find the most suitable address for UPnP by scoring interfaces on how close their address is to the device's address
- OPENGL1: Fix buffer overflow - RetroArch would sometimes crashes at startup when loading asset textures with GL1 driver
- PS3: PSL1GHT port added to Gitlab CI
- VULKAN: Double combined image sampler descriptor pool size - fix segfaults with AMD GPUs using RADV
- VULKAN: Emulate mailbox only with Vsync enabled - otherwise have it disabled - useful for VRR/G-Sync/FreeSync
- VULKAN/SWAPCHAIN: Vulkan max swapchain images option adjustments: removed value 1, since it won't be used - Video reinit on change, so that there is no need to restart or toggle fullscreen
- VULKAN/HDR: HDR support - tested on Windows
- WAYLAND: Add libdecor for client side decoration
- WAYLAND: Use any display for initial metrics
- WAYLAND: Fix the window closing, if RetroArch is build without libdecor
- WAYLAND: Use checked sizes in EGL resize
- WAYLAND: Fix window title update
- WEBOS: Fix webOS build and run
- WIIU: Fix rotation
- UWP/XBOX: Fix content over 4GB (approx) failing to load, improve/speed up copy/load times
- UWP/XBOX: Fix scanning for playlists
- UWP/XBOX: Move content copied to LocalState to a dedicated dir and clear on startup
- UWP/XBOX: Make content copy to a specific cache directory in the LocalState folder when it's copied
- UWP/XBOX: Auto delete VFS cache dir on startup
- UWP/XBOX: Make resolution switching automatic and fix angle output issues
- UWP/XBOX: Force ANGLE to render at 1080p regardless of screensize as the output is 1080p regardless of screensize. This fixes an issue where at 4k any angle output would be zoomed into a corner.
- UWP/XBOX: Set resolution based on display resolution (auto 4k)
- UWP/XBOX: Set driver to D3D11 if booting with opengl
- UWP/XBOX: Reset width and height of output on boot to match display
- UWP/XBOX: Mitigate need for VFS cores on NTFS drives
- UWP/XBOX: Make check for standard I/O by access rather than the just assuming based on path string
- UWP/XBOX: Add code to auto permissions so files can be accessed by non VFS cores (no exFAT or FAT32 support yet)
- CHEEVOS: Use widget for game loaded achievement progress
- CONFIG: Honor config_save_on_exit when Reboot/Shutdown is called
- DISK CONTROL: Focus on current content entry in Disk Control append/insert
- FRAMEDELAY: Auto Frame Delay Improvements - swap interval handling, D3DX handling, and delay target resets also on core restart. It should now work with high refresh rates and also with Direct3D 10/11/12 drivers
- INPUT/GYRO/ACCELEROMETER/ANDROID: Re-enable Gyroscope & Accelerometer when RetroArch resumes or regains focus
- LAKKA/SWITCH: Disable cpu scaling, uses its own CPU governor
- LOGGING: Logging cleanups. A bunch of unifications and reformattings (capitalizations, dots, quotes, prefixes etc). Also added a few missing things, such as Run-Ahead error logging and LED interface init logging when it is enabled.
- NETWORK/UPNP: Switch to a permanent lease time, but request it to be removed when we do netplay_free. Switch to a permanent lease time, but request it to be removed when we do netplay_free.
- VIDEO/ROTATION: Always return false if rotation can't occur. RETRO_ENVIRONMENT_SET_ROTATION should return false when rotation has been forcefully disabled in frontend, that way the core can decide if aspect ratio should be rotated or not for vertical games. Useful for FBNeo for instance.
- CRT/SWITCHRES: Fixes some issue where scaling is incorrect in some video modes for CRT output.
- FRAMEDELAY: Add 'Automatic Frame Delay' option
- INPUT: Add 'All users control the menu' setting - any gamepad can control the menu when this is enabled. Only limitation right now is that only player 1 can toggle the menu, but any set Menu Toggle Controller Combo will work fine for all users, so this should be acceptable for now
- INPUT/UDEV: Fix Dolphin bar and safeguard against not adding devices with no mouse or touch buttons detected
- NETPLAY/CLI: -C/--connect commandline fix
- NETPLAY: Other improvements
- NETPLAY: Remove forced disconnection on unknown netplay command -
will be backwards compatible with any version that removed this
disconnect. instead of disconnecting, we just read the data and
ignore, like most network implementations do
- TASKS/CHEEVOS: Replace coroutines with tasks/thread
- TASKS/DATABASE/EXPLORE: Initialise 'Explore' menu on a background thread - no more stall when hovering over the Explore tab
- 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
- 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
- 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)
- 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/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
- 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
- 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
- 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 scalling. 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
- 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
- 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:
- LAKKA: This adds managed policies and settings to store them and reload them at startup
- LIBRETRO API: Add API extension for cores to override frontend fast-forward state
- MENU/RGUI: Fix saving of config files/overrides when 'Lock Menu Aspect Ratio' is enabled
- SHADERS: Fix 'Auto-Shader Delay' functionality
- UWP/D3D11: Disable mipmap generation
- UWP/XBOX: Add 'Force 4K resolution' option (Force the resolution to the fullscreen size on Xbox, if set to 0, a fixed value of 3840 x 2160 will be used)
- AUDIO: Memalign audio buffers to 64 bytes. This is the most common cache line size, helps with performance. Also fixes issues with platforms like PSP that wrongly assume that malloc returns aligned buffers (to 16bytes). This recently broke the PSP builds
- AUDIO/JACK: Deinterleave in the process callback. This allows us to avoid the extra copy to the deinterleave buffer and lets us use only a single jack ringbuffer.
- AUDIO/JACK: (Audio/JACK) Fix non-blocking write. Previously we would wait on the condition variable even in the non-blocking case. This improves fast-forward performance massively and brings JACK in line with other backends in that regard.
- D3D11: Add flip model support - fallback to blit model for OSes where flip model is not supported (windows 7 and earlier). Will add a menu option later allowing the user to switch inbetween the two
- D3D12: Should now be able to use shaders with hardware-accelerated libretro cores
- INPUT MAPPING/REMAPPING: Minor bugfix - Remap file browsing starts navigation at input_remapping_directory even if the core-subdir (where saved files go) exists
Having remaps for many different cores makes finding the active core files cumbersome, especially because remaps are not compatible between different cores (but maybe for cores emulating the same hardware)
- INPUT MAPPING/REMAPPING: Major bugfix - Remap file having a different device type requires manual intervention after loading for the core to register the type properly
- LINUX: Adjust brightness according to the limit. Seems like some platforms feature non-standard maximums, but the variable is correclty exported for us to use
- MENU/DESKTOP/WINDOWS: Remove broken 'Update RetroArch' functionality for Windows. We want this to not only be system agnostic if we bring it back, but also work outside of the Qt desktop interface
- OGA: Implement RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER. This is a faster rendering codepath for software rendered libretro cores that some libretro cores use right now. Video drivers in RetroArch have to explicitly implement this for this codepath to work at runtime.
- OVERLAYS: Hide Overlay When Gamepad is Connected. Overlays will be hidden automatically when a gamepad is connected in port 1, and shown again when the gamepad is disconnected.
- OVERLAYS: New default overlays for mobile (neo-retropad)
- OVERLAYS: In addition to overlay scale, the user can now set an Overlay Aspect Adjustment factor. Most overlays are designed for 16:9 displays, which means they become stretched/ugly on modern wide aspect phones and suchlike. By changing the Overlay Aspect Adjustment factor, a user can scale the overlay width/height to achieve a uniform appearance regardless of display resolution.
- OVERLAYS: Since scaling a gamepad overlay can result in buttons being squished too close together (or being pulled too far apart), the user can now adjust the effective spacing of the different 'halves' of an overlay via Overlay Horizontal Separation and Overlay Vertical Separation factors. Overlay Horizontal Separation divides the overlay in two vertically (left/right, at the centre point), and applies a spacing offset (positive or negative) between the UI elements on each side; Overlay Vertical Separation does the same, but the split is horizontal (top/bottom)
- OVERLAYS/FIX: The Overlay X Offset and Overlay Y Offset options have been fixed, and now work correctly
- OVERLAYS/FIX: All of the above options (and Overlay Scale) are configured and saved independently for landscape and portrait display orientations - so adjusting everything for a nice landscape layout won't break the portrait display
- OVERLAYS/FIX: When using the Vulkan gfx driver, memory is leaked every time an overlay is freed
- OVERLAYS/FIX: When threaded video is enabled, loading overlays with no images (i.e. utility-type overlays, where everything is hidden until the screen is touched) can generate segfaults due to improper usage of realloc()
- OVERLAYS/FIX: When Show Inputs on Overlay is enabled, ASAN reports bit shift errors due to an incorrect range check when handling turbo inputs - essentially, there is no upper limit to the considered input id range, which means overlay hotkeys (menu toggle, etc.) are incorrectly treated as having turbo support, causing bit shifts using wildly inappropriate id indices
- SAVESTATES: Adding savestate garbage collector for autoincrement stavestates. As some issues indicate, there's an issue with
the autoincrement save slot feature: slot index will increase and very old saves won't be deleted. This adds support to delete old save states with a user defined
save state limit (global). Instead of wrapping around the slot counter it will simply delete the oldest save, since it is simpler. For now there's a limit of one deletion per save, which ensures a user cannot delete many saves by accident if they set the limit too low.
- WIFI/LAKKA: Add a proper WiFi menu, with Enable/Disable & Disconnect options. This also allows WiFi passwords to be remembered. The underlying tool (connman) allows to store passswords (that's why it auto connects whenever you boot a Lakka device), so we expose this so that the user does not have to re-input the pass when connecting to a saved wifi.
- WINDOWS/XP: The OpenGL 1 video driver is now the default for maximum backwards compatibility upon first startup. It's of course always possible for the user to change this.
- WINDOWS/MENUBAR: Load accelerators, Localize Win32 menu items to current language, and display shortcut keys
- ANDROID/VIBRATION: Fixes "Vibrate on Key Press" having no effect on Android devices, which occurred because only the off time/strength was defined in what should have been a pair of off/on values
- CORE OPTIONS: Pressing OK (or clicking/tapping) on a 'boolean toggle' core option no longer opens a drop-down list. The value now toggles directly, just like boolean options everywhere else in the menu
- CORE OPTIONS: Toggling an option that changes the number of core options being displayed (i.e. things like `Show Advanced Audio/Video Settings) no longer resets the navigation pointer to the start of the list
- CORE OPTIONS: Before, RetroArch would identify core option values as being 'boolean' if they had labels matching the specific strings enabled or disabled. Most core devs would abide by this, but not always... As a result, we sometimes would end up with misidentified values, with all kinds of Enabled, Off, True, etc. strings littering the menu, in place of proper toggle switches. All boolean-type value labels are now detected, and replaced with standard ON/OFF strings.
- CRT: On the fly CRT porch adjuments - these changes allow a user to adjust how the porch algorithm generates the 15khz/31khz output. Giving the ability to change over/under scan.
- PLAYLISTS: Change playlists to use dynamic arrays. Instead of a fixed initial 12MB memory allocation (99999 * 128 byte (on 64bit arch)), use a dynamically growing array
- AUTO SAVESTATES: Ensure save states are correctly flushed to disk when quitting RetroArch (fixes broken save states when exiting RetroArch - without first closing content - with 'Auto Save State' enabled)
- BUILTIN CORES: Builtin cores like ffmpeg and imageviewer would previously try to erroneously load a dynamic core named 'builtin' - this would fail and would just be a wasteful operation - this now skips dylib loading in libretro_get_system_info for builtin cores
- CORE DOWNLOADER: Pressing RetroPad start on a selected, installed entry opens the Core Information menu (when using Material UI, swiping left or right triggers the same action). This means we can now view bios info etc. - and more importantly delete cores - without jumping through all the hoops of loading a core first and navigating all over the place
- 3DS: Allow button presses up to INPUT_MAX_USERS - this enables the 3DS to bind and use buttons and axis for users up to the maximum set by 'Max Users' in the input settings menu.
- 3DS: Disable video filter if upscaled resolution exceeds hardware limits. The 3DS has a maximum video buffer size of 2048x2048. This is sufficient for every core that it supports, but when using software video filters the core output resolution is doubled. This is made worse by the fact that the video filter upscaling buffer size is dependent upon the maximum output resolution of the core - which in some cases is very large indeed (e.g. pcsx-rearmed sets a maximum width of 1024, for enhanced resolution support). The 3DS has very limited 'linear memory' for graphics buffer purposes, and a large base core buffer + video filter buffer can easily exceed this - which may also disable video output, or cause a crash. This PR very simply adds a 3DS-specific check to the video filter initialisation: if the resultant upscaling buffer exceeds the hardware limitation, then the filter is automatically disabled.
- 3DS/FONT/BUGFIX: Text colour was wrong: the RGBA channels were muddled, and R was always set to 255
- 3DS/FONT/BUGFIX: When drawing multiline strings, the line spacing was completely incorrect
- 3DS/FONT: Improves the appearance of the drop shadow effect on notification text.
- 3DS/ARCHIVE/7Z: Re-enable 7zip support.
- ARCHIVE/ZIP: Expand functionality of 'rzip_stream' interface. This PR expands the functionality of the new rzip_stream archived stream interface such that it now has almost complete feature parity with the standard file_stream interface, and can therefore be used as a drop-in replacement in most situations
- AI SERVICE: Hide redundant entries when service is disabled
- COMMANDLINE: Advise against using -s and -S variables on the command line. …
- CONFIG FILE: Only write config files to disk when parameters change
- CONFIG FILE/BUGFIX: RetroArch no longer crashes when attempting to save a config file after 'unsetting' a parameter (currently, this can be triggered quite easily by manipulating input remaps)
- CONFIG FILE/BUGFIX: When using Material UI, RetroArch no longer modifies the wrong setting (or segfaults...) when tapping entries in the Quick Menu > Controls input remapping submenu
- CONFIG FILE/BUGFIX: Quite a few real and potential memory leaks have been fixed.
- FASTFORWARDING: A new Mute When Fast-Forwarding option has been added under Settings > Audio. When enabled, users can fast forward without having to listen to distorted audio.
- GLCORE/SLANG: Set filter and wrap mode correctly when intialising shader textures. Before, the glcore shader driver did not correctly initialise loaded textures. The texture filtering and wrap mode were forced on texture creation, but these settings were not recorded - subsequent updates would set garbage values, that would resolve to linear filtering OFF and wrap mode = CLAMP_TO_EDGE.
- IOS: Set audio session category to ambient so sound does not get cut off on interruption (phone call/playing back audio)
- MAC/IOHIDMANAGER/BUGFIX: Fix for Mayflash N64 adapter. In case last hatswitch does not match cookie. For the mayflash N64 adapter, I was getting a BAD EXC ADDRESS (in mac OS 10.13) for this line (tmp was NULL). Retroarch would crash in the gui if I pressed a button from the DPAD on controller 2. With this change, it no longer crashes in the gui and still registers the button push.
- MAC/COCOA: Fix mouse input - this brings back two lines of code that have been removed over time but
appear to be required in order for mouse input to work on macOS
- MENU/OZONE/INPUT/BUGFIX: Fix undefined behaviour when using touch screen to change input remaps
- MENU/OZONE/INPUT/BUGFIX: It turns out that Windows reports negative pointer coordinates when the mouse cursor goes beyond the left hand edge of the RetroArch window (this doesn't happen on Linux, so I never encountered this issue before!). As a result, if Ozone is currently not showing the sidebar (menu depth > 1), moving the cursor off the left edge of the window generates a false positive 'cursor in sidebar' event - which breaks menu navigation, as described in #10419. With this PR, we now handle 'cursor in sidebar' status correctly in all cases
- MENU/OZONE/INPUT/BUGFIX: Pointer input is now correctly disabled when message boxes are displayed
- PLAYLIST/BUGFIX: Improve handling of 'broken' playlists - RetroArch will no longer segfault when attempting to run content via a playlist entry with missing path or core path fields.
- PLAYLIST/BUGFIX: Improve handling of 'broken' playlists - when a playlist entry has either core path and/or core name set to NULL, DETECT or an empty string, attempting to load content will fallback to the normal 'core selection' code (currently this happens only if both core path and core name are DETECT - this is wholly inadequate!)
- PLAYLIST/BUGFIX: RetroArch will no longer segfault when attempting to fetch content runtime information when core path is NULL
- PLAYLIST/BUGFIX: Core name + runtime info will only be displayed on playlists and in the Information submenu if both the core path and core name fields are 'valid' (i.e. not NULL or DETECT)
- PLAYLIST/BUGFIX: When handling entries with missing path fields, the menu sorting order now matches that of the playlist sorting order (at present, everything goes out of sync when paths are empty). Moreover, entries with missing path fields can now be 'selected', so users can remove them (currently, hitting A on such an entry immediately tries - and fails - to load the content, so the only way to remove the broken entry is via the Playlist Management > Clean Playlist feature)
- VIDEO/WIDGETS/BUGFIX: The font ascender/descender metrics added in #10375 are now used to achieve 'pixel perfect' vertical text alignment
- VIDEO/WIDGETS/BUGFIX: Message queue text now uses its own dedicated font. Previously, a single (larger) font was used for all active widgets, and this was scaled down for message queue items. This 'squished' the text a little; more importantly, when using the stb font renderers (on Android. etc.) it caused ugly artefacts around the edges of glyphs due to pixel interpolation errors. Now that a correctly sized font is used, the message queue is always rendered cleanly.
- VIDEO/WIDGETS/BUGFIX: Previously, each widget font was 'flushed' (font_driver_flush()) at least once a frame. This is quite a slow operation. Now we only flush fonts if they have actually been used.
- VULKAN/BUGFIX: Fix display of statistics text
- UNIX/BUGFIX: Fix overflow when computing total memory on i386
- WIIU/BUGFIX: Fix font driver horizontal text alignment
- WIIU/BUGFIX: Fix non-vertex coordinates in draws using tex shader
- WIIU/BUGFIX: Update and fix meta.xml file for the WiiU release. This change makes it so the information from the meta.xml file parsed for the WiiU's Homebrew Launcher is displayed properly.
- 3DS: Keep the bottom screen hidden on sleep/wakeup. When the 3DS wakes back up after being closed, the bottom screen needs to be reinitialized. Adding the condition here will cause the screen to be turned on or off based on the state of ctr_bottom_screen_enabled, as you'd expect
- BUGFIX: Retroarch overlay displaying "Game remap file loaded." on the overlay instead of "Core remap file loaded." when only a core remap file is present
- MENU/DATETIME: Adds some new timedate styles that follow the DD/MM/YYYY format, found in several European countries
- MENU/DATETIME: Modifies the existing translation files in order to accommodate the new options that are now available
- MENU/DATETIME: Reorders the timedate view options based on a decreasing order of the quantity of information displayed, so that they are more convenient to switch around and easily categorized
- MENU/OZONE/POINTER: Pointer can be used to switch between sidebar and entries list
- MENU/OZONE/POINTER: Pointer can be used to select sidebar and entries list items
- MENU/OZONE/POINTER: Both sidebar and entries list can be scrolled by dragging
- MENU/OZONE/POINTER: Clicking/pressing the header or footer produces a 'cancel' action
- MENU/OZONE/POINTER: Cursor focus follows mouse pointer from sidebar to entries list (and vice versa)
- MENU/OZONE/POINTER: In entries list, item under cursor is automatically selected (with some fudging to ensure this doesn't break mouse wheel scrolling)
- MENU/OZONE/POINTER: In sidebar, item under cursor is not automatically selected (this is too jarring)
- DISK CONTROL: Cycle Disk Tray now becomes Eject Disk or Insert Disk depending upon current drive state
- DISK CONTROL: Current Disk Index is only shown when the current disk has been ejected
- DISK CONTROL: The old Insert Disk entry has been changed to Load New Disk, and is only shown when a disk is currently inserted (this is because loading a new disk from the filesystem - i.e. bypassing the m3u playlist disk index interface - automatically ejects and inserts disks, and so cannot be done while the virtual drive is empty)
- DISK CONTROL: The Current Disk Index may now be set more easily via a drop-down list.
- DISK CONTROL: Selecting Eject Disk automatically moves the menu selection to the Current Disk Index entry
- DISK CONTROL: Selecting an index via the Current Disk Index drop-down list automatically moves the menu selection back to Insert Disk
- DISK CONTROL: The Disk Control entry sublabels have been changed for greater clarity
- DISK CONTROL: All of the horrendous notification spam has been removed. Notifications are now only shown in the event of an error, or when the menu itself does not provide sufficient visual feedback (note that using hotkeys to swap disks still produces the old style notifications, since this is typically only done while content is running - i.e. no menu). The duration of disk-related info notifications has also been reduced to a more sane level.
- DISK CONTROL: A new Resume content after changing disks option has been added under Settings > User Interface. When enabled (default setting), content is resumed automatically after selecting either Insert Disk or Load New Disk (when disabled, the menu remains open, obviously...)
- DISK CONTROL/BUGFIX: The Disk Control menu now has the correct title
- DISK CONTROL/BUGFIX: Selecting a disk via the Load New Disk file browser no longer flushes the user back to the top level menu (it now correctly returns to the Disk Control menu)
- LIBNX/SWITCH: Updated libnx integration to v3.0.0. This also cherry-picks libnx commit 583d6bb92dcbb33b6bb4a0fa1a9df6e3725d6ef6, which should fix the requirement having to turn rumble off and on in the system settings once per reboot
- BUGFIX/MENU: (XMB/OZONE) Fix 'quick menu' detection. XMB would not display savestate thumbnails in the quick menu if it was accessed via the main menu
- BUGFIX/CRASH/OPENGL/WINDOWS: Fix regression in 1.8.2 that would cause GL-based cores to fail because it would try to erroneously load libGLESv2.dll instead of OpenGL32.dll (cores affected: VitaQuake 2/3/Dhewm3, possibly more)
- NETPLAY/RELAY: Fix the “spectator” bug when using the relay server – When a player switches into the spectator mode (pressing “i”) while using the relay server, all players will disconnect.
- NETPLAY/RELAY: Overall stability has improved. Fixed a memory leak that would cause the relay server to become unresponsive after some time.
- NETPLAY/RELAY: Fixed critical bug that would cause all players to be disconnected from the relay server if one player was leaving the game. That bug had been open for one year and we were finally able to fix it.
- THUMBNAIL UPDATER: When waiting for individual thumbnail file http transfers to complete, the task status checking is more accurate. This uses the same method as the new core updater - we now wait until the task is 'really' complete, instead of relying on the (slightly nebulous) 'task finished' state
users for a while, where glslang throws an assert after closing a game (and starting a new one). This would affect all video drivers that use Slang for shaders, such as D3D10/11/12/Vulkan/Metal
- FFMPEG CORE: The video FIFO can be removed, since we have a ring buffer in its place. This removes unneeded copy operations and as a positive side improves overall decoding speed. Makes 8k60p SW and 4k60p HW decoding feasible on many systems. For now the ring buffer is 32 images deep. This limitation will be removed, once audio and video decoder have their own packet handling.
- INPUT/TURBO: Added alternate Turbo-Mode 'Single Button' - For systems supporting only a single button, the turbo-button will toggle firing that button without the need to hold it. When holding the button turbo will be suspended and resumed when the button is released. Holding the button may have a different function to just tapping it.
- LINUX/LOCALIZATION: Correct Droid Sans Fallback font path in Linux. This should fix Chinese/Korean font display issues on Fedora/RHEL/CentOS/openSUSE/SLE
- MENU/BUGFIX: When using a keyboard/gamepad/mouse wheel to navigate, the menu scroll position is always maintained and updated in a consistent (and expected) fashion
- MENU/BUGFIX: When resizing the window, or changing the orientation of a mobile device, the current scroll position is correctly preserved
- MENU/XMB: Fullscreen thumbnail viewer for boxart and pictures
- MENU/USABILITY: Selectively hide 'Disallow Non-Slave Mode Clients' if 'Allow Slave-Mode Clients' is disabled
- MENU/USABILITY: Hide 'Show desktop menu on startup' if 'Desktop menu' setting itself is disabled
- MENU/USABILITY: Reimplement Quick Menu - > Shaders -> Watch shader files for changes - can now be turned on/off through touch
- MENU/USABILITY: Refactor Quick Menu - Controls - each port now has its own submenu
- MENU/USABILITY: Quick Menu - Cheats - Delete All no longer requires five right button presses - this should fix this functionality for mobile touch users too
- MENU/USABILITY: Hide Refresh Rate options when Threaded Video is enabled - these settings do nothing with Threaded Video
- OPENGL: Shaders are now working properly (only in OpenGL) when rotating both from Core API rotation and from menu video rotation. The fix is clearly visible with crt-royale for example
- OPENGL: 1:1 PAR is now correct when rotating (both from Core API rotation and from menu video rotation, as you said, in the latter case you currently have to change Aspect Ratio after menu video rotation for it to work)
- OPENGL: When using Custom Aspect Ratio and rotation (both from Core API rotation and from menu video rotation), Integer Scaling is now working properly (correct multiples of internal resolution). Even when Integer Scaling is not activated, the Custom AR width / height are now correctly labeled using (1x), (2x), ... suffixes. You also have to activate Integer Scaling after menu video rotation for it to work
- OPENGL: For all other Aspect Ratio options, Integer Scaling and rotation (both from Core API rotation and from menu video rotation) are now working properly together (correct multiples of internal resolution). You also have to activate Integer Scaling after menu video rotation for it to work
- PLAYLISTS: Pressing 'Start' or long touching a playlist will bring you to a Playlist submenu where you can set a default core, setup thumbnail view, delete the playlist, etc
- SCANNER/MANUAL: Enable automatic naming of arcade content via DAT files. This is compatible with DAT files in either Logiqx XML or MAME List XML format.
- VITA/VITA2D: Several improvements to Vita 2D driver - menu widgets implemented
- VITA/VITA2D: Fix clipping and reduce number of calls
- VULKAN/ANDROID: Workaround weird WSI return codes in landscape mode - Android WSI wants you to use preTransform, and if it is not used correctly, Android 10 will return VK_SUBOPTIMAL_KHR, and we would create a new swapchain every frame. This workaround just ignores this error, since it's not really an error. A more "proper" fix is to use prerotate and modify the MVP matrices,
which might help certain devices with crummy display processors
- VULKAN/ANDROID: Recreate swapchain on orientation change. ANativeWindow getWidth/Height does not detect any changes when using
Vulkan, so use the old onContentRectChanged callback to get notified when size changed. Use those values instead when figuring out how large swapchain to create
- WINDOWS/XINPUT: Get rid of 128 byte device name limit for XInput device discover - when device name was too long, it would not be picked up by the XInput driver and would instead fallback to DirectInput
- MENU/MATERIALUI: Bugfix - Under certain extreme circumstances, entries with very long sublabel strings could have their text prematurely 'clipped' as the entry is scrolled beyond the top of the screen
- MENU/MATERIALUI: Bugfix - Certain setting value strings were unnecessarily truncated (with a ...) when using smooth ticker text
- BUGFIX/STABILITY: Set "Automatically Add Content to Playlist" to false by default, this was unstable on PS3 and Mac and other platforms potentially as well.
- MENU/MATERIALUI: There are no longer any animation glitches when 'wraparound' scrolling from the last entry in a list to the first, or when performing horizontal swipe navigation gestures on certain settings-type entries
- MENU/MATERIALUI: List entries underneath the title and navigation bars are no longer highlighted when touching the title/navigation bars (this was only a cosmetic issue, but it was annoying...)
- MENU/MATERIALUI: The current menu list is no longer reloaded when pressing the currently active tab on the navigation bar
- MENU/MATERIALUI: The ticker text spacer has been set to a 'bullet' character (same as Ozone)
- MENU/MATERIALUI: The default colour theme has been set to 'Ozone Dark'
- MENU/MATERIALUI: Three new colour themes have been added.
- MENU/MATERIALUI: A new Menu Transition Animation option has been added under User Interface > Appearance. When this is enabled, menu transition events are animated
- MENU/MATERIALUI: The navigation bar is now shown at all times - i.e. it is an actual navigation tool, rather than a 'top-level-menu' curiosity
- MENU/MATERIALUI: Two new context-sensitive buttons have been added to the navigation bar - back button and resume button
- MENU/MATERIALUI: A new Auto-Rotate Navigation Bar option has been added under User Interface > Appearance. When enabled (this is the default setting), the navigation bar is moved to the right hand side of the screen when using landscape screen orientations.
- MENU/MATERIALUI: The playlists tab is now correctly hidden when User Interface > Views > Show Playlist Tabs is disabled
- MENU/MATERIALUI: Material UI now correctly readjusts its layout when screen orientation changes on mobile devices
- MENU/MATERIALUI: Material UI now resizes in real-time when the user manually sets the Menu Scale Factor (this never worked properly with the old DPI override)
- MENU/MATERIALUI: Material UI no longer leaks memory on 'context reset' (fonts were previously never free()'d)
- MENU/MATERIALUI: A new Android-style 'system bar' has been added. This shows current core name, clock and battery level
- MENU/MATERIALUI: A new search icon is shown on the title bar when viewing playlists and file browser lists. Pressing this launches the search interface
- MENU/MATERIALUI: The title bar now uses a larger font, and the sublabel font has also been enlarged a little, to more closely align with Material UI standards
- MENU/MATERIALUI: A number (quite a large number) of layout/spacing issues have been fixed
- MENU/MATERIALUI: The existing colour theme handling code is not fit for purpose, so the whole lot got ripped out and reimplemented. In doing so, also adjusted all the theme colours to better match Material UI standards - with a few liberties taken for aesthetic purposes.
- VIDEO LAYOUT: Add video layout mame overlay compatibility. Enabled for Windows/Linux/OSX/iOS/Android/libnx. Only works with GL driver for now, no glcore yet
- AI SERVICE: Image mode is now much faster, it now saves the image in-memory in PNG format then passes it along to the translation service
- BUGFIX: Touch input - When using an overlay to toggle the quick menu on touchscreen devices, we no longer get 'phantom' menu input - i.e. the old bug of hitting the toggle and instantly resuming content (or performing a save state) is fixed
- FPGA: Add initial FPGA port for Z-Turn boards - not really release-ready yet, will need community support to continue. Currently employs naive framebuffer approach, not fullspeed
- MENU/MATERIALUI: Bugfix - Random' items are no longer automatically highlighted when performing standard up/down 'flick' scrolling through lists (items are only highlighted when you keep the pointer still for > 200 ms)
- MENU/MATERIALUI: Bugfix - The display no longer 'jerks' for one frame when navigating backwards through lists
- MENU/MATERIALUI: Bugfix - The Material UI scaling factor is now based upon the device-reported screen DPI value (previously it relied upon a hard-coded magic number, which was never correct)
- MENU/ONSCREEN KEYBOARD: On-screen keyboard entry via mouse/touchscreen has been tidied up - no more double inputs (or unwanted menu interaction in the background)
- MENU/MOUSE: Mouse wheel up/down is now a proper 'up/down', same as using cursor keys or a dpad
- MENU: When navigating backwards from a core options drop-down list (i.e. pressing select or cancel), the last menu position is remembered (instead of resetting back to the first core option item each time)
- OSD: Memory details should now be available on every platform (get_mem_total and get_mem_free need to be implemented in the frontend driver for it to work)
- OSD: Memory details can now be shown individually without FPS and frame count
- CHEEVOS: Add hashing support for PSX (bin/cue, chd, or real CD) (for real this time, got added in the CHANGELOG for v2 then reverted before it hit release)
- SHADERS: Fix shader loading and saving in content-less cores
- SHADERS: Implement video_shader_delay setting. Screen grabbing software like streaming software can interfere with the loading of shaders, resulting in graphical glitches or freezes. This PR adds a video_shader_delay setting (in ms) and (advanced) menu entries Video -> Auto-Shader Delay, allowing to work around the issue
- AI: Add AI Service functionality (enabled for Windows/Mac/Linux/Android/iOS).
- APPLE (MAC/IOS/TVOS): Fix autodetect for mFI controllers: properly call autodetect add on the connect notification, and add call to disconnect on GameController disconnect notification.
- BPS/UPS: Re-allocation target_data variable for target patch size (can now apply bigger patches without extra-bytes on memory)
- CDROM: Added real CD-ROM functionality for Windows and Linux.
- CDROM: Added disc dumping.
- COMMON: Add separate frontend logging
- COMMON: Ability to set FPS update interval (used in the window titlebar/FPS widget)
- COMMON: Add 'Reset Frame Time Counter' functionality, enable it by default for resizing the window, loading/saving shader presets, fastforwarding, etc.
- GLCORE: Don't hardcode shader cross compilation target version but poll it. glcore would always only use the minimum target shader version, i.e. GLSL ES 3.00 for OpenGL ES 3.0+ or GLSL 1.50 for OpenGL 3.2+
- D3D10/11/12/SLANG: Added "FrameDirection" slang semantic. Works fine with braid-rewind shader, not entirely perfect with D3D12 though
- MENU: Fix Record -> Streaming Quality, and Record -> Recording Threads settings
- MENU: Fix history playlist navigation after running content
- NENU: Menu entry performance optimisations
- MENU: Add option to show 'remove playlist entry' only on history/favourites
- MENU: Overhaul content 'Information' menu display
- MENU: Add new 'Playlist Management' submenu. Allows default core associations to be set (via dropdown list), and all existing associations to be reset
- MENU: Add 'Set Core Association' option to Quick Menu
- MENU: Add option to remain in menu after saving/loading states
- MIDI: correct pitch bend in ALSA driver - MIDI standard pitch bend center position is 0x2000 but ALSA's is 0
- MIDI: Fix SysEx handling. We need to clear the event status after each message. Otherwise, after a SysEx message the first byte of the next event will incorrectly inherit its delta_time. This causes a delay of several seconds in nearly every MT-32 games which uses a lot of long SysEx.
- REMOTE RETROPAD: Fix for Remote RetroPad input - fixes processing of Remote RetroPad input. None of the remote inputs are being executed both in menu and in game. This is due to the way current key binds are being detected which block processing of any remote input. It's been tested using Remote RetroPad core on Android including digital dpad and analog control input.
- RUNAHEAD/MSVC2010: Build in runahead support for MSVC2010 and up
- RUNAHEAD/VITA: Build in runahead support for Vita version
- SAVESTATES: Allow auto save states also in cores that support no content as long as some content is loaded
- RUNAHEAD: Fix performance degradation that could happen over time (after approx. 30 mins). Fixed input IDs outside of range 0-35 causing slow performance in runahead
- SWITCH: Add stb_font support
- SWITCH: Add Retro Achievements support
- SWITCH: Add networking support
- SWITCH: Add touchscreen support
- SWITCH: Add OpenGL support
- SWITCH: Merging of RetroNX Nintendo Switch port, based on libnx SDK
- VULKAN: Fix race condition in threaded mailbox emulation
- VULKAN: Maintenance fixes
- WIIU: Fix menu lag when built with DevKitPro r32
- VITA: Use proper button labels, fix inverted R-Stick Y axis
- VITA: Add imc0: mount
- VITA: Use sceCtrlIsMultiControllerSupported to detect
- VULKAN: Fix two validation errors
- VULKAN: Try to avoid creating swapchains redundantly. Should fix black screen and having to alt tab out of window again to get display working on Nvidia GPUs (Windows)
- VULKAN/OSX: Initial MoltenVK support. Not enabled yet, several MoltenVK bugs should be fixed first before we can have it fully working
- WINDOWS/DINPUT: Add rumble support
- WINDOWS/DINPUT: Fix Game Focus Toggle
- WINDOWS/RAWINPUT: Fix Game Focus Toggle
- X11: Fix Game Focus Toggle
- WII: Change deflicker setting to work in 480p or higher, and always enables vfilter so that the user can easily change brightness
- COMMON: Fixed bug 'crashing in cores that don't range check retro_set_controller_type'. Some people were having crashes when device is set to RETRO_DEVICE_NONE and the cores don't check the number of ports, in VBAM's case it was overflowing and crashing. QuickNES was crashing too
- COMMON: Fixed buffer overflow in url encoding (affecting MSVC2010/2013)
- D3D10: Added D3D10 driver to release build. Has working shaders (Slang), overlay, and menu display driver support. Should be on par capabilities wise
- MENU/XMB: Don't load menu pipeline shaders unless XMB is selected (D3D10/D3D11/D3D12/GL/Vulkan)
- MENU/VIDEO: Only show black frame insertion for the video drivers/context drivers
that support it (so far this includes - D3D8/D3D9, OpenGL, Vulkan)
- MENU/VIDEO: Only show max swapchain images if supported by video driver and/or context driver (so far this includes - DRM EGL context driver, VideoCore EGL context driver, Vulkan)
- MENU/MaterialUI: Automatic DPI Scaling should be much improved now, now scales as expected at 1440p and 4K resolutions
- MENU/MaterialUI: Fix wrong calculation of an entry height causing long playlists to end up outside of screen range. This also could cause crashes on low DPI screens
- IOS: Fixed crash when opening downloaded roms from Safari or using the "Open in.." functionality. Added the compiler flag to support keyboard remapping to controls
- IOS: Fixed buffer overlap that caused a crash while trying to download GLSL shaders from the buildbot
- 3DS: Frontend rating is now correctly implemented for both New 3DS/2DS and Old 3DS/2DS
- 3DS: Initial networking support, HTTP requests won't work yet
- 3DS: Now reports memory and battery state
- AUDIO: Added 'Audio Resampler Quality' setting to Audio Settings. Setting this higher will increase sound quality at the expense of sound latency and/or performance. Setting this value lower will improve sound latency/performance at the expense of sound quality. Only has an effect if the Sinc resampler is used, and you have to restart the game for changes to take effect
- CHEEVOS: Fix unofficial achievements not being loaded
- CHEEVOS: Show savestate menu entries when no achievements are found even if hardcore mode is enabled
- CHEEVOS: Support Neo Geo Pocket
- COMMON: Bugfix for issue related to 'Windows mouse pointer visible when running MESS or MAME cores'
- COMMON: Fix bug 'Last item in a Playlist is ignored'
- COMMON: New LED API. Driver implemented for Raspberry Pi, proof of concept implemented for core MAME 2003
- COMMON: Add quick menu option to watch shader files for changes and recompile them automatically (Linux only for now)
- D3D8: Direct3D 8 can now work on systems that have Direct3D 8 installed
- D3D9: Add menu support for MaterialUI/XMB
- D3D10: Initial video driver implementation
- D3D11: Initial video driver implementation
- D3D11: SPIRV-Cross/slang shader support for D3D11
- NETPLAY: Add menu option to select different MITM (relay) server locations
- OSX: Modify HID buttons detection algorithm
- QB: Added --datarootdir, --sysconfdir, --bindir, --docdir and --mandir
- QB: Deprecated --global-config-dir, --with-bin_dir and --with-man_dir
- SHADERS: Allow saving of shader presets based on the parent directory (Saving one for */foo/bar/mario.sfc* would result in *shaders/presets/corename/bar.ext*). We decided it's safer to still isolate the presets to a single core because different cores may treat video output differently
- SHADERS: Don't save the path to the current preset to the main config. This was causing weird behavior, instead it will try to load *currentconfig.ext* and it will save a preset with that name when select *apply shader preset*. The resulting shader will restore properly after restarting and even after core/parent/game specific presets are loaded
- CHEEVOS: Add badges for achievements, shows thumbnail images of achievements
- CHEEVOS: Leaderboard support
- CHEEVOS: Only disable savestates on hardcore mode if achievements are not available
- COMMANDLINE: Fix fullscreen toggle switch
- COMMON: Add 'Automatically Load Content To Playlist' feature, enabled by default
- COMMON: Fix slowmotion ratio always being reset back to 1
- COMMON: Optimized NBIO implementations now for Apple, Windows, and Linux. Uses mmap for Linux/Windows/BSD if/when available. File I/O should now be much faster for loading images inside the menu
- COMMON: Native Blissbox support now for latest firmware as of writing (2.0). Implementation through libusb and/or native Windows HID
- COMMON: New lightgun API
- COMMON: New VFS (Virtual File System) API
- COMMON: Fixed some playlist bugs
- COMMON: New snow shader
- COMMON: Fix Quick Menu title, no longer shows 'Select File'
- COMMON: Fix loading cores that require no content one after another
- COMMON: Map Delete key to Y button for non-unified menu keyboard controls
- COMMON: Fix for relative paths being normalised and generating a duplicate history entry
- EMSCRIPTEN: Fix references to browserfs
- FREEBSD: Support libusb HID input driver
- HAIKU: Buildfix
- INPUT: Map clear button to DEL key
- LINUX/X11: Add RetroArch logo to window title bar
- LINUX/X11: Input driver now supports new lightgun code
- LINUX/X11: Support window transparency (requires a compositing window manager)
- LOBBIES: Fix for crash on join netplay rooms via touch / glui
- SCANNER: Use primary data track of disc images for CRC lookups rather than cue files. This is slower but finds matches more reliably, and is necessary for CHD files to work at all. Update your databases!
- SCANNER: Fall back on looking inside archives when matching MAME/FBA content (most recent cores only). If you had difficulty with content being detected before, you may have better luck now. Update your databases and core info!
- INPUT: Overlay controller response - when we press buttons on the gamepad or keyboard, the corresponding buttons on the overlay will be highlighted as well
- NETBSD: Silence some compilation warnings
- COMMON: Fixed bug 'Deleting an entry from a playlist would not update the list view inside XMB'
- COMMON: Cores can now request to set a 'shared context'. You no longer need to explicitly enable 'Shared Hardware Context' for Citra/OpenLara/Dolphin
- COMMON: Add 'Delete Core' option to Core Information menu
- COMMON: Change the "content dir" behavior so it works on either a flag or an empty directory setting, now platform drivers can provide defaults for save / system / state / screenshot dirs and still allow the content dir functionality, these settings are under settings / saving and flagged as advanced