CD-i discs have a unique quirk: they store data in tracks labeled as
AUDIO in both CUE and CHD formats. The scanner normally skips AUDIO
tracks when looking for data, causing CD-i games to never match the
database.
* Update 800x240 mode for n3DS models
- Backported 800x240 display settings from libctru
- Removed/renamed old 800x240 display functionality
- Readded menu option for non-2DS models
* replace bannertool.exe with a working version
* Update ctr_defines.h
* Fix missed rename
* improved vulkan_create_swapchain() to handle swapchain creation better and avoid crashes
* As requested by PR review, reverted back to original create_swapchain function with only minimal changes made for this bug fix on Android only
* fixed oepsie with copy paste
* fixed oepsie with copy paste
* Fixed random crash on Android when destroying old swapchain before new one is created with minimal changes to original vulkan_create_swapchain() function
* Restored all my initial changes without all the reformatting of the code (#3)
* The VK_DATA_FLAG_CREATED_NEW_SWAPCHAIN should be cleared otherwise every call to this function can be handled as a new swapchain creation while it might not be the case, it fixes crashes on Android
In talking with @BinBashBanana it became clear this wasn't necessary,
and it has started to conflict with some code in emscripten's
libpthread in recent versions.
* Fix an OOB memory access in x11 input if >16 devices
It looks like the mouse device list was meant to be initialized with
-1, but the mouse device list should contain only up to `j` values
where j is the number of actual mice.
* Also make sure j stays under max mouse idx
This is just to be safe in case we have... more than 16 master pointers
* Add a work-in-progress Storage Access Framework backend to libretro-common/vfs
* Fix compilation error in `retro_vfs_file_open_impl()` on Windows
* Don't gate the contents of vfs_implementation_saf.h behind `HAVE_SAF`
* Add a button to the file browser on Android for opening a directory picker
* Fix a bug in `retro_vfs_path_split_saf()`
* Don't include inaccessible directories in the file browser in Google Play Android builds
* Fix missing return statement in `action_ok_open_picker()`
* Improve the documentation for the SAF VFS backend in libretro-common
* Implement opening the path in the file browser when selected using the SAF tree picker
* Change indentation style in VfsImplementationSaf.java to 3 spaces
* Check if `vfs_saf_get_jni_env` is null in vfs_implementation_saf.c before performing VFS operations
* Fix stat function in SAF VFS backend
* Don't gate the definition of `safTreeAdded()` behind `HAVE_SAF`
* Fix memory leak when calling `retro_vfs_closedir_impl()` on a SAF directory
* Fix `NullPointerException` in `SafStat` constructor
* Create global references for all Java classes used by the SAF VFS backend
* Improve the readdir implementation for the SAF VFS backend
* Fix a bug in `retro_vfs_path_join_saf()`
* Show the list of SAF trees that the app can access in the file browser on Android
* Improve error handling in VfsImplementationSaf.java
* Check if the directory already exists in the mkdir implementation in VfsImplementationSaf.java
* Enforce a minimum Android API level of 21 in VfsImplementationSaf.java
* Remove the comma at the end of `enum vfs_scheme` in libretro-common/include/vfs/vfs.h
* Fix nonstandard C89 in libretro-common/vfs/vfs_implementation.c
* Fix mkdir implementation in VfsImplementationSaf.java
* Fix open implementation in VfsImplementationSaf.java not creating files that don't exist
Xcode 26 keeps reordering things, I don't know why, I'm tired of
fighting it.
The Metal capture doesn't work with tvOS 13 so default disable that,
it's easy to turn back on if needed. Only affects debugging.
* Announce netplay player information to the lobby server
This information is optional and merely informational. The lobby
might ignore it (and it ignores it at the current version).
* Display lobby information on player/spectator counts
The issue is that a replay frame read on core frame K stores the
inputs for frame K along with the core state as of *the end of frame
K*, in other words the beginning of frame K+1. To fix it, and to make
sure existing replays play back properly, the `core_unserialize` call
in bsvmovie.c has been deferred to the following invocation of
`bsv_movie_read_next_events`, so that frame K+1 is deserialized just
before reading the inputs for frame K+1.
Some refactoring has also been done to simplify the number and timing
of calls to bsv_movie functions from runloop.c.
Holding on to the task pointer is risky, because when the task queue
is popped a message is pushed but the task may be freed. I made a
very small-scale fix to just the new use-after-free that started
happening with the alternative look.
Lets the core query the frontend for the desired target output samplerate.
Will return false if the output samplerate cannot be queried, will return
true if it's implemented. data returned will be of unsigned type
* Add save checkpoint, prev/next checkpoint commands and hotkeys
* Fix copy paste error in meta binds
* Implement save_replay_checkpoint command
* Implement prev/next checkpoint commands
* Update per @jamiras review
* add command to seek to a specific frame number
* Add message queue toasts for seek forward/back
* Fix basis for seek, produce full message on reply
* fix bugs seeking back during record
* Tidy up
* Allow back and forwards seeking of recording replays while paused
* Update changelog
* Simplified onNewIntent content detection logic and added activity state tracking
* Added activity state detection to prevent parameter conflicts when resuming from home screen
Enables launchers to use the FLAG_ACTIVITY_CLEAR_TOP launch flag to open games. It checks if the launched game is already running or if it's a new game to launch over the existing one. This provides an alternative to launchers using FLAG_ACTIVITY_CLEAR_TASK which results in a crash on many Android 13 devices if RetroArch is already running in the background.
* Implement fallback OpenGL symbol loader for Linux devices with EGL < 1.5
The `eglGetProcAddress` in old versions of EGL can only get extension
functions, so we need to supplement it with another symbol loader that
can get non-extension functions.
* Close `g_egl_gl_dll` if `egl_init_context()` fails
* Close `g_egl_gl_dll` when VideoCore driver is destroyed
* Defer loading of `g_egl_gl_dll` until needed
* Fix typo in `egl_destroy_gl_dll`
* Remove redundant `ptr` variable in `egl_init_context`
* Remove redundant call to `egl_destroy_gl_dll` in `egl_init_context`
* Remove another redundant call to `egl_destroy_gl_dll` in `egl_init_context`
device will set the samplerate set by the OS as well
NOTE: There is still something wrong with the XAudio2 driver
and the 'devices' it enumerates and shows in the menu. It seems
the index is wrong, i.e. the entries seem swapped around. This
was an issue even before this commit. WASAPI seems to work correctly
* Add mmdevice_samplerate
* _WIN32_WINNT checks will fail on modern MSYS2/MIngw-w64 setups (Win10/11) -
_WINN32_WINNT will be 0x0601 (1537) - i.e. Win7 and up. We can assume MMDevice
is available since Vista, so lower these checks to Vista and up
override the 'sampling rate' variable, and set the new sampling rate in
case it gest overwritten by a new value. Next step will be to query the
OS device's default sampling rate and use that
* Put back log messages but this time implement them properly, we first
show the requested spec, then show the received spec afterwards
* Implement floating point sample support, should be more optimal
* Change "Start in fullscreen" item name
https://github.com/libretro/RetroArch/issues/9515
I agree that current wording does not cover the functionality, this may be better.
* Refine fullscreen menu items.
Apply an aggressive set of ultimately deterministic optimizations to
raster image files where an actual file size reduction of not less than
50% was possible without the removal of intrinsic properties such as
alpha channels. Rendered image dimensions were always left unchanged.
The primary mechanisms employed during optimization are:
- PNG color mode conversion from TrueColor to indexed palette
+ Accomplished using NeuQuant neural-net color quantization algorithm
- Stripping of data blocks containing irrelevant information, such as:
+ XMP metadata fields
+ Embedded comment fields
+ ICC color profiles (simple graphics with basic color schemes only)
+ EXIF profiles
- Re-compression using "best" or "smallest" profile presets
All modifications are performed on lossless image formats and closely
visually inspected after processing to ensure no loss of apparent
details or introduction of new, unwanted artifacts.
Toolset used:
- RIOT (Radical Image Optimization Tool), v2024.1.0 64-bit
- AdvanceCOMP (part of the Advance Projects), v2.6 64-bit
- optiPNG, v7.9.1 64-bit
- PNGOUT, v2015.02.13 32-bit
Signed-off-by: Peter J. Mello <[email protected]>
- A touch pointer controlling the mouse/lightgun/pointer will ignore hitboxes if it slides into any.
- A touch pointer pressing a button will not control the mouse/lightgun/pointer if it slides out of the hitbox.
* Merge microphone drivers
* Some buildfixes
* * Merge audio/common/wasapi.c into audio/drivers/wassapi.c
* Buildfix for alsa/drivers/alsathread.c
* Merge more files
* Attempted buildfix
* Try to use enum values instead of eRender/eCapture
* Simplification of mmdevice_name
This commit extends the RetroArch desktop entry
file—responsible for integrating the app with
Linux desktop environments—to include all relevant
properties. Some notable aspects:
- **`TryExec`**/**`Exec`**: TryExec _should_
contain the canonical path to the executable,
however the RA buildsystem lacks a ready
mechanism for populating the correct value for
the target at build time, so we fallback to
searching $PATH here. To Exec we add the %F
token, meaning that RA is a "file handler" that
users are able to drag files onto the launcher
icon that become arguments to the launch command.
- **`MimeType`**: This key determines which file
extensions the system should offer to open with RA.
It should be regularly reviewed for any new MIME
registrations which need to be represented going
forward.
- **`PrefersNonDefaultGPU`**: Linux by default offers
hardware to processes in order from least capable to
most performant. This key reverses that behavior so
more demanding emulation cores will run more
smoothly.
- **`SingleMainWindow`**: Changes the default behavior
when the launcher is clicked while an instance is
already running from launch a second instance to
elevate the main window of the already running one.
Version 1.5 of the Freedesktop [Desktop Entry
Specification](https://specifications.freedesktop.org/desktop-entry-spec/latest/) was the reference for these changes.
Signed-off-by: Peter J. Mello <[email protected]>
When loading and saving states taken during a replay, their contents
should be compared with the current replay.
- If in playback mode, states from past the end of the current replay
should be disallowed, as should states from an alternate timeline of
the current replay (inconsistent input history)
- This is because in playback mode, RA replays are read-only
- If in recording mode, states from the future or from another
timeline should overwrite the current replay's data with a warning
- In either playback or recording, loads of states from the past that
have a consistent series of inputs (same timeline) should be loaded
and the replay should be rewound (and truncated in case of recording)
This behavior is as specified in
https://tasvideos.org/LawsOfTAS/OnSavestates
The existing code only implemented some of these checks.
On systems where pipewire is installed but the build is configured with
--disable-pipewire, HAVE_PIPEWIRE_STABLE is set to 1 while HAVE_PIPEWIRE
is 0. Checking only HAVE_PIPEWIRE_STABLE leads to a build failure.
```
LD retroarch
/usr/lib/gcc/x86_64-pc-linux-gnu/15/../../../../x86_64-pc-linux-gnu/bin/ld: obj-unix/release/camera/camera_driver.o:(.data.rel+0x0): undefined reference to `camera_pipewire'
collect2: error: ld returned 1 exit status
```
Downstream Bug: https://bugs.gentoo.org/960043
This can optionally encode and compress checkpoints. For now, only
raw encoding is supported, but e.g. delta encoding, block-based
encoding, or deduplicated encoding could be supported in the future.
Three compression schemes are included (selected automatically based
on compilation flags): ZSTD, ZLIB, or NONE.
All three schemes are supported for decompression if available.
For compression, ZSTD is preferred over ZLIB is preferred over NONE.
- rewinding past the start clobbers part of the header
- during recording & rewind, should not push input events
- during recording or playback, getting to the end of the rewind
buffer should not halt the movie
Performance improvements:
* Various optimizations
* Reduced memory allocations - file_list_insert would call malloc
for every single item that would need to be shifted downwards. instead
it does a memmove call now
Some enhancement possibilities found while investigating another
issue - shift keys were swapped (especially noticeable in menu),
enter may be mapped to DPAD_CENTER by the system, but unfortunately
the 102. key can not be mapped separately.
This can avoid unnecessary waste of performance at runtime to use static data instead of filling out an array on the stack every time. Some of the CBS functions are called for every menu item created so this improves performance of menu navigation, especially large menus like playlists.
This brings it in line with 2.6.0. Previously it had been taken from a
development branch somewhere between 2.5.1 and 2.6.0.
Only return VERIFY_FAILED from a single point
Everything else is a fatal error. Also improve documentation about that for
the vrfy callback.
Improve comments
Update doc of return value of verify()
Fix potential integer overflow parsing DER CRL
This patch prevents a potential signed integer overflow during the
CRL version verification checks.
Fix potential integer overflow parsing DER CRT
This patch prevents a potential signed integer overflow during the
certificate version verification checks.
Prevent signed integer overflow in CSR parsing
Modify the function mbedtls_x509_csr_parse_der() so that it checks the
parsed CSR version integer before it increments the value. This prevents
a potential signed integer overflow, as these have undefined behaviour
in the C standard.
Rename time and index parameter to avoid name conflict.
As noted in #557, several functions use 'index' resp. 'time'
as parameter names in their declaration and/or definition, causing name
conflicts with the functions in the C standard library of the same
name some compilers warn about.
This commit renames the arguments accordingly.
Update version number to 2.6.0
add mic usage to info.plist
enable micorphone in xcconfig
mic device selection macos
snapshot
revert ios driver
macos only driver, doesn’t deadlock now
macos driver seems to be doing something
looooooop
well, at least it doesn’t spin lock, no audio
audio capture working!
seems to be working now
cleanup some extra logging
clean up some extra logging
rename ios driver for clarity
remove some locks
better performance, but some noise
remove unused fifo_lock
clear the fifo
fix noise in buffer
some improvements, might not need
remove superfulous silent check
reduce latency
Signed-off-by: Joseph Mattiello <[email protected]>
Linux terminal settings were lost after restarting via menu.
This was caused by udev_input_init calling linux_terminal_disable_input multiple times.
New code follows the restore pattern of linuxraw_input.c
- Use the password stored in the connection profile instead of asking
each time to the user
- `Disconnect` menu item wasn't shown even when connected
When entering the Wi-Fi menu first, `nmcli_connection_info` is called with
`NULL`. If we return `false` here, the menu doesn't show the `Disconnect`
menu item even when the wifi is on and connected.
- Don't consider wired connections when checking if the device is connected
`cmd_file = popen("nmcli -f NAME c show --active | tail -n+2", "r");`
That command returns all active connections, even the wired ones. That
means that if the wifi is not connected but we have a wired connection,
retroarch shows the Disconnect menu item to disconnect ... a
non-existent wifi connection.
There is a type mismatch between selection (size_t) and how it's passed
to some functions. In 4f3ae82 I got it backwards and changed the type in
savestate thumbnail function definitions to size_t, but in that case we
can assume that there won't be more than 999. So in this case it's OK to
keep the unsigned int and cast selection to that type.
Thumbnails on playlists are the other case and the limit is not so clear
to me, so I assume it's reasonable to promote the type of the function
parameter i from unsigned to size_t.
-ffast-math was added in ff14092d8d with a comment that it "helps SINC
resampler to auto-vectorize". The flag is an alias for "-fno-math-errno
-funsafe-math-optimizations -ffp-contract=fast -fno-honor-infinities
-fno-honor-nans". The last two of those cause compiler complaints
because while the flag was meant for this file, it's shared across the
codebase that includes statements that operate on infinities and NaNs.
GCC 13.3 with -fopt-info-vec reports 18 vectorizations for `-O3
-ffast-math`, 17 for `-O3 -fno-math-errno -funsafe-math-optimizations
-ffp-contract=fast` and also 17 for plain `-O3`. So using the subset of
-ffast-math without the offending flags buys nothing and loses 1
vectorization.
Both GCC and Clang provide the "fast-math" pragma directive, which I add
to this one file that benefits from it, under the condition that it's
supported. -ffast-math is removed from most of the makefiles.
These makefiles provide the info target that will print contents of each
variable that is not printed (unless V=1, which is not the case here) on
command invocation. Making this information available in the logs should
help debugging, but it doesn't need to be printed on each command
invocation.
The point of making the default "semi-silent" (each target is printed,
but not the entire invocation verbatim) was to factor out information
about invocation to a one-time target (info) and not repeating it ever
again. With V=1, the info target is silent, because each command
invocation will be printed verbatim, which needs no herald.
The undesired side effect of me introducing the info target and making
it a dependency of the default all target is that info doesn't respect
the --silent make option, so in this use case it was more noisy, not
less.
I believe the most elegant solution that satisfies all use cases is to
stop printing info unconditionally, and instead list it explicitly in
make invocations in CI, together with the all target. Then this info is
kept available for inspection from logs, but it's not repeated on each
invocation. The intention was to make the logs easier to read and scroll
in search for new compiler warnings.
The Windows builds have been missing some libraries, notably
avdevice-58.dll, avfilter-7.dll, and prostproc-55.dll as reported by a
user on Discord. I suspect it's caused by cc842fd, although I don't
fully understand why that would happen.
In core downloader, description can be brought up by pressing
Select. However, for those cores where the description is longer
than what would be possible to display, nothing was displayed.
Several such cores exist, one example is Dosbox-Core.
Since this array is used for the messagebox, it is needless to make
it larger than what would be displayed anyway, and it makes other
safeguards act reasonably, so now there is info, just truncated.
Add multi-mouse support for X11, by using XInput2 extensions. Only
master pointers are considered as mice.
New behavior put behind HAVE_XI2 and configure script extended with
necessary detection.
Added resolution picker/forcing.
Rewrote logic for finding ALSA audio devices in enumerate_audio_devices function
Added a skip for some of the interface queries that fail and aren't required for magewell usb.
Check network fd/socket validity using INVALID_SOCKET on Windows
(requiring conditional winsock2.h include) and < 0 otherwise.
Fixes -Wsign-compare warning.
Change the flags parameter to int32_t for explicit sizing. Add a check
and cast for MSVC __cpuid compatibility when int is 32-bit.
This silences a -Wincompatible-pointer-types warning where int32_t is
long int.
waitUntilDeviceIsReady() should take a const char pointer as a
parameter, because it doesn't use it for writing. Since the function
prototype asks for a char pointer, cast it here.
They are absent even in upstream, so I decided against copying to the
local copy of libogc. And a couple of function prototypes doesn't seem
to warrant a new header file.
Move SWITCH_CPU_* array definitions from header to platform_switch.c.
Use extern declarations in the header. Add NULL/0 terminators to the
arrays and update size calculation and loops to use the terminators
where the number of elements can't be calculated.
The motivation for this change is to remove code duplication and silence
warnings about unused arrays in translation units that only used a
subset of them.
This is to silence a stringop warning that I believe to be a false
positive. Nevertheless, this change reduces verbosity of the code
and introduces a couple of checks that weren't there previously.
Note that the base parameter of this strtoul call is changed from 0
to 10, because previously the while loop rejected characters other
than 0-9 so strtoul didn't have to. Now that the loop is gone, the
call has to reject characters that are not decimal digits to keep
the logic as it was.
Add "Reset core options" menu to two more places:
- Manage Cores, where it can delete the options for the selected core
- Configuration, where it can delete the options for the loaded core
Current reset function is updated to delete the core options file if
reset is wanted for a specific core, or core was loaded but not yet
started. Meant as a recovery method for possibly fatal core option
changes.
While here:
* remove input_overlay and task_overlay from linking blacklist
* move -Werror to CC invocation since C++ refuses to use it
* copy the quiet build mode from the main Makefile and make it the
default
* temporarily define DEPRECATED for gpu_old.h to allow succesful build
* replace the call to command_event() with one to retroarch_main_quit()
in a failure case
While here:
* remove input_overlay and task_overlay from linking blacklist
* move -Werror to CC invocation since C++ refuses to use it
* copy the quiet build mode from the main Makefile and make it the
default
* temporarily define DEPRECATED for gpu_old.h to allow succesful build
* replace the call to command_event() with one to retroarch_main_quit()
in a failure case
* add missing uncompr.o in Makefile.common for HAVE_BUILTINZLIB
- Ensure other touchscreen input is blocked when overlay buttons pressed
- Limit physical+overlay mouse input to iOS for now
- Reset overlay mouse deltas when there is no touch input
- Disable touch mouse in android_input.c for now. Too buggy
The keyboard support for linuxraw driver was a bit spotty. Extended
with missing keyboard query, callback, and a few fixes against
over-indexing the status array.
Before this change, there was at least one scenario in which the UI
would seemingly freeze and a restart was needed. That's when an update
of cores was attempted with threaded rendering enabled.
Fixes https://github.com/libretro/RetroArch/issues/17727
Before this change, an 8-bit value was guaranteed to be lesser than the
size of this array (256). Instead of removing the check, I make it
meaningful by reducing the size of the array.
Only limit extensions under the condition that the valid_extensions list
is not empty and the user wishes to limit the extensions. Otherwise
present files of all recognized extensions.
Part of this logic was implemented in 8f32801292 where the
point was to show supported files when core info file is missing. The
other part is the filter_by_current_core option.
Cheevos define a special macro defined to -1 and uses it as one of the
values for enum event_command. Make this value a part of the enum
definition so that this type is not optimized to be unsigned.
Also simplify this part; the point here is to start the copy later, but
otherwise the buffer size is the same, and it's still a string, so needs
no special handling.
At optimization level -O3, GCC generates a warning about its own
optimizations, likely due to loop unrolling. Manually unroll the loop to
eliminate any ambiguity and prevent the warning.
One of the GCC14's optimization heuristic triggered here, suggesting
that the special value of len (size_t) could potentially be lesser than
the file's size (int64_t) but greater than "maximum object size" (set by
byte-size, PTRDIFF_MAX by default).
Use the same type as the file size it's compared to, and adjust the
sentinel value to spell INT64_MAX.
* unsigned vs signed comparison
* copy DEBUG_VAR from wiiu - this one prints pointer values in a
portable way
* prove GCC14 that a date formatted as "00/00/0000" can fit into 11
bytes
* explicitly mention previously unhandled enum constants
* Adding GFX widgets in b9849f78f7 and 1235a7435e orphaned
ctr_set_osd_msg(). Reinstate it instead of removing, since it's
effectively the same as calling font_driver_render_msg, but with
checks.
* remove sp from clobber list in inline assembly
Due to touchscreen quick tap function, binding runs into problems
with the default setting that works well on other platforms. Using
a nonzero value avoids that problem.
PATH_MAX_LENGTH is pretty short on CTR and not really adequate here
since this buffer is not storing a path.
Allocate and possibly reallocate from heap instead of using the
stack here.
symlinking manifest entries and using a baseurl gives us a way to
create just a single fetchfs backend (and a single thread) since
emscripten upstream is not willing to integrate manifest support to
fetchfs directly.
Retroarch embedders could use this to get assets or other resources
lazily or chunk-by-chunk for large files.
Value of HAVE_GDI is always 1 unless explicitly disabled, however
it only takes effect on Windows platforms. Actual functionality
is behind multiple #ifdef's, but the feature indication was showing
up even on platforms like Linux.
* Actually read CLI args in emscripten
* Fix fetchfs manifest parsing, increase download chunk size
The chunk size should probably be made a parameter in the future. The
larger chunk size trades longer hitches for fewer hitches.
* Add exec command driver and API functions for emscripten.
Under WASMFS, stdin/stdout can't be customized the way they can with
the JS FS implementation. Also, this approach frees up stdin/stdout
and simplifies interaction with the command interface for web embedders.
* fixup upload paths, show use of new emscripten cmd interface
* Add JS library function names to EXPORTS as well as EXPORTED_FUNCTIONS for older emsdk versions
* workerized RA
* Workerized (non-async) web player, using OPFS
This patch eliminates the need for asyncify and uses modern filesystem
APIs instead of the deprecated, unmaintained BrowserFS.
This is a WIP patch because it won't fully work until these two
Emscripten PRs land and are released:
https://github.com/emscripten-core/emscripten/pull/23518https://github.com/emscripten-core/emscripten/pull/23021
The former fixes an offscreen canvas context recreation bug, and the
latter adds an equivalent to BrowserFS's XHR filesystem (but without
the hazardous running-XHR-on-the-main-thread problem).
The biggest issue is that local storage of users who were using the
old version of the webplayer will be gone when they switch to the new
webplayer. I don't have a good story for converting the old BrowserFS
IDBFS contents into the new OPFS filesystem (the move is worth doing
because OPFS supports seeking and reading only bits of a file, and
because BrowserFS is dead).
I've kept around the old libretro webplayer under
pkg/emscripten/libretro-classic, and with these make flags you can
build a non-workerized RA that uses asyncify to sleep as before:
make -f Makefile.emscripten libretro=$CORE HAVE_WORKER=0 HAVE_WASMFS=0 PTHREAD=0 HAVE_AL=1
I also moved the default directory for core content on emscripten to
not be a subdirectory of the local filesystem mount, because it's
confusing to have a subdirectory that's lazily fetched and not
mirrored to the local storage. I think it won't impact existing users
of the classic web player because they already have a retroarch.cfg in
place.
* Get fetchfs working without manifest support
* makefile fixes
* fix scaling, remove zip dependency
* Support asset/cheats/etc downloaders for emscripten
- Add http transfer support for emscripten
- At the task_http level, not the net_http level --- so no netplay
or webdav.
- Change default paths to be more like other platforms
- Gives us smaller bundles and a faster boot time
- Had to work around a task queue bug on Emscripten
- I made the smallest possible change to do it, but it may be better
to fix in rthread.c
* Load an emscripten file_packager package on first run
If no ozone assets are present, load a libretro_minimal package
created using Emscripten's built-in file packager.
* updated readme, removed indexer from wasmfs libretro-web
* Put back zip dependency, load asset bundle into opfs on first run
* fix upload path
* Remove unused function
* easy testing setup for two multithreaded conditions
1. make PROXY_TO_PTHREAD=1 (slower)
2. make PROXY_TO_PTHREAD=0 (bad audio, because doesn't sleep in
openal.c)
* Remove condition on sleep in openal
also make input_driver check existence of drv->axis, drv->button
before calling them.
* Fix resizing under EGL
* Don't force config file path on emscripten
* Add time.h include to netplay, default HAVE_NETPLAYDISCOVERY to 0
* Remove nearly all proxied joypad calls under emscripten
* Fix file uploads under firefox
* Fix safari API uses, but Safari still hangs in OPFS filesystem mount
I think this can be fixed by moving the backend creation off the main
thread.
* Move filesystem init into emscripten C entry point
* Setup filesystems off of main thread
* re-set default player to async
Also improve Safari compatibility under proxy-to-pthread condition
* Safari upload file fixes
* Remove some excess prints
* Fix typo
the previous method does not remove the pairing of the selected device,
user must remove the pairing manually by modifying filesystem.
change tested on real system (Lakka-RPi4.aarch64).
Use yellow for warnings and red for errors, keep the current blue for everything else.
Additionally, flip the 'i' info icon upside down for warnings and errors so it becomes a '!' exclamation mark icon.
* for iOS: update launch screen to match UI
* use higher resolution invader
* adjust Y constraint (diff invader body proportion)
* for iOS: update Launch Screen to match app icon/ui
* update iOS icon—match shadow on other platforms
* icon source svgs to media folder for others’ reuse
* iOS App Icon revision, fix asset index mismatch
* workerized RA
* Workerized (non-async) web player, using OPFS
This patch eliminates the need for asyncify and uses modern filesystem
APIs instead of the deprecated, unmaintained BrowserFS.
This is a WIP patch because it won't fully work until these two
Emscripten PRs land and are released:
https://github.com/emscripten-core/emscripten/pull/23518https://github.com/emscripten-core/emscripten/pull/23021
The former fixes an offscreen canvas context recreation bug, and the
latter adds an equivalent to BrowserFS's XHR filesystem (but without
the hazardous running-XHR-on-the-main-thread problem).
The biggest issue is that local storage of users who were using the
old version of the webplayer will be gone when they switch to the new
webplayer. I don't have a good story for converting the old BrowserFS
IDBFS contents into the new OPFS filesystem (the move is worth doing
because OPFS supports seeking and reading only bits of a file, and
because BrowserFS is dead).
I've kept around the old libretro webplayer under
pkg/emscripten/libretro-classic, and with these make flags you can
build a non-workerized RA that uses asyncify to sleep as before:
make -f Makefile.emscripten libretro=$CORE HAVE_WORKER=0 HAVE_WASMFS=0 PTHREAD=0 HAVE_AL=1
I also moved the default directory for core content on emscripten to
not be a subdirectory of the local filesystem mount, because it's
confusing to have a subdirectory that's lazily fetched and not
mirrored to the local storage. I think it won't impact existing users
of the classic web player because they already have a retroarch.cfg in
place.
* Get fetchfs working without manifest support
* makefile fixes
* net_http: refactor net_http_new
The goal is to move calls to getaddrinfo() and connect() into
net_http_update(). This will make it possible for them to be replaced
with non-blocking alternatives later.
The net_http calling pattern right now allows callers to create the
http_connection_t, call net_http_new() which creates the http_t from
the http_connection_t, free the http_connection_t, and then start
calling net_http_update(). In order to preserve that, the http_t needs
to copy the values out of the http_connection_t on create. This also
preserves the http_connection_t values instead of freeing them, so the
connection would be able to be used later.
* net_http: implement dns cache
* net_http: separate out address resolution, connect, and request send
* net_http: perform getaddrinfo on separate thread
* net_http: implement basic connection pool
* net_http: refactor receive calls to read faster, do fewer reallocs
* net_http: build fix for platforms without SSL
* net_http: build fix for non-griffin builds
* net_http: build fix for non-threaded platforms
* Add dummy game ai subsystem
* First working prototype of a machine learning model that can override player input
* Update README.md
* Update README.md
* Fix loading path on Windows
* Change ai override to player 2
* Added quick menu show game ai option
* Implemented Quick Menu entry for Game AI options
* Redirect debug logs to retroarch log system + properly support player override
* Added support to use framebuffer as input to the AI
* Added pixel format parameter to API
* Fix game name
* code clean-up of game_ai.cpp
* Update README.md - Windows Build
* Update README.md
* Update README.md
* Update README.md
* Update config.params.sh
turn off GAME_AI feature by default
* Fix compile error in menu_displaylist.c
* Add missing #define in menu_cbs_title.c
* Added new game_ai entry in griffin_cpp
* Remove GAME_AI entry in msg_hash_us.c
* Fix compile error in menu_displaylist.h
* Removed GAME AI references from README.md
* Fixes coding style + add GameAI lib API header
* Convert comment to legacy + remove unused code
* Additional coding style fixes to game_ai.cpp
* Fix identation issues in game_ai.cpp
* Removed some debug code in game_ai.cpp
* Add game_ai_lib in deps
* Replace assert with retro_assert
* Update Makefile.common
* Converting game_ai from cpp to c. First step.
* Convert game_ai from CPP to C. STEP 2: add C function calls
* Convert game_ai from CPP to C. Final Step
* Added shutdown function for game ai lib
* Update game_ai_lib README
* Fix crash when loading/unloading multiple games
* frontend/drivers/platform_unix.c
(libretro_cheats_directory): New variable.
(frontend_unix_get_env): Set DEFAULT_DIR_CHEATS to the value of
the LIBRETRO_CHEATS_DIRECTORY environment variable, if available.
* frontend/drivers/platform_win32.c: Likewise.
* configuration.c (config_load_file)
<libretro_cheats_directory>: New variable. Use the values of
the LIBRETRO_CHEATS_DIRECTORY environment variables instead of their
corresponding configured values, when set.
* docs/retroarch.6: Document it.
* retroarch.c (retroarch_print_help): Extend help text.
* Partially revert a change made in 69ceb95ddc.
The change caused the 'libretro_directory' config option to always
revert to the default value, which was not intended behavior.
Reported-by: Michael Cook
* platform: Honor the LIBRETRO_DATABASE_DIRECTORY environment variable.
This is a follow-up to commit 69ceb95ddc.
* frontend/drivers/platform_unix.c
(libretro_database_directory): New variable.
(frontend_unix_get_env): Set DEFAULT_DIR_DATABASE to the value of
the LIBRETRO_DATABASE_DIRECTORY environment variable, if available.
* frontend/drivers/platform_win32.c: Likewise.
* configuration.c (config_load_file)
<libretro_database_directory>: New variable. Use the values of
the LIBRETRO_DATABASE_DIRECTORY environment variables instead of their
corresponding configured values, when set.
* docs/retroarch.6: Document.
* retroarch.c (retroarch_print_help): List supported environment
variables, and cross-reference the man page.
## Description
Before there was no clear way of running msys2, and even if there was, there is no guarantee of it working, well I fixed it, and added a CI, so that we can always know if it works. Furthermore I added 2 targets more: UCRT64 and CLANG64, yes, compilation with clang64 means we can also compile with clang for windows on arm :D, plus clang has better error messages overall, anyway.
## Related Issues
#17367
## Reviewers
Anyone, it's my first PR here.
* platform_win32: Fix sizeof for DEFAULT_DIR_PLAYLIST.
* frontend/drivers/platform_win32.c (frontend_win32_env_get): Check
the size of correct destination array.
* frontend: Honor the LIBRETRO_ASSETS_DIRECTORY environment variable.
This builds on 763fcd8267 ("unix, win32: Allow set the default
libretro_directory via environment variable") to also allow specifying
the assets directory via an environment variable.
* frontend/drivers/platform_unix.c (frontend_unix_get_env)
<libretro_assets_directory> New variable. Use it to set
DEFAULT_DIR_ASSETS, when available.
* frontend/drivers/platform_win32.c (frontend_win32_env_get): Likewise.
* platform: Honor the LIBRETRO_DIRECTORY environment variable.
Until now, and unlike the defaut core directory, the default
core *info* directory would be hard-coded relative to the installation
directory. Honor the LIBRETRO_DIRECTORY environment variable the same
instead.
* frontend/drivers/platform_unix.c (frontend_unix_get_env): Set
DEFAULT_DIR_CORE_INFO default to the value of the LIBRETRO_DIRECTORY
environment variable, if available.
* frontend/drivers/platform_win32.c (frontend_win32_env_get): Likewise.
* platform: Honor the LIBRETRO_AUTOCONFIG_DIRECTORY environment variable.
* frontend/drivers/platform_unix.c
(libretro_autoconfig_directory): New variable.
(frontend_unix_get_env): Set DEFAULT_DIR_AUTOCONFIG to the value of
the LIBRETRO_AUTOCONFIG_DIRECTORY environment variable, if available.
* frontend/drivers/platform_win32.c: Likewise.
* platform: Honor the LIBRETRO_VIDEO_FILTER_DIRECTORY environment variable.
* frontend/drivers/platform_unix.c
(libretro_video_filter_directory): New variable.
(frontend_unix_get_env): Set DEFAULT_DIR_VIDEO_FILTER to the value of
the LIBRETRO_VIDEO_FILTER_DIRECTORY environment variable, if available.
* frontend/drivers/platform_win32.c: Likewise.
* platform: Honor the LIBRETRO_VIDEO_SHADER_DIRECTORY environment variable.
* frontend/drivers/platform_unix.c
(libretro_video_shader_directory): New variable.
(frontend_unix_get_env): Set DEFAULT_DIR_SHADER to the value of
the LIBRETRO_VIDEO_SHADER_DIRECTORY environment variable, if available.
* frontend/drivers/platform_win32.c: Likewise.
* platform: Honor the LIBRETRO_SYSTEM_DIRECTORY environment variable.
* frontend/drivers/platform_unix.c
(libretro_system_directory): New variable.
(frontend_unix_get_env): Set DEFAULT_DIR_SYSTEM to the value of
the LIBRETRO_SYSTEM_DIRECTORY environment variable, if available.
* frontend/drivers/platform_win32.c: Likewise.
* configuration: Have environment variables override configuration.
Because the configuration file is systematically written when
RetroArch terminates, persisting any previous default/configured
value, setting the LIBRETRO_DIRECTORY, LIBRETRO_ASSETS_DIRECTORY, etc.
environment variables would not have an effect unless the
retroarch.cfg configuration file was cleared.
This seems to go against the common expectation that environment
variables are set by users to *override* the default behavior or
configuration of an application.
* configuration.c (config_load_file) <libretro_directory>
<libretro_assets_directory, libretro_autoconfig_directory>
<libretro_system_directory, libretro_video_filter_directory>
<libretro_video_shader_directory>: New variables. Use the values of
the LIBRETRO_DIRECTORY, LIBRETRO_ASSETS_DIRECTORY,
LIBRETRO_AUTOCONFIG_DIRECTORY, LIBRETRO_SYSTEM_DIRECTORY,
LIBRETRO_VIDEO_FILTER_DIRECTORY and LIBRETRO_VIDEO_SHADER_DIRECTORY
environment variables instead of their corresponding configured
values, when set.
* docs/retroarch.6: Document the environment variables honored and
their behavior.
* add achievement data to netplay save state
* honor achievement state from netplay server
* keep processing achievements if menu doesn't pause game
* remove unused variable
* only CRC coremem
* force send savestate on join and hardcore change
* allow hardcore enablement to be synced to clients
* still calculate cheevos_size for non-server
* use appropriate buffer
* optimizations for when achievements are disabled
* support interfacing with older protocols
* formatting
* c89
* Use given latency
* Fix (non)blocking microphone
* Mute microphone on startuo
* Reset buffer when the microphone stops
* Delete client-info handler
* Refactor the naming conventions, styling
* playlist_get_old_format_metadata_value - now returns size_t
* fix bug where string copy was being made with strdup before
anything got written to the string
* disable default overlays except on Android and iOS
* add flicker warnings to BFI/Subframes/rolling scan
and remove the prohibitions against other settings, since those conflicts are handled automagically anyway
* formatting nit
- Fix the "Allow Off-Screen" setting not working since #17308
- Prevent offscreen shot from disabling the lightgun with some cores
- Fullscreen pointer coordinates no longer needed
Cocoa driver specific changes:
- make sure pointer position is always within [-0x7fff,0x7fff] by using the confined wrapper
- enable pointer offscreen query
Adapt the sanitized pointer handling, discussed at #17196 :
Overlay "driver" specific changes:
- make sure pointer position is always within [-0x7fff,0x7fff] by using the confined wrapper
- enable pointer offscreen query
- report -0x8000 for lightgun if pointer is at the edge
- align lightgun offscreen reporting and button ID conversion with other drivers
Android driver specific changes:
- make sure pointer position is always within [-0x7fff,0x7fff] by using the confined wrapper
- remove extra "inside" checks, general simplification
- enable pointer offscreen reporting
- report same value for all ports when querying mouse and lightgun
- fill missing lightgun support, with fixed button map
Udev and X11 driver specific changes:
- simulate max. 3 touches instead of 1 using different mouse buttons
Wayland driver specific changes:
- integrate touch input better to the overall handling (enabling overlay usage with mouse)
- simulate max. 3 touches instead of 1 using different mouse buttons
* Less string copies
* Some general cleanups
* Add extra param to runloop_message_queue_push so we can pass size_t
of the message
* Consistent conventions for local variable usage for certain things
closes https://github.com/libretro/RetroArch/issues/15540
we can still tick through to higher values quite fast, but there's not much reason for someone to exceed, say, 3x without just setting it to 0 anyway, so I don't think there's any real usability loss.
Adapt the sanitized pointer handling, discussed at libretro#17196 :
winraw and dinput driver specific changes:
make sure pointer position is always within [-0x7fff,0x7fff] by using the confined wrapper
remove extra "inside" checks, general simplification
enable pointer offscreen reporting
use common functions for edge detection and lightgun button ID conversion
sdl driver specific changes:
pointer handling aligned with the other input drivers, as above
added TODO for lightgun part - no suitable test env at the moment where SDL input can be used
Adapt the sanitized pointer handling, discussed at #17196 :
X11 driver specific changes:
make sure pointer position is always within [-0x7fff,0x7fff] by using the confined wrapper
remove extra "inside" checks, general simplification
enable pointer offscreen reporting
Udev driver specific changes:
remove custom calculation and use common viewport translation
unify pointer query instead of separate _x and _y
enable pointer offscreen reporting
Other changes:
more tuning of pointer conversion in video_driver.c for edges
lightgun button ID conversion moved to input_driver.c
Adapt the sanitized pointer handling, discussed at #17196:
Wayland driver specific changes:
- make sure pointer position is always within [-0x7fff,0x7fff]
by using the confined wrapper
- enable lightgun to report -0x8000 if pointer is really offscreen
- remove extra "inside" checks
- report same pointer/lightgun coordinates for all ports
- simplify pointer and lightgun handling
Other changes:
- unify "offscreen" condition through input_driver.c
- slight tuning of pointer conversion in video_driver.c
- update libretro.h with explanation and pointer offscreen value
- small fixes on remote retropad test screen
and bandwidth for our server but none of thse Named_Logos have been added to
any repos for now. We will also need to have settings for specifying how much
stuff we fetch at the same time (Named_Logos, Named_Snaps, Named_Titles, Named_Boxarts).
Trying to fetch all this stuff at the same time is prob a mistake
* Draft: Add Named_Logos
* Allow selecting Content Logo as a thumbnail display
* Increase pl_thumbnail_download index
to 4 to match the 4 available thumb types
---------
Co-authored-by: Rob Loach <[email protected]>
Add another version of the coordinate translation that will not
report -0x8000 for offscreen values, but instead map the position
to the respective edge (0x7fff/-0x7fff). Not yet in use.
Udev driver updated to use the wrapper, as all other input drivers do.
- remove a lot of duplicated code across mac/ios/appletvos
- restore ability to use either login or app_store_connect_api_key
- pull version string from version.all instead of app store connect
- allow building from alternate branch
- allow skipping upload or making it publicly available
* First crack at light sensor support for Linux
* Add light-sensor support to most Linux input drivers
* Fix a compiler error
- Whoops, forgot to declare `sdl`
* Refactor linux_illuminance_sensor_t
- Allow the poll rate to be specified
- Poll the sensor on a separate thread
- Open a file handle each time we poll the sensor, since sysfs doesn't update the contents of an existing handle
* Set the `done` flag when closing the light sensor
- Whoops
* Avoid a division by zero when updating the poll rate of an existing sensor
* Don't try to open illuminance sensors from ".", "..", or hidden files
* Never mind
* Fix some silly mistakes
* Skip hidden files, ".", and ".."
* Cancel the sensor poll thread mid-sleep when closing it
- POSIX says it's fine
* Add to CHANGES.md
* Address feedback given on PR
* Use libretro-common's file system instead of stdio
- Unlike some other drivers, the camera driver is only initialized when a core actually asks for it
- Therefore, the driver context isn't available when it's time to ask for devices
- I could refactor the camera driver to be created earlier, but then I'd need to refactor the other drivers as well
- That'll come later in another PR
Changed the logic of the classic toggle turbo mode code such that the pressing order of the turbo button and the button to enable/disable does not matter.
Due to node v20 being incompatible with some of the CI images
(too old glibc), the checkout action is replaced by an alternative
which does not need node, and upload is removed for now.
Due to node v20 being incompatible with some of the CI images
(too old glibc), the checkout action is replaced by an alternative
which does not need node, and upload is removed for now.
* Make paths portable for CloudSync when building manifest
* Enable CloudSync on Windows builds
* Fix "fetech server file" - Forgot to commit this, oops!
* Fix definition conflict with gzguts.h
* "Enable Cloud Sync for Windows UWP builds"
---------
Co-authored-by: WindowsDEV <[email protected]>
* (Qt) Migrate to Qt6
* basic support Qt6 with minimal changes required for compiling
* look `moc` in QT_HOST_LIBEXECS
* (Qt) Backward compatibility with Qt5
This enhancement is particularly useful when using RetroArch with a touchscreen, as it allows you to resume content without needing to navigate back to the quick menu, thereby preserving the current menu screen.
Because shift keys were ignored in the event message and only issued during polling, a quick key press and release between polling would get ignored.
This change also fixes left alt up key events getting issued (and sent to the core) twice.
* Initial implementation of CoreAspect uniform
* float -> float_t
* Possibly fix wii_u building
* vulkan: use float instead of float_t;
* slangp: Advertise support of CoreAspect uniform
by defining _RARCH_HAS_COREASPECT_UNIFORM early in the shader source, just after "#extension GL_GOOGLE_cpp_style_line_directive : require"
* CoreAspect + glsl fix: use glUniform1f()
* Add CoreAspectRot uniform.
It reports CoreAspect value or 1/CoreAspect when the content is rotated by 90 or 270 deg.
* Fixed stupid typo
* Just use _HAS_COREASPECT_UNIFORMS to check for CoreAspect uniforms support (was _RARCH_HAS_COREASPECT_UNIFORMS)
* Rename CoreAspect, CoreAspectRot, _HAS_COREASPECT_UNIFORMS to OriginalAspect, OriginlAspectRot, _HAS_ORIGINALASPECT_UNIFORMS
* GLCore: void Pass::build_semantic_float needs glUniform1f.
...how on earth did it worked for UBO !?
* d3d10,11,12, wrong function called by overlook.
* Add test shader, will remove that before PR
* Fix metal rotated aspect reporting
* remove test shader
* Fix C89 Build
* Use OriginalAspectRotated instead of OriginalAspectRot
* Add CoreFPS and FrameTimeDelta Uniforms.
_HAS_ORIGINALASPECT_UNIFORMS is (#)defined and can be used to query for them.
* add test shader
* remote test shader
* Wrong paste.
* gx2: use float
* wrong indentation
* resolved merge conflict
* fix indentation
* Fix comment/Formatting
* Change uniform name from CoreFPS to OriginalFPS
* underliyng references: core_fps -> original_fps
New environment set call to enable a bit more sensible handling of
absolute pointing devices (pointer and lightgun). With the
confinement enabled, pointing devices will not return neither
-0x8000 nor (0,0), which was anyway dependent on the input driver,
instead they will stay at the extreme edge.
User slot (player #) and joypad driver port is by default the same, but
it can be changed either manually or automatically (reserved device).
Use the correct index for detecting values associated with the port.
* Initial implementation of CoreAspect uniform
* float -> float_t
* Possibly fix wii_u building
* vulkan: use float instead of float_t;
* slangp: Advertise support of CoreAspect uniform
by defining _RARCH_HAS_COREASPECT_UNIFORM early in the shader source, just after "#extension GL_GOOGLE_cpp_style_line_directive : require"
* CoreAspect + glsl fix: use glUniform1f()
* Add CoreAspectRot uniform.
It reports CoreAspect value or 1/CoreAspect when the content is rotated by 90 or 270 deg.
* Fixed stupid typo
* Just use _HAS_COREASPECT_UNIFORMS to check for CoreAspect uniforms support (was _RARCH_HAS_COREASPECT_UNIFORMS)
* Rename CoreAspect, CoreAspectRot, _HAS_COREASPECT_UNIFORMS to OriginalAspect, OriginlAspectRot, _HAS_ORIGINALASPECT_UNIFORMS
* GLCore: void Pass::build_semantic_float needs glUniform1f.
...how on earth did it worked for UBO !?
* d3d10,11,12, wrong function called by overlook.
* Add test shader, will remove that before PR
* Fix metal rotated aspect reporting
* remove test shader
* Fix C89 Build
* Use OriginalAspectRotated instead of OriginalAspectRot
A core needs to have "/" in its list of supported extensions to indicate support for loading directories.
If a core additionally supports the disk control interface, also support loading of directories as disk images.
Sensor screen is extended with a pointer (a single white pixel)
and a few indicators for the mouse and lightgun buttons. Pointer
type is selectable from core options (mouse, lightgun, pointer,
old relative lightgun). An extra square indicator shows when
absolute pointer types get near the edge / to the very edge /
return to 0,0 position.
* slang shaders: add support for __has_include like C++17 macro.
This adds a new #pragma include_if_exist "filename" directive that acts like #include statements,
but does not return error if the file does not exists.
* removed unuseful define
* Silence GCC 14 warning [-Warray-bounds=]
GCC reports a couple of warnings like this example:
libretro-common/cdrom/cdrom.c:395:14: warning: array subscript 6 is outside array bounds of 'unsigned char[6]' [-Warray-bounds=]
395 | cmd[6] = cmd[3];
| ~~~~~~~^~~~~~~~
libretro-common/cdrom/cdrom.c: In function 'cdrom_unlock':
libretro-common/cdrom/cdrom.c:1268:18: note: at offset 6 into object 'cdb' of size 6
1268 | unsigned char cdb[] = {0x1E, 0, 0, 0, 0x2, 0};
The static analysis heuristic doesn't consider the fact that the writes to cmd[6] and later only happen under the condition that `if (cmd[0] == 0xBE || cmd[0] == 0xB9)` and that in all of those cases the array passed is wide enough. So this is a false positive.
Nevertheless, there seems to be an easy way to silence the warning without disabling it: just require all arrays passed to be at least 9 bytes long and explicitly set the size of those arrays that have been shorter to 9.
* Work around the requirement of C89
I used a C99 construct, but this is easy to work around
with a run-time check.
* Restore the check for non-null cmd
It was obsoleted in a previous version, but is needed back now.
---------
Co-authored-by: pstef <[email protected]>
* fixed audio drivers in RARCH_NETPLAY_CTL_USE_CORE_PACKET_INTERFACE
fixed audio problem with menu toggle with the new network fuction
* Fix type space
- replays now start each frame with the number of key events (8 bit
unsigned int, then key events) and the number of input events (16 bit
unsigned int, then the input events)
- this makes it possible to parse replay files without any core
loaded, and makes replays more portable if cores change their polling
strategies
- external tools can now parse replay files
- old (vsn 0) replays will still play back, but new (vsn 1) replays
will not play on old RA
- replay files grow faster now, with each input poll now taking 8
bytes instead of 2
This changes the replay movie's frame_ptr (a 20-bit number used to
point to a log of file offsets) into a frame counter, which is masked
against the 20-bit pattern for use in the file offset log but also
functions as a time index into the replay. Right now that is reported
in `GET_CONFIG_PARAM active_replay` but in the future it could be used
to show how far into the replay we are during playback or how long the
replay is during recording.
The build with `--enable-wayland --disable-kms` has a part where an
unsigned long is passed as a void*, but GCC 14 enforces
-Werror=int-conversion, causing the build to fail.
https://gcc.gnu.org/gcc-14/porting_to.html#int-conversion
If there are several variants of a controller, but their button
layout is exactly the same, allow alternative identifiers, e.g.:
input_device_alt1
input_vendor_id_alt3
input_product_id_alt9
Two new settings added to Settings / Input / Menu Control:
- disable left analog stick in menu navigation
- disable right analog stick in menu navigation
Since the corresponding logic is already a distinct logic flow in
input driver, no change was necessary to analog-to-digital settings
or the like.
This commit imports a series of patches from the FreeBSD port of RetroArch to
improve build compatibility and address specific issues encountered in the
FreeBSD environment. These patches, sourced from the FreeBSD Ports collection
(https://cgit.freebsd.org/ports/tree/games/retroarch/files), have been adapted
and tested to ensure they integrate seamlessly with the current build process.
* sort remaps by connected controller if option is enabled
* ensure dir name is valid based on input device name
* Fix comments
* Fix forbidden mixed declarations and code
* fixing build errors
* fix additional build warning/error
* Resolved code review change requests
* Changed strlcat to strlcpy as per recommendation
* Retrigger checks
* Use proper path separator.
* Ensure default value is toggled off.
* Ensure that gamepad device name is valid.
* Added check for null thumbnail path. Applies to 16951
* Moved null check up the code to cover multiple accesses to the thumbnail path.
* Checked for null values before trying to get logo icons for playlists
* Rolled back the thumbnail_path_gfx changes and instead added
deinitialization of the icon thumbnails when a list was not a playlist.
* Massive reduction in heap space allocation, going from settings struct
264kb to 119Kb
* Use NAME_MAX_LENGTH for base paths/names, etc
* Use DIR_MAX_LENGTH for directory sizes
- add reserved device check against device display name as well
- selected device name matching in menu with or without vid:pid
- cosmetical change in test input file
When save state auto indexing is enabled, and maximum kept states
are limited, wrap around after reaching the configured maximum.
A gap in the indexing is used to keep track of most recent state.
If e.g. maximum kept amount is 5, then indexes 0..5 will be used,
if 3 is empty, most recent state is 2.
* This change allows playlist icons to be replaced with Logos. the art is loaded to the Thumbnail Named_Logos folder. It is treated the same as other thumbnails for naming and for automatic download. There is a settings menu option to turn it on and off. It is off by default. This only applies to the xmb menu driver.
* Removed commented out code against the style guide.
* Code cleanup for C89 compatibitity
* Cleaned up errors from Automated CI.
* Cleaned up comments.
* Update gfx_display.c
change strcpy to strlcpy
* Update gfx_thumbnail_path.c
fix code formatting
* Update xmb.c
code formatting changes
Appears to be enough to silence any lingering notes when midi is playing
and core is suddenly closed. Tried adding this on the core side but
midi_free comes first before retro_deinit/retro_unload_game so the
driver was already closed.
Another way to fix this in the core's side is to call 'flush'
immediately after any midi writes, but that doesn't appear to be the
api's design, flush is supposed to get called at the end of the
retro_run.
Im open for any better methods. but this should work for the issue
without causing other problems.
Co-authored-by: negativeExponent <[email protected]>
Allow thumbnails (boxart, title, screenshot) to be loaded in any
other supported format as well, currently jpg, bmp, tga.
Support is for local thumbnails only, downloads are not changed.
PNG format is always preferred. Menu option added for control,
since trying for multiple thumbnail files may impact performance
on slow storage media.
In some cases, set_sensor_state and get_sensor_input are
more related to the joypad driver, e.g. in desktop platforms
where sensors are associated rather with the joypad.
If input driver supports the sensors, it is still preferred.
Placeholder inserted for all input drivers, no functionality
added yet.
Since Vulkan doesn't support negative x or y viewport positions, this
patch concatenates a translation matrix to the projection matrix used in
Vulkan rendering. In this way, if a negative x or y coordinate would
be necessary, we can instead use a 0 coordinate and a
leftwards/upwards translation to achieve the same effect. This seems
to work alright with overlays, so as far as I can tell this patch
seems sufficient to get the behavior we want?
A new input driver (test_input), similar to test joypad driver.
Takes its inputs from a json file provided in options. Supports
keyboard input and sensor input (accelerometer, gyroscope,
illuminance).
Remote Retropad extended with a sensor test screen.
Added move and rename methods
Provider notifies viewer to refresh view when files are changed
Bumped up TargetApi annotation for DocumentsContract.buildTreeDocumentUri. Could alternatively use androidx compat class.
Support added for extra mouse buttons. Since these buttons were
not returned by XQueryPointer(), some additional logic was needed
which fit best to scroll wheel handling.
This mirrors the use of video_viewport_get_scaled_integer for
non-integer scaling at various aspect ratios. Two variants are
provided, one with implicit device and desired ratios and one with
explicit ratios.
Also added a flag to video_viewport_get_scaled_integer to indicate the
direction of positive y.
- Add missing numlock mod to dinput
- Add missing scrolllock mod to x11
- Add missing capslock, numlock, scrolllock and meta mods to android
- Add missing scrolllock mod to sdl
- Add missing capslock, numlock, scrolllock and meta mods to switch
- Add missing numlock mod to winraw
- Add missing numlock mod to uwp
This puts the code into the binary's .text section, which is needed
for platforms without the ability to map it as RWX (WiiU). Using
GNU/AT&T syntax for the assembly here.
Will return 0 for non-file streams. I didn't want to mess around with
memory_stream (which could in theory have a truncate impl that sets
size) because there were globals and stuff and I got nervous (also
truncate might *grow* a file if the new length is longer than the old
one and then I'd have to think about realloc, etc).
Handle refresh rate as float in general, and add also extra
attributes (interlaced, doublescan) for video modes.
Make it possible to select exact mode (interlaced / doublescan modes
will not be selected), and allow close matches such as 49.5 Hz
for PAL 50 Hz.
<compat/posix_string.h> gets included which should redefine strtok_r
for MSVC usage but it just doesn't work and fails at linking stage, will have to figure this out
later
Change GL2, GL3 and Vulkan drivers to behave as fullscreen if context driver
(such as KMS/DRM or KHR) does not support windowed mode at all.
Take it into account also for refresh rate switch.
For each player, 2 new options are added:
- a reservation type (no reservation, preferred, reserved)
- a reserved device name
When handling port - player assignments, reserved devices
will be assigned to the respective player port. If reservation
type is "reserved", no other device can take that port
automatically.
Reservation config option and matching function lifted from:
PatrickStankard https://github.com/libretro/RetroArch/pull/16269
Test joypad driver was extended for more tests.
Co-authored-by: Patrick Stankard <[email protected]>
A rationale is given in the comments, but even a class 6 or class 10 SD card can handle reads and writes on the order of MB/s, which means a 4KB chunk size is just wasting time in syscalls. This could maybe be fixed with a buffering reader but I don't feel comfortable tweaking libretro-common's VFS to handle that. Instead, I thought it would be good to both remove an ifdef and increase the chunk size to 128KB. For cores with small states this will should make state saving virtually instantaneous, and for cores with large states it should be a 32x speedup.
it is more convenient to provide the URL via make option rather than
rely on hardcoded value in the code base. it provides more flexibility
in case of different servers for stable, daily, canary, community, ...
and instead of parsing a file in the filesystem to obtain target name of
the device on which lakka is running, we can provide the target name at
build time as well. the target name is used for the full path URL for
the download of updates.
there is no need to have these values editable via retroarch frontend
and saved in the config file. it is safer to provide them at build time
and have them set this way.
On Win32, the numlock and pause keys need special handling. But the existing code did only handle it correctly for pressing and not releasing. It separately called GetKeyState for the two keys which only returned true while pressing a key and not while releasing it. This then caused the releasing of the pause key to be treated as releasing the numlock key and vice versa. This fix handles releasing the two keys correctly.
This fixes a warning of the `include_hidden` parameter not being used outside of `_WIN32`.
```
vfs/vfs_implementation.c:1063:30: error: unused parameter ‘include_hidden’ [-Werror=unused-parameter]
1063 | const char *name, bool include_hidden)
| ^
cc1: all warnings being treated as error
```
Extended RETROK_ values with 18 new items, commonly found on
"multimedia" keyboards.
Mapping added for SDL, X11, Wayland, dinput, winraw keymaps.
Keyboard tester function of Remote Retropad extended to cover new keys.
One fix in Android mapping for #12986
Added analog button indication for those buttons that may have use for it
- primarily L2/R2, but support was added for all buttons where at least
one controller is known to support it. Added also core option to hide
mismatching inputs where analog value is not sent (like keyboard
hotkeys assigned to retropad buttons). Analog button inputs are not
set up for remote transmission, only for local test.
Analog axes have now also dynamic coloring.
Added a keyboard tester screen which includes a standard 102-key PC
keyboard + extra blocks for all RETROK_ values present in the code.
Screen adapted from DOSBox-Pure onscreen keyboard with permission.
Keyboard button A+B switches between the two screens. Keyboard
inputs are not set up for remote transmission, only for local test.
Core option added to select start screen.
Other small improvements: core reset will take new option values,
input driver applies received values more carefully.
* iOS/tvOS: Hide MoltenVK from Core List, again
* iOS/tvOS: Don't show certain core management options
* apple: Manage macOS/iOS/tvOS from one workspace
* iOS/tvOS: update-cores.sh tweaks
* Add FlatUX Theme, Remove Retired Themes
With some help from @gouchi, I decided to try and add the FlatUX theme, which has been in the retroarch-assets repository for years. FlatUX was designed to merge the FlatUI and Retroactive themes into a single, unified design.
With the addition of FlatUX, the Retroactive and Neoactive themes will be retired. This PR removes them both from the menus. The theme files will be removed from retroarch-assets, but are archived on baxy-retroarch-themes.
* Edited Language Files to Add FlatUX, Remove Retired Themes
Edited the language files to Add FlatUX and remove the Retroactive and Neoactive themes.
* Fixed Language Files Again
I apologize for my errors. Let's see if this gets it right.
* Updated IT Language File
* iOS/tvOS: bundle cores as frameworks as opposed to dylibs
* iOS/tvOS: update plist to indicate controller support
* iOS/tvOS: living within the sandbox
* iOS/tvOS: import content through share sheet
* iOS/tvOS: default audio sync off due to crash on background
* iOS/tvOS: don't try altkit if there's no reason to
* iOS/tvOS: enumerate cores for appstore distribution
* This PR contains Add To Favorite functionality. It allows moving content to another playlist or to Create a new playlist with the selected content.
* Update retroarch.c
Fixed ISO C90 variable declaration at top of code.
* Update menu_cbs_ok.c
Fixed variable declaration for ISO requirement.
* This commit is to amend a previous PR where the mesg andd label hashs were in the wrong file.
* provide more information during achievement load process
* update rcheevos version
* do disconnected processing even when no game is loaded
* make loading widget unique
* only show loading indicator with verbose messages on
These "support" bindings made sense in older versions of iOS/mfi
controllers that didn't have full support for L3/R3 but now just get
in the way of the ones that do.
* This PR contains Add To Favorite functionality. It allows moving content to another playlist or to Create a new playlist with the selected content.
* Update retroarch.c
Fixed ISO C90 variable declaration at top of code.
* Update menu_cbs_ok.c
Fixed variable declaration for ISO requirement.
* Add grab_mouse interface for Android
Makes mouse grabbing and 'Game Focus' work on Android with a real mouse
Properly handle relative mouse motion events on Android (SDK 28 and newer)
* Enable workflow_dispatch on CI Android
* Update android_mouse_calculate_deltas callsites
* Add RETRO_DEVICE_MOUSE to android_input_get_capabilities
* Use Handler to trigger UI events (toggle mouse, immersive mode) with 300ms delay
* Enable input_auto_mouse_grab by default for Android
* Handle RARCH_DEVICE_MOUSE_SCREEN in Android input driver
* Add android.hardware.type.pc to manifest
* Don't attempt to set pointer speed via scaling in android_mouse_calculate_deltas
* Keep x/y values within viewport resolution for screen mouse
* Use video_driver_get_size to get width/height
---------
Co-authored-by: Bernhard Schelling <[email protected]>
* Test driver for joypad inputs
Add a new joypad input driver:
- hide driver behind #ifdef and enable it in config_params.sh
- add a new config parameter to specify the test input file
- add aux files: additional config files that cancel out any binds
that may be present in RA config, autoconfig profile for
test joypads, test input file that matches controller test
sequence
* Fixes and comments for test input driver.
- When enabled, any touch inputs not in a hitbox are used to create pointing device input for the core.
- Mouse: 1-, 2-, 3-touch inputs are LMB, RMB, and MMB
- Lightgun: allows input from overlay buttons or multi-touch mappings
Add input test capability for Remote Retropad core:
- read an .ratst file (JSON format) with test steps
- display instruction (via libretro SET_MESSAGE)
- highlight input to be activated
- display summary when test is finished
Refine the display for Remote RetroPad, as a preparation for
using it as a test tool:
- added display for analog axes
- all inputs that were hit at least once, receive a light green color
- removed useless extra button (could never be sent)
* Touch up the documentation for a few environment calls
* Touch up more comments
* Update docs for more environment calls
* Add doc comments for more environment calls
* Change various @returns to indicate that the environment call is available
- Some environment calls might be recognized but ignored (e.g. when fast-forwarding during netplay)
* Note some deprecated symbols
* Touch up the docs for RETRO_ENVIRONMENT_SET_MESSAGE
* Touch up the docs for RETRO_ENVIRONMENT_SET_PIXEL_FORMAT
* Add more doc comments
* (libretro) Add more doxygen documentation for the libretro API
* (libretro) Add doxygen comments for the callbacks
* Document retro_init and retro_deinit
* Add comments for retro_log-related symbols
* Add a comment
* Clean up some camera-related comments
* Clean up frame time-related callbacks
* Correct some information about major callbacks
* Clarify some parameter info
* Fix incorrect info about retro_set_environment
* Update libretro-common/include/libretro.h
Co-authored-by: Rob Loach <[email protected]>
* (libretro) Add doxygen docs on RETRO_THROTTLE
* Touch up the docs for RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK
* Touch up the docs for some macros
* Touch up the docs for some more environment calls
* Update libretro-common/include/libretro.h
Co-authored-by: Rob Loach <[email protected]>
* Update libretro-common/include/libretro.h
Co-authored-by: Rob Loach <[email protected]>
* Update libretro-common/include/libretro.h
Co-authored-by: Rob Loach <[email protected]>
* Update libretro-common/include/libretro.h
Co-authored-by: Rob Loach <[email protected]>
* Tidy up the doc comments for clamping.h
- It was a low-hanging fruit
* Define some sections for constants
- Doxygen will group all contained symbols on one page
* Fix a duplicate @see
* Polish up the docs for the rumble interface
* Polish up the docs for RETRO_ENVIRONMENT_GET_INPUT_DEVICE_CAPABILITIES
* Update libretro-common/include/libretro.h
Co-authored-by: Rob Loach <[email protected]>
* Document INLINE
* Clean up some tags
* Touch up the docs for the sensor interface
* Add docs for RETRO_ENVIRONMENT_SET_PROC_ADDRESS_CALLBACK
* Update docs for RETRO_ENVIRONMENT_GET_INPUT_BITMASKS and accompanying names
* Update some group definitions
* Spiff up the docs for retro_dirent.h
* Document dylib.h
* Document base64.h
* Document crc32.h
* Touch up the docs for audio conversion functions
* Clean up some Doxygen tags
* Refine the docs for RETRO_ENVIRONMENT_GET_PERF_INTERFACE
* Fix incorrect infor in dylib.h
* Touch up the docs for RETRO_ENVIRONMENT_GET_CAMERA_INTERFACE
* Revise the docs for RETRO_ENVIRONMENT_SET_GEOMETRY
* Revise the docs for RETRO_ENVIRONMENT_GET_LOCATION_INTERFACE
* Revise a function's doc
* Touch up most of the rthreads docs
* Touch up the retro_timers.h docs
* Revise the subsystem docs
* Fix some incorrect @see's
* Touch up the docs for RETRO_ENVIRONMENT_GET_LED_INTERFACE
* Give the RETRO_ENVIRONMENT_GET_SAVESTATE_CONTEXT docs a makeover
* Slight cleanup to the microphone docs
* Slight cleanup to the device power docs
* Touch up serialization quirk docs
* Give the MIDI docs a haircut
* Update libretro-common/include/libretro.h
Co-authored-by: Rob Loach <[email protected]>
* Freshen up rtime's docs
* Improve the docs and accompanying definitions for RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE
- Revise the text of the documentation
- Introduce an enum that defines the flags (it's still an int, so ABI compatibility will be fine)
- Move the documentation for each bit to its corresponding enum
* Shine the shoes of RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS's docs
* Freshen up the docs for fifo_queue.h
* Document most of task_queue.h
* Put retro_dirent's symbols in a group
* Finish documenting task_queue.h
* Document some compatibility headers
* Document read_stdin
* Document file_stream_transforms.h
* Document the VFS API
- Not the wrappers, just the plain API itself
* (Docs) Add doxygen notes about RETRO_DEVICE_*
* Fix some line breaks
* Revise RETRO_DEVICE docs
* Document strl.h
* Update the features_cpu.h docs
* Rewrite the docs for file_stream.h
* Update the docs for retro_endianness.h
* Update the docs for retro_miscellaneous.h
* Document the RETRO_VFS_SEEK_POSITION constants
* Finish documenting rthreads.h
* Document network_stream.h
* Put the RETRO_MEMORY defines in a defgroup
* Move a doc comment in retro_common.h to file scope
* Revise the docs for RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, and accompanying symbols
* Fix the @param/in/out order in libretro.h's @param declarations
* Tidy up the docs for RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION
* Spiff up the docs for RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER
* Fix some tags
* Polish up RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE's docs
* libretro: Add header doxygen
* Update libretro-common/include/libretro.h
Co-authored-by: Rob Loach <[email protected]>
* Update libretro-common/include/libretro.h
Co-authored-by: Rob Loach <[email protected]>
* Clean up the docs for RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY
* Clean up the docs for RETRO_ENVIRONMENT_SET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE
* Touch up some comment syntax for RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE
* Fix some inaccuracies
* Re-add the license statement for libretro.h
* Touch up the docs for RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2
* Touch up docs for RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY
* Touch up docs for some options-related symbols
* Fix some syntax that was preventing most doc files from being generated
* Express retro_core_option_definition docs in terms of retro_core_option_v2_definition
* Finalize some core option-related docs
* Fix some incorrect info about achievements
* Polish up the docs for RETRO_ENVIRONMENT_SET_MEMORY_MAPS
* Polish up the docs for RETRO_ENVIRONMENT_GET_DISK_CONTROL_INTERFACE_VERSION
* Add a notice for `RETRO_ENVIRONMENT_GET_LOG_INTERFACE`
* Update the disk control interface docs
* Add a sentence to a doc comment
* Update a comment
* Remove an irrelevant @todo
* Touch up the docs for `retro_message_target`
* Touch up the docs for `retro_message_type`
* Touch up the docs for `RETRO_ENVIRONMENT_SET_MESSAGE_EXT`
* Touch up the docs for `RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK`
* Touch up the docs for `RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY`
* Revise a comment
* Revise the docs for `RETRO_ENVIRONMENT_SET_VARIABLE`
* Add a `@see`
* Clean up the `RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE` docs
* Update the Doxyfile
* libretro: Add three more environment callback doxygen docs
* doxygen: Remove @example reference
---------
Co-authored-by: Rob Loach <[email protected]>
Triggered by #16320, a few things are adjusted:
- device name is shown correctly (this was preventing config save)
- driver name fixed in autoconfig related calls
- hotplug reconnect was not working
- some logging added
This fixes a recurrent bug where context initialization fails due to the major/minor being both set as 0, causing an OpenGL ES 1.1 context to be created.
* [WINRT] Enable logging on __WINRT__ and bypass verbosidy in debug
* [UWP] wrong configuration prevents GLES to compile, common functions defines GL symbols
* [UWP] configure project to allow OPENGL on default configuration and copy MESA DLLs into UWP release
* [UWP] add MESA headers
* [UWP] add MESA EGL.lib needed for GLES context. However HAVE_OPENGL is better as GL cores use desktop version, so this is left for reference and to make the solution build with HAVE_OPENGLES
* [UWP] UWP is missing some GDI function definitions, implemented into MESA Gallium
* [UWP] Configure Release project too
* [UWP] Add mesa alpha-2 release dlls
* [UWP] allow griffin and vide_driver to have an OPENGL context
* [UWP] allow wgl context to work with mesa under WINRT
* [UWP] BUG: have to modify height/width getters and align them to MESA because the screen resolution is not right in gl context. Pending further investigation
* [UWP] fix ANGLE build
* [UWP] remove duplicate import code.
* (UWP) Cleanup filters file
* MESA screen destroy fix and Yabasanshiro hack. Align to alpha-2-hack tag
---------
Co-authored-by: Gabriel Morazán <[email protected]>
This puts the History and Favorites playlists (up to five items each)
in the Top Shelf menu. In order for this to be enabled you must build
it yourself and change the app identifiers for the TV app and Top
Shelf extension, and add both of them to an app group.
* (Ozone) Fix crash when deleting last playlist from sidebar
* (Ozone) Respect navigation wraparound in sidebar
* (Ozone) Fix sidebar after loading configuration
Autoconfig profile may be useful for e.g. submitting to autoconfig
repo. Construction of the filename is moved to a separate function
and reused for message.
* Add sublabels for "port x controls" entries
Due to the port-specific indexes, sublabels for these entries
are handled specially. Some simplification/generalization was
applied and hand-crafted string joining was removed from a few
places, though it remains still in other places.
Preparation for #16121 (this commit does not do anything yet with
file names).
* Further simplifications around joypad_index
Removed a few labels, now unused, and the left/right check, as it
fell back to the default which is given anyway in advance.
Adds support for sub-frame shaders to vulkan/glcore/dx10-11-12.
Builds on the concept already present for frame duplication in use for BFI, to present multiple 'sub' frames per real frame to the shaders, so they can run at a higher framerate than the content framerate. Must be enabled via subframe shaders setting under synchronization settings to be active.
Will allow BFI to be implemented inside of the shaders, among any other use for the higher framerate shader authors can devise.
CurrentSubFrame and TotalSubFrames have been available inside the shaders to track what they want to do on an given subframe. TotalSubFrames will always be 1 when the setting is disabled (and when in menu/ff/pause). Framecount will not increment on sub-frames, as it does not for injected bfi frames now. Should not interfere with any existing shaders that do not check for subframes.
Loading the last used disc for multi-disc content was automatic.
However, in some cases it is not wanted, as described in #16018
Option is added for controlling the function. Disabling the
option will also implicitly disable index saving.
The check for sleeping to sync to a specific speed that is meant for fast forward/vrr could be true for a non-vrr normal core running state causing a possible sleep in a situation it was not intended for, especially at higher hz, and thus interfering with frame pacing.
commit 793d41c303206b43932ddcefd44a45836def55eb
Author: Ophidon <[email protected]>
Date: Fri Jan 19 23:12:31 2024 -0500
Build Fix 2
Move declarations of iterators.
commit c0e959b3d3cd773a66a17cfe034f08eaa53d525a
Author: Ophidon <[email protected]>
Date: Fri Jan 19 22:57:01 2024 -0500
Build Fix
Help string was 14 characters too long for c89.
commit fc5506c7906bf82d6f88b7b0d7e4764d58d90622
Author: Ophidon <[email protected]>
Date: Fri Jan 19 22:40:45 2024 -0500
BFI Updates
Significant BFI updates.
- Adds BFI to dx10/11/12 in general.
- Updates existing BFI menu option descriptions to be somewhat more clear in how to use correctly.
- Adds Variable Strobe length via new 'Dark Frames' bfi sub-choice. Only valid at 180hz and above, as it must work with whole frames.
- Algorithm to auto select 'decent' Dark Frames choice, for any given selected BFI refresh rate. Will also avoid defaults that can cause Image Retention at any Hz higher than 120. (Impossible to avoid at 120 if you have an affected screen... get an OLED :D ) .
- Some sanity checking on selecting BFI or the other synchronizations options like Swap Interval > 1, that don't play well with BFI.
Some controllers show up as both HID and mFI. In that case we probably
want to let the user pick which driver to use, rather than balance
across them.
This fixes issues with the analog stick moving in the wrong direction
on the y axis.
Thumbnail packs are no longer available, but the option was still
present as "legacy thumbnail downloader". Since it serves no
purpose any more, it is removed from the code.
- Move flag logic to task_push_pl_entry_thumbnail_download - this
enables individual "download thumbnails" entry to be also flexible
- Add a message when this download has been tried enough times
(i.e. 3)
- Optimize cases when full or short name is the same as standard
name, skip queries if so (both download and local file)
* Minor thumbnail improvements
- set standard name if only one entry is in the playlist
- use first database name for thumbnails if core has multiple
* Fix playlist thumbnail downloader
Playlist thumbnail downloader function was missed from the flexible
thumbnail name update, now it is added.
Auto savestate (and its optional thumbnail) is generated on core unload
(quit, netplay start, etc). This ends up using the task-queue, which in
many cases deadlocks and/or causes a crash due to its asynchronous
nature.
Given that this is a state that must be generated before quiting or
reloading the core, it makes no sense to use the task queue, it should
be a synchronous job like for instance SRAM saving.
This should fix#15248 (tested by @schmurtzm)
* Simplify autosave command function
* Simplify and split save and savestate logic
save.c contains "SRAM" saves and their logic, which uses no task/queue.
Add logic to handle 3 possible thumbnail names, in following order:
- most exact name derived from content file (same name, with .png extension)
- usual name derived from playlist (usually coming from database)
- shortened name up to first bracket, chopping off region/publisher etc. info
For local file system, names are checked always.
For thumbnail downloads, names are checked each time the item comes up
in the playlist, meaning that it may take going back and forth 3 times
for a thumbnail to appear. However, as a positive change, failed thumbnail
downloads are not repeated for the same playlist, which was not the case
earlier.
In the commit [1], a global configuration "thumbnail match with filename"
was added which allows thumbnail match with filename.
This commit adds playlist level "thumbnail match with filename" for more
flexible configuration.
[1] 32ed9b6041 ("플레이리스트 롬파일 이름으로 썸네일 이미지를 찾도록 옵션 추가 (#15731)")
Signed-off-by: masky2012 <[email protected]>
Before this fix with the folder setting enabled a core using the netpacket interface would append the sort folder name twice thus breaking existing save states
Right now close is based on core unload. There are several places where
cores are unloaded without the intention of stopping the emulation (for
instance whenever Netplay is started, core is updated, etc).
Moreover scheduling a quit under some of those events causes a task
queue deadlock (as per issue #15313) and freezed retroarch.
This fix moves the quit on close to a "manual" check, placed in the
relevant places (close content menu option, close content event (which
also covers hotkeys), etc.)
- Allow starting netplay host while a netpacket core is running without restart
- Allow connecting to a host while a netpacket core is running without restart
- Avoid clients getting stuck in connection loop if the host has the content paused while a client connects by automatically unpausing
* Rename the `MIN_MATCH` defined by xdelta3 to `XD3_MIN_MATCH`
- zlib defines its own macro by that name, but with a different value
* Don't redefine `SIZEOF_ARRAY` in xdelta3 if it already exists
* Don't define ssize_t in xdelta3, rely on libretro's definition instead
* Enable xdelta3 support in MSVC 2015-2019
* Fix some invalid MSBuild condition syntax
* Always build xdelta with XD3_USE_LARGESIZET as 1
* Fix an `#if` in task_patch.c
* Enable `HAVE_XDELTA` in the UWP build
* First crack at fixing Xdelta support for Android
* ensure game placard is loaded on main thread
* show on-screen indicator while disconnected
* show server unreachable message in achievements menu
* remove comment
iOS 7+ supports gles3, which is backwards compatible with gles2. This
doesn't enable the glcore driver (which isn't working on ios yet), it
just changes the underlying context.
This fixes some of the rendering performance problems on mupen64plus_next.
* Add xdelta in deps
* Include <assert.h> in xdelta3.h
- Otherwise the static_assert calls can fail
* Build xdelta3 in Makefile.common
* Add xdelta support to the softpatching infrastructure
- The patching itself isn't fully implemented yet
* Adjust how xdelta3.h checks the sizes of some types
- Now checks max values instead of relying on autotools
* Add some enums that were excluded by the cherry-pick
* Remove stray whitespace
* Adjust SIZE macros in xdelta3.h
- Move them outside the XD3_USE_LARGEFILE64 block
- Add more SIZE declarations
- Make SIZEOF_UNSIGNED_LONG_LONG contingent on the presence of ULLONG_MAX
* Reintegrate xdelta support
* Enable support for xdelta's secondary compressors
- Necessary for some patches
* Fix some format specifiers
* Remove unnecessary files from xdelta
* Include xdelta3.h with a relative path
* Add xdelta3 headers to HEADERS variable
* Gate Xdelta support behind HAVE_XDELTA
- HAVE_XDELTA is on by default
- HAVE_PATCH is still required for HAVE_XDELTA to be meaningful
- Support is mostly contingent on the availability of LZMA
- Anything modern should be okay
- Legacy platforms (e.g. DOS) may need to have Xdelta support disabled
- At least until some other solution can be found
* Disable HAVE_XDELTA on platforms where the build recently failed
- These come from looking at the failed builds on GitHub
- These are guesses, and may turn out to be wrong
* Fix a potential memory leak
- Whoops, looks like I need to call two cleanup functions
- xd3_close_stream exists separately from xd3_free_stream
* Split the --help printout for --xdelta into its own strlcat call
- GCC was complaining about #ifdefs within macro arguments being non-portable
* Fix some incorrect printf format specifiers
* Modify Xdelta to adhere to C89
- It's mostly using RetroArch's INLINE macro instead of the inline keyword
* Slight cleanups
* Remove a stray comma that was hindering C89 builds
* Add XDelta support to CHANGES.md
* Change how the xdelta patch's name is computed
- To be in line with other recent refactoring
* Fix an incorrect merge
- Whoops, this part was from before I figured out how to get the size of a patched file
* Explain the song-and-dance behind computing a patched file's size
* Define some XDelta3-related constants to 0 on 32-bit platforms
* Adjust some Xdelta-related macro definitions
- Exclude the encoder, since we're not making patches
- Move some #defines to after inclusion of <stdint.h>, to fix undefined behavior
- Remove _WIN32_WINNT overrides, since they were for code that we're not using
* Fix Xdelta support
* Wrap an encoder-only function in `#if XD3_ENCODER`
- Contentless support and populated content paths are not mutually exclusive in practice
- It just looked that way because most cores that support contentless mode to date don't use softpatching very much
* wip
* fix mount path
* Fix path for zip bundle
* fix case where idbfs sets up correctly and filesystem initializes too early
* Use partfiles to keep each zip small
* use bufferview slices instead of resize to support firefox
* Change rotation type to int to maximize compatibility and to match glUniform1i
* Change to C style comment; Make comment more useful (hopefully)
* Add support for FinalViewportSize in GLSL
* Updates to the netplay netpacket interface
- Switch environment call number from 76 to 78 (retire 76 as it was never used by any core)
- Simplify broadcasts by removing the option to send to all but one client
- Separate explicit flushing and querying of incoming packet into two operations (RETRO_NETPACKET_FLUSH_HINT and retro_netpacket_poll_receive_t)
- Enable a core to specify a protocol version string which can get used instead of core version to determine compatibility between two players
- Log and notify a separate message when there is a content crc mismsatch to convey it being less severe (as different games may be able to do network communication with each other)
* C89 compile fix
- Make sure logs are written before frontend deinit
- Add memory stats
- Add process_args to frontend to fix some cases when salamander cfg was not filled
- Add a missing include in case someone wants to compile for PS2 with HAVE_THREADS
There are cases when mixer exists without ffmpeg. In such cases,
some music content can still be added to the mixer for playback.
Logic added to separate the two cases.
* Increase emscripten stack size and decrease path size to fix emscripten builds broken since de45fc2
* use modularize flags for better-behaved javascript output
* makefile and loader changes
* use specialHTMLTargets to support modular access to canvas
* bind key events to canvas, not document
This way focus means focus and we can have multiple RA instances in
one page.
* Work around an emscripten bug in strict mode
* (Emscripten) Use console.error() for error messages
* increase asyncify stack size
* Fix `-lm` flag-related compile warnings in emscripten
---------
Co-authored-by: Rob Loach <[email protected]>
This line generates a warning during compilation:
menu/menu_displaylist.c:11925:46: warning: '%d' directive output may be truncated writing between 1 and 3 bytes into a region of size 2 [-Wformat-truncation=]
11925 | "Mode %d", toc->track[i].mode);
| ^~
menu/menu_displaylist.c:11925:40: note: directive argument in the range [0, 255]
11925 | "Mode %d", toc->track[i].mode);
| ^~~~~~~~~
In file included from /usr/include/stdio.h:936,
from ./libretro-common/include/file/file_path.h:26,
from menu/menu_displaylist.c:27:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:64:10: note: '__builtin___snprintf_chk' output between 7 and 9 bytes into a destination of size 7
64 | return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
65 | __bos (__s), __fmt, __va_arg_pack ());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Since the value of the track mode should be either 1 or 2, a modulo 10 should not limit the displayed value, and it removes the warning.
* Input: Udev: Fix touch support building against older kernel headers
* Input: Udev: Fix Touch Deep Debug compile issues
* Input: Joypad: Udev: Joypad: Add Change detection for udev events
This is handy with controllers like the Nintendo Joycons that have a daemon
app in the background to handle combining them into one controller(Joycond)
Since the device was already added, but joycond clamped permissions on evdev
retroarch was never updating the controller input change, this fixes that issue.
Note: Needs a patch in joycond as well, to send change uevent.
This shouldnt cause any issues with other controllers, as the kernel probably
will never send change events for these device types.
* Lakka: Add canary builds to updater
* AI service rework
* File missing
* Fixed C89 build
* Fixed usage of inline for C89 build
* Fixed an overlay unloading bug
Made sure to unload the overlay on release and when the server returns empty values in automatic modes.
* Fixed forward decl (c89)
* Fixed OpenGL texture loading
Moved image display to the main thread for now
* Changed some formatting slightly
* Fixed struct variable order and put brackets on newlines
* Moved pointer, fixed retroarch.cfg, and replaced strlcat with strlcpy
* Fixed catenation issue
* Fixed a few other catenation issues
* Fixed one more concatenation issue
* Fixed concatenation issue
* Fixed a few other concatenation issues
* Fixed one more concatenation issue
* potential fix for parsing issue
---------
Co-authored-by: Xunkar <[email protected]>
* High Hz Synchronization
Makes adjustment to driver_adjust_system_rates and related functions to handle Hz skew adjustment for high refresh rates better, especially when using effective refresh modifiers like swap interval or BFI.
* Reorder for Build Fix
Reorder declaration for build fix
* Lakka: Switch: Decouple From LibNX builds.
* Lakka: Always show Power Management Settings menu
* Lakka: Switch: Add Nintendo Switch Options Menu, and First Option
* Lakka: Switch: Add CEC Toggle
* Lakka: Switch: Add Bluetooth ERTM Toggle
* Retroarch: unix platform: Always display battery meter even when the device reports it as unknown
This is useful for most arm devices that have unknown battery status until charger state changes
* Retroarch: Lakka: Remove Gamemode stuff from build
Lakka will never include this, as it only runs base system, and retroarch.
* Enqueue replay record/playback until next frame
This fixes a bug where stdin commands activated via polling would
trigger replay record/playback in the middle of a frame, then input
checking would pull from them before the next frame came around---it
only makes sense to change the active replay in between frames, not
during them.
* fix comment syntax
The menu item for matching the thumbnails with filenames was just "Use Filename", which isn't that descriptive. This change tweaks it a bit so that the option is a bit more clear.
So happy to have this feature in place.
description:This is not a forum or a help section, this is strictly developer oriented.
body:
- type:checkboxes
attributes:
label:Is there an existing issue for this?
description:Only RetroArch bugs should be filed here. Not core bugs or game bugs
options:
- label:This is a bug in RetroArch frontend
required:true
- label:I have searched the existing issues
- type:textarea
id:description
attributes:
label:Description
description:Description of the actual behavior of the bug
placeholder:What is actually happening
validations:
required:true
- type:textarea
id:expected
attributes:
label:Expected behavior
description:What you expected to happen
- type:textarea
id:reproduce_steps
attributes:
label:Steps to reproduce the bug
description:List all steps to reproduce the problem
placeholder:|
1. [First step]
2. [Second step]
3. [and so on...]
validations:
required:true
- type:input
id:version
attributes:
label:Version/Commit
description:You can find this information under Information/System Information
placeholder:1.20.0(Git ab3b175)
validations:
required:true
- type:input
id:bisecting
attributes:
label:Bisect Results
description:Did this work with any older RetroArch version? Can you point to a version (or even commit) where it broke?
placeholder:43105ab
- type:dropdown
id:nigthly
attributes:
label:Present in the nightly version
description:Is the issue reproducible with current [nightly builds](https://buildbot.libretro.com/nightly/)?
options:
- I don't know
- Yes,this is reproduced in the nightly build
- No,looks like this is already resolved
default:0
validations:
required:true
- type:input
id:platform
attributes:
label:Platform & operating system
description:The system you're running RetroArch on
placeholder:Linux aarch64, Windows 11 23H2, Android 14, PS Vita
validations:
required:true
- type:input
id:cores
attributes:
label:Affected Cores
description:List the affected cores and their versions here, if applicable. If the issue **only occurs with a single core** then the bug may not be with RetroArch; in that case, you should report it in that core's repository instead of here.
description:Additional information about hardware and software
placeholder:|
* Window Manager: dwm/X11
* Affected video drivers: sdl2, glcore
* Installed through Flatpak
- type:textarea
id:logs
attributes:
label:Relevant log output
description:Paste [RetroArch log](https://docs.libretro.com/guides/generating-retroarch-logs/) and/or [GDB backtrace](https://docs.libretro.com/development/retroarch/debugging/). This will be automatically formatted into code, so no need for backticks.
- ANDROID: OnNewIntent handler to allow launchers start new content without closing first
- ANDROID: Use app-specific storage for Google Play builds of RetroArch
- ANDROID: Implement support for the Storage Access Framework, to allow the user to mount most directories1 from internal storage, the SD card, other removable storage devices and any document providers provided by other Android apps on the current device.
- 3DS: Add 800px mode for New 3DS models
- APPLE: Include sameduck, gearcoleco, geargrafx cores in App Store builds
- APPLE: Include reminiscence, virtualjaguar, vitaquake2 cores in App Store builds
- APPLE: Include gam4980 core in App Store builds
- APPLE: Bundle identifier added to Information menu
- APPLE: Option to control the usage of Metal argument buffers
- APPLE: Don't force fullscreen, allow multitasking on iPad
- APPLE: AppIntents for Siri, Shortcuts
- APPLE: Fix ffmpeg camera driver
- APPLE/MFI: Try harder to own the home button
- AUDIO: Microphone CoreAudio driver for iOS and macOS
- AUTOCONF: Autoconfig match extended with a physical identifier
- CAMERA: Use ffmpeg libavfilter virtual input device as default
- CHEEVOS: Show additional message for unsupported achievements
- CHEEVOS: Upgrade to rcheevos 12.1
- CHEEVOS: Change expired token message from info to error
- DATABASE: Filter in Database Manager now works for genre and region
- EMSCRIPTEN: Support core switching
- EMSCRIPTEN: Support suspend screensaver
- EMSCRIPTEN/RWEBCAM: Fix camera driver
- EMSCRIPTEN/RWEBINPUT: Add accelerometer/gyroscope support
- EMSCRIPTEN/RWEBPAD: Add rumble support
- EMSCRIPTEN/RWEBAUDIO: Rewrite driver, set as default audio driver
- INPUT: Default key and mouse binds for lightgun Start and Select buttons
- INPUT: Turbo mode corrections
- INPUT: Turbo fire settings are now saved to remaps, not to overrides
- INPUT: Fix menu usage when OK/Cancel has mouse binds
- INPUT: Ignore menu mouse startup position before moving
- INPUT: Fix heavy slowdown when using Bluetooth XInput controllers with rumble
- INPUT: Reset and close content hotkeys now require confirmation, similar to quit
- INPUT: Menu toggle and hotkey enable can now be assigned to the same key
- INPUT: Option to have hotkeys follow the port mapped first to the core
- INPUT/ANDROID: Favor mouse coordinates for lightgun
- INPUT/UDEV: Fix lost terminal settings after restart from menu
- INPUT/BSV/REPLAY: Bumped replay format version to 2. Old replays will still play back fine.
- INPUT/BSV/REPLAY: Add option to skip deserializing checkpoints from replay files (it introduces jank in some emulators).
- INPUT/BSV/REPLAY: Add checkpoint and initial savestate compression, following the `savestate_file_compression` config boolean. Use zstd if available, or fall back to zlib.
- INPUT/BSV/REPLAY: Add incremental checkpoints based on statestreams (depending on `HAVE_STATESTREAM` compile time flag). As an example, 60 `pcsx_rearmed` savestates would take 267MB uncompressed; with incremental encoding this is reduced to 77MB. Compressing the result can reduce the size to just 4MB.
- INPUT/BSV/REPLAY: Checkpoint compression and encoding can be combined. For example, 60 `pcsx_rearmed` checkpoints can take up just 15MB if each state is incremental and compressed. This is not as optimal as using incremental states without save state compression followed by offline compression, but is a good compromise in many use cases.
- INPUT/BSV/REPLAY: Add hotkeys and text commands to force a checkpoint insertion into the currently recording replay, and to seek backwards to the previous checkpoint and forwards to the next checkpoint.
- INPUT/BSV/REPLAY: Add a text command to seek to a specific frame of the currently playing/recording replay; it will return via the command replier the actual seeked-to frame (right now it only supports seeking to checkpoints).
- INTL: Add Irish Gaelic to selectable languages
- IOS: Use native keyboard in search
- IOS: Fix crash on iOS9 when fetching refresh rate
- IOS: Stronger haptics, controllable by setting
- IOS: Down arrow menu is removed, all 3 options are available by other means now
- IOS/MACOS: Fix display server resolution and refresh rates
- INPUT: Autoconfig extension with alternative name/vid/pid
- INPUT: Fix autoconfig profile saving when device is not in the default port
- INPUT: Change classic turbo mode to work independently of which key was pressed first
- INPUT: Pointer and lightgun handling sanitization on Windows and Linux desktop platforms. These input drivers will now report edge and offscreen positions in a harmonized way, and will not return 0 instead.
- INPUT/DINPUT: Fix detection of quick shift key presses
- INPUT/HID: Fix crash on macOS when disconnecting the controller a second time
- INPUT/LINUX: Add illuminance sensor support to the linuxraw, sdl2, udev, and x11 input drivers
- INPUT/Remaps: Sort and apply remaps based on the specific connected controller
- INPUT/UDEV: Enable mouse buttons 4 and 5
- INPUT/WAYLAND: Enable horizontal scroll and mouse buttons 4 and 5
- INPUT/WAYLAND: Simulate lightgun input for cores
- INPUT/WAYLAND: Support for cursor-shape-v1 protocol
- INPUT/X11: Enable mouse buttons 4 and 5
- iOS: Enable vibration by default
- iOS: Better handling of physical mice/magic keyboard trackpad
- iOS: Mouse grab fixes
- iOS: Fix mouse cursor movement when button is held down
- iOS: Fix microphone support request and entitlement
- iOS: Enable compilation back to iOS 12
- iOS: Fix OpenGL ES context usage on iOS 9
- iOS/TVOS: Add Opera to App Store build
- iOS/TVOS: Bring NEON defines in line with ARM64
- iOS/TVOS: Flush save files on backgrounding
- LIBRETRO: Support RETRO_ENVIRONMENT_GET_FILE_BROWSER_START_DIRECTORY
- LIBRETRO: Support "/" as a file extension for loading a directory as content
- FFMPEG: Fix crash when playing back a file with 96 kHz audio
- MACOS: New display server, including support for ProMotion 120Hz V-Sync
- MACOS: Create App Store build
- MACOS: Generate key up events for command keys
- MIDI: Fix long messages (SysEx) in WinMM driver
- MIDI: Fix lingering notes on close in Alsa driver
- MENU: Support local thumbnails in other image formats than png (jpg/jpeg, bmp, tga)
- MENU: Delete also savestate thumbnails when savestates are garbage collected
- MENU: Option to disable analog stick menu navigation
- MENU: Fix pause toggle to not clear fast forward state
- MENU: Fix search playlist index in XMB/Ozone
- MENU: Fix renamed entry display
- MENU: Filter unknown extensions also inside zip files
- MENU: Add icons for present / missing firmware on core info page
- MENU: Ignore other hotkeys when menu toggle is pressed
- MENU: Fix menu jumping when using L3+R3 combo
- MENU: System Information now only shows features relevant for the platform
- MENU/GLUI: Make Show Sublabels options effective
- MENU/GLUI: Icon fixes
- MENU/XMB: Allow playlist icons to be individually customized, by looking for images in Named_Logos
- MENU/OZONE: Add Selenium theme for Ozone
- MENU/OZONE: Touchscreen improvements
- MENU/OZONE: Add a touch-sensitive Resume button in the lower right corner
- NETPLAY: Add East Asian relay server
- OVERLAY: Add option to load overlay based on system name
- PS2: Fix several broken cores depending on pthread
- QT: Enable building with Qt6
- QT: Fix input panel
- RECORDING: New WAV recording driver (audio only)
- REMOTE RETROPAD: Add gyro/acceleration/light sensor test screen
- REMOTE RETROPAD: Add pointer test screen
- REPLAY: Replay format extended to support external tools
- TVOS: Support bluetooth keyboards on tvOS
- TVOS: Fixes to run correctly on TVOS13
- TVOS: Better handling of Siri remote
- TVOS: WebDAV server for adding files more easily
- TVOS: Add Settings.app option to reset retroarch.cfg
- TVOS: Bring minimum tvos version down to 13.0
- VIDEO: Show and use exact refresh rate (3 decimals) and interlace/doublestrike where available
- VIDEO: Allow setting viewport bias to offset viewport horizontally/vertically
- VIDEO: Support viewport bias also with integer overscale and custom aspect ratios
- VIDEO: Use shader path from CLI for shader cycling
- INTL: Add Galician and Norwegian to list of languages
- LAKKA: Display reboot/shutdown message also when not saving config on exit
- LAKKA: Provide update URL and target name at buildtime
- LIBRETRO: Add a debug message for the SET_ROTATION callback
- macOS: Default Accessibility on if VoiceOver is on
- iOS: default audio sync on again, also more mfi logging
- iOS: Fix Import Content
- iOS: Fix ios-arm64 nightly build crash
- iOS: Import content from iCloud
- iOS: Fix #16485 crash on startup
- iOS: Display app icon in app icon picker in materialui
- iOS/tvOS: Various QoL improvements
- iOS/tvOS: Fix a couple more path name mangling bugs
- iOS/tvOS: Better way of packaging Frameworks
- iOS/tvOS: define PACKAGE_VERSION to be App Store MARKETING_VERSION
- iOS/tvOS: Fix keyboard handling for app store builds
- iOS/tvOS: Fix escaping the sandbox for jailbroken devices
- iOS/tvOS: default accessibility on if voice over is enabled
- iOS/tvOS: better way of reporting available memory
- macOS/iOS/tvOS: enable text-to-speech using AVSpeechSynthesizer.
- tvOS: Fix scaling for 720p
- MENU: New function in Quick Menu: Add to Playlist
- MENU/XMB: New theme: FlatUX, designed to merge FlatUI and Retroactive themes into a single, unified design
- NETWORKING/RETROPAD CORE: Fix socket close method
- PIXMAN: Update pixman-private.h - patch to fix build issue with musl
- PLAYLIST: Cleanup 'Add to Playlist' (#16495)
- SCANNING: Fix for scanning PSP ISOs (and probably few others)
- SAVES: Fix core config saving
- SAVES: Fix save new config name when core loaded
- SAVESTATES: Increase save state chunk size for all platforms - Even a class 6 or class 10 SD card can handle reads and writes on the order of MB/s, which means a 4KB chunk size is just wasting time in syscalls. This could maybe be fixed with a buffering reader but I don't feel comfortable tweaking libretro-common's VFS to handle that. Instead, I thought it would be good to both remove an ifdef and increase the chunk size to 128KB. For cores with small states this will should make state saving virtually instantaneous, and for cores with large states it should be a 32x speedup.
- VIDEO: Fix crash when using threaded video - for Mesa 23.2 and later
- VIDEO/GL: Fix reinitialization of the threaded gl drivers
- VIDEO/VULKAN: Add support for A2R10G10B10 HDR format
- VIDEO/VULKAN: Implement HDR readback - screenshot support
- WAYLAND: Ignore configure events during splash (fix not remembering window size)
- WAYLAND: Use frontend signal handler to quit (fix quit by window close)
- WAYLAND: Commit viewport resizes (window resize is more responsive)
- UWP: Align MESA to alpha-2-resfix - Remove wrong resolution special handling for OPENGL
- UWP: 4K fix: align MESA reading of ClientRect to retroarch procedure, this fixes max resolution being set to 1080p. As reading must be done inside an UI thread and is in fact an async operation which might delay frame generation, the reading itself is doen once and cached, give that changing resolution while the app is running is an unlikely corner-case use
- WINDOWS: Windows mouse ungrab must release the mouse instead of confine it to the current desktop (#16488)
- WINDOWS: Fix numlock/pause key release events
# 1.18.0
- AI: Fix narrator language when AI translation and menu languages are different
- DISK CONTROL: Add option to disable initial disk change
- DISK CONTROL: Visibility option for disk control notifications
- DRM: Fix mode vrefresh calculation. When using an interlaced/doublescan mode, the vertical refresh rate is mis-calculated.
- EMSCRIPTEN: Fix mouse Y parameter translation in rwebinput
- INPUT: Fix input state combos including R3 and false triggers of RETROK_UNKNOWN
- INPUT: Add a new turbo mode, "Classic (Toggle)"
- INPUT: Fix bind hold when axis does not rest at 0
- INPUT: Limit axis threshold setting to sensible values
- INPUT: Add Overlay Mouse, Lightgun, and Pointer
- INPUT/ANDROID: Fix mouse grab behavior on Android
- INPUT/LINUXRAW: Fix device name and hotplug reconnect
- IOS: Minor iOS JIT availability information
- IOS/TVOS: Pause application on applicationWillResignActive
- LIBRETRO: Add Doxygen-styled comments to parts of the libretro API
- LUA: Update Lua to version 5.3.6
- MENU: Add sublabels for input bind common entries
- MENU: Don't load history and favorites if size is 0
- MENU: Don't disable fast forward when entering menu
- MENU: Reorder and reduce depth of User Interface menu
- MENU/OZONE: Fix sidebar wraparound, visibility after config load, crash after playlist delete
- MENU/OZONE: Fix sidebar and sublabel animations
- OSX/MACOS: Fix crash on non-Metal build
- OSX/MACOS: Add portable.txt as flag for portable install
- REMOTE RETROPAD: add display for analog axes, indication of inputs already pressed
- SAVES: Allow combining saves in content dir with save sorting
- SHADER: Added rolling scan line simulation based on the shader subframe feature. This is implemented with a scrolling scissor rect rather than in the shader itself as this is more efficient although may not work for every shader pass - we may need an option to exclude certain passes. The implementation simply divides the screen up by the number of sub frames and then moves the scissor rect down over the screen over the number of sub frames
- TVOS: Force asset re-extraction when cache is deleted
- TVOS: Add history and favorites to Top Shelf
- TVOS: Fix crash when history item does not have a label
- UWP: Enable HAVE_ACCESSIBILITY for UWP builds
- UWP: Allow UWP build to work with a modified version of Mesa Gallium D3D12
- VIDEO: Add subframe shader support for Vulkan/GLcore/DX10-11-12, enabling shaders to run at higher framerate than the content
- VIDEO: Fix restoring fullscreen/windowed setting when unloading override
- VIDEO/VULKAN: Fix HDR with Vulkan after reinit
- VIDEO/VULKAN: Remove the use of oldSwapchain
- VIDEO/GL2: Fix OpenGL ES version detection
- WEBDAV: Fixed SEGFAULT in WebDav task sync + type changes
- WEBOS: Fix build, add core location on webosbrew.org
- WIN32: Fix Alt+Enter not working when menubar is disabled
# 1.17.0
- ACCESSIBILITY/TTS: fix target language and missing espeak handling on Linux
- AI: AI service reworked: performance increase, automatic translation, configurable subtitle placement, and more
- APPLE: Fix WebDAV crash with digest auth (Cloud Sync)
- APPLE: Cloud sync fixes - ignore .DS_Store files and re-sync on app foreground
- APPLE: Don't re-create default directories
- APPLE: Show Git information correctly
- AUDIO/SYNC: Handle Hz skew adjustment for high refresh rates better (BFI, swap interval)
- AUDIO/MIXER: Separate ffmpeg/mpv and audiomixer conditionals
- AUDIO/WASAPI: Reworked shared buffer operation for more flexibility, fixed exclusive mode last buffer looping when entering menu
- CONFIG/OVERRIDES: Fix setting savefile_directory in override file
- CONFIG: Force fixed locale for numbers
- CHEEVOS: Upgrade to rcheevos 11.0
- CHEEVOS: Use rc_client for state management
- CHEEVOS: Don't track disc changes when achievements are disabled
- CHEEVOS: Reinitialize rewind buffer after loading game with achievements
- CHEEVOS: Inform user when server is unreachable
- CHEEVOS: Fix crash on first load of game with achievements with threaded video
- EMSCRIPTEN: Increase chunk size for reads/writes
- EMSCRIPTEN: Modularize the JavaScript and clean up the web build
- EMSCRIPTEN: Prefix core name with libretro_ for exports
- EMSCRIPTEN: replace dashes with underscores in corenames (fix for vitaquake cores)
- EMSCRIPTEN: Use ZipFS for web player asset bundle
- EMSCRIPTEN: Change default audio rate to 44100
- IOS: Fix widget on IOS17
- IOS: Exit instead of crash on some errors
- IOS: Fix ios-vulkan-ppsspp
- IOS: Enable HDR support on IOS
- IOS: Add option to disable respecting silent mode
- IOS: Allow ignoring safe area (fullscreen over notch)
- IOS: Default to not enabling keyboard gamepad
- IOS: Fix XRGB8888 in GL driver
- IOS: Allow changing the app icon
- IOS: Add HAVE_ACCESSIBILITY to iOS builds
- IOS/TVOS: Create GL context as GLES3 to fix some rendering performance problems
- INPUT: Fix ghost input when setting RETROK_UNKNOWN
- INPUT: Default 'Bind Hold' to 0 to prevent problems with controllers not resting at null state
- INPUT: Add a setting to allow turbo d-pad directions
- INPUT: Don't save mouse buttons to autoconfig
- INPUT/MENU: Add option for merging 'Hotkey Enable' device types
- INPUT/mFI: disable secondary_joypad to prevent issues with controllers detected both as HID and mFI
- INPUT/UDEV: Change event detection to polling in udev_joypad
- INPUT/WAYLAND: Use unaccelerated pointer motion to prevent mouse dead zone
- LAKKA: Add new menu options for Switch (overclock, CEC, BT ERTM)
- LIBRETRO: Add environment command to get playlist path
- LIBRETRO/NETPACKET:
Switch environment call number from 76 to 78 (retire 76 as it was never used by any core)
Simplify broadcasts by removing the option to send to all but one client, use an explicit RETRO_NETPACKET_BROADCAST constant instead
Separate explicit flushing and querying of incoming packet into two operations
Enable a core to specify a protocol version string which can get used instead of core version to determine compatibility between two players
Log and notify a separate message when there is a content crc mismatch while using this interface to convey it being less severe
- MENU: Fix menu analog stick navigation (1.16.0.1)
- MENU: Add option to find thumbnail images by playlist rom filename (1.16.0.2)
- MENU: Don't process menu events while input is being flushed (1.16.0.2)
- MENU: Prevent proceeding to next bind when single binding (1.16.0.3)
- MENU: Fix touchscreen menu false positives in case of overlap
- MENU: Sort playlists ignoring extension (Playstation 2 should come after Playstation)
- MENU: Treat System Volume Information folder as hidden on all platforms
- MENU: Add Belarusian language option
- MENU: Fix savestate thumbnail behavior when navigating back to playlist while content is still running
- MENU: Fix word wrapped widget length
- MENU: Add help text to controller drivers
- MENU: Fix quit on content close option
- MENU: Fix thumbnails in History for content loaded through Load Content
- MENU: Flexible thumbnail matching (ROM name - database name - short name)
- MENU: Remove legacy thumbnail pack downloader
- MENU/GLUI: Icon corrections
- MENU/OZONE: Thumbnail related fixes (missing thumbnail bar, fullscreen thumbnail flashing, sidebar focus)
- MENU/RGUI: Fix text scaling in 16:9
- MENU/XMB: Background images take precedence over color themes, default image opacity set the same as color theme opacity
- MENU/XMB: Fix segmentation fault when background image is missing
- PATCHES: Add support for XDelta-formatted patches.
- PATCHES: Fix patching for cores that support contentless mode
- PS2: Fix for no sound
- PS2: Fix 0-byte logs and add memory stats
- PSP: Fix memory leak in audio driver
- RUNLOOP: Frame Rest, experimental sleep feature aiming to lower CPU usage and temperature when using certain CPU hungry vsync modes
- RPI: Fix videocore + switchres compile failure
- SCAN: Do CRC check on PSP/PSP(PSN) content
- TVOS: Enable overlay support
- VIDEO/BFI: Black Frame Insertion added to DirectX10/11/12. BFI Hz range now covers every 60hz multiple under 1000hz. Variable Strobe length via new 'Dark Frames' option, algorithm to auto select 'decent' Dark Frames choice.
- VIDEO/GLSL: Add FinalViewportSize support to GLSL
- VIDEO/GLSL: Change rotation type to int to maximize compatibility
- VIDEO: Use video refresh rate instead of core refresh rate for menu frame limiting
- VIDEO: Limit paused video refresh rate
- VIDEO: Enforce swap interval 1 in menu if vsync is on
- WII: Enable Cheevos for Wii builds
- WIIU: Fix config file and core info reading
- WIIU: Fix "Up" and "Left" directional input for both Analog sticks for GC Adapter
- WIIU: Fix 3 USB controllers (NES/SNES/Retrode)
- WIIU: Fix file descriptor leak
- WIN32: Prefer D3D11 and WASAPI as default video and audio drivers
- WIN32: Fix window size when aspect ratio is < 0
- WIN32: Fix screen resolution always tied to the main monitor
- WAYLAND: Enable fallback for screensaver inhibit via D-Bus
- WAYLAND: Introduce wp_fractional_scale_v1 protocol for proper fractional scaling
- WAYLAND: Update wayland-protocols version to 1.31
# 1.16.0
- 3DS: Update __system_initArgv
- 3DS: Update SquirrelJME 3DS Core information along with icons.
@@ -24,6 +615,7 @@ require fullpath or not, small and big ZIP files).
- APPLE: Don't include MoltenVK library in Load Core menu list
- APPLE: Enable AltServer JIT for builds installed by Xcode
- APPLE: The default pthread stack size on Apple is too small for detect_ps2_game, so increase it
- APPLE: Introduce Cloud Sync via a WebDAV service on iOS/TVOS/MacOS
- CHEEVOS: Upgrade to rcheevos 10.7
- CHEEVOS: Don't initialize rcheevos memory unless used
- CHEEVOS: Add progress tracker widget
@@ -64,7 +656,7 @@ require fullpath or not, small and big ZIP files).
- INPUT/REMAP: Remap label fix when no autoconf profile active
- INPUT/REMAP: Add 'Save As' option for remaps and overrides
- INPUT/OVERLAY: Add overlay parameter to control x/y separation in auto-scale mode
- MOBILE: On mobile in portrait mode, don't override custom viewport
- NETWORKING: Enhance netpacket interface
- 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
@@ -384,7 +976,7 @@ after the current event handler, which then did exactly the same. Fixes issue #1
- STATICALLY LINKED/SALAMANDER: Fix salamander config save on fork for static platforms
- TVOS/VULKAN/MOLTENVK: Vulkan on tvOS
- 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: Fix crash when using multiple physical devices and HW core (#14889)
- VULKAN: Fix crash when using multiple physical devices and HW core (#14889)
- VULKAN: Detect if wrong PhysicalDevice is returned.
- VULKAN: Actually query physical device before creating core device.
- VULKAN: Define and implement v2 of context negotiation interface
@@ -416,7 +1008,7 @@ So this removes the artificial clamping that was being done to desired_swapchain
- CLI: Reformatted --features to require less rows and to be more consistent
- CLI: Added -V shorthand for --version
- CLI: Tab removal + whitespace nits
- CONFIG/MIDI: Prevent MIDI startup error with old configurations
- CONFIG/MIDI: Prevent MIDI startup error with old configurations
- D3D11: Fix when using shaders with TATE mode arcades etc
- D3D12: Fix when using shaders with TATE mode arcades etc
- D3D12: Added support for break on errors (development aid - define DEVICE_DEBUG to use)
@@ -473,7 +1065,7 @@ menu_explore_get_entry_playlist_index() returns -1 on invalid entries, but the v
- OSX/MACOS: Fixed Cocoa keyboard not allowing to map Analog stick
- PS2: Use the recently created ps2_drivers which makes easier the loading and init of all the drivers: Memory Card, USB, HDD, Audio, Controllers
- PS2: Adds exFat support for USB, and probably solves some unexpected issues when using an HDD driver for booting cores/games.
- SDL GFX: Fix no menu on start/blank screen issue.
- SDL GFX: Fix no menu on start/blank screen issue.
- SRAM: Don't init SRAM saving without content (gets rid of the redundant logging)
# 1.13.0
@@ -565,7 +1157,7 @@ If there is no thumbnail with title, find the thumbnail image with rom-name. Thi
- MIST/STEAM/STEAMDECK: Don't expose Black Frame Insertion (BFI) if we are running on a Steam Deck
- NETWORKING/WINDOWS: Disable poll support for MSVC 2010 and earlier. WSAPoll is not supported on Windows XP and earlier.
- NETWORKING/WIIU: Fix socket_connect_with_timeout for WIIU
- NETWORKING/WIIU: Fixes RetroAchievements login
- NETWORKING/WIIU: Fixes RetroAchievements login
- NETWORKING/WIIU: Fixes other online updater functionality
- 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.
@@ -589,7 +1181,7 @@ If there is no thumbnail with title, find the thumbnail image with rom-name. Thi
- 3DS: Only enable internal counter with CONSOLE_LOG defined
- 3DS: Set default bottom font values
- 3DS: Fix CIA installation issues
- 3DS: Support latest libctru
- 3DS: Support latest libctru
- ANDROID: Add HAVE_ACCESSIBILITY
- ANDROID: Gingerbread support
- ANDROID: Touchpads support
@@ -666,7 +1258,7 @@ prevents it from being overwritten/deleted while the program is still running.
- MENU: Allow changing savestate slots with left/right on save/load
- MENU: Add 'Ago' to playlist last played styles
- MENU: Add proper icons for shader items
- MENU/MATERIALUI: Add icon for 'Download Thumbnails'
- MENU/MATERIALUI: Add icon for 'Download Thumbnails'
- MENU/XMB: Add options for hiding header and horizontal title margin
- MENU/XMB: Dynamic wallpaper fixes
- MENU/XMB: Add Daite XMB Icon Theme
@@ -708,7 +1300,7 @@ prevents it from being overwritten/deleted while the program is still running.
- 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: 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
RetroArch is a frontend for the libretro API. The main functionality is fulfilled by invoking other binary libraries ("cores") which are not restricted by RetroArch in any way. Cores are able to read/write/delete files, spawn processes, communicate over the network. Also, source for cores is not necessarily in control by libretro team, and core binaries / RetroArch binaries are not signed. For this reason, it is a bad idea to use RetroArch or any other libretro frontend on security critical systems.
Also, RetroArch and cores have been packaged in several ways. Content on the [official download site](https://buildbot.libretro.com/) is built from a direct mirror of the original RetroArch and core repositories, no binaries are reused. Note that source for the core repositories may be outside libretro team control.
## Supported Versions
For most delivery channels, libretro team does not have control over the version. The exceptions are:
- note that Google Play Store version is years behind and can not be updated
You may report vulnerability against any recent version, but be reasonable.
## Reporting a Vulnerability
Please report security vulnerabilities at libretro@gmail.com
## Possible remediation
Due to the variety of delivery channels, RetroArch team can not recall any given version universally. Security fixes are accepted for next release, and notice may be posted in the channels controlled by RetroArch team, depending on the severity assessed by RetroArch team.
Loaded 100 of 1614 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.