814 Commits

Author SHA1 Message Date
Bernhard Schelling
b725de086e
Fix netplay when using core netpacket interface after a recent change made for cheevos (#17619) 2025-02-23 04:26:02 -08:00
Joe Osborn
56014a27d6
Enable pthreads on Emscripten (#17586)
* 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/23518
https://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
2025-02-20 00:59:25 +01:00
LibretroAdmin
d2d0e7a17d Style nits 2025-02-12 10:35:04 +01:00
LibretroAdmin
a9a9075f5f (Qt) Cleanups 2025-02-10 23:06:32 +01:00
LibretroAdmin
b211adaaca Function argument name standardization 2025-01-17 19:55:32 +01:00
LibretroAdmin
31b7812720 Function argument name standardization 2025-01-17 04:16:12 +01:00
Jamiras
0113226936
(cheevos) include achievement state in netplay states (#17416)
* 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
2025-01-16 20:00:02 +01:00
LibretroAdmin
1e656261b0 Local len variables need to have '_' prefix 2024-12-30 14:03:58 +01:00
LibretroAdmin
18c85b5ccd Cleanups -
* 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
2024-12-27 15:13:45 +01:00
libretroadmin
700b13654c Some string cleanups 2024-12-25 19:18:45 +01:00
libretroadmin
82e4504968 Revert "(pt. 2) static variables are initialized to '0' automatically as per C rules"
This reverts commit 47410df7a3d2480dd8fc7fb97cf00319ce5e9344.
2024-11-19 03:03:05 +01:00
libretroadmin
47410df7a3 (pt. 2) static variables are initialized to '0' automatically as per C rules 2024-11-18 15:59:46 +01:00
bulzipke
d5c6a4f997
Add east asian relay server (#17055) 2024-10-01 17:36:58 -07:00
Viačasłaŭ
3019b926c2
Fix typos (#17068) 2024-10-01 17:36:33 -07:00
libretroadmin
e279592ce6 Cut down on some snprintf calls 2024-06-15 01:29:08 +02:00
Eric Warmenhoven
79e43e2bd4
Fix many warnings (#16180)
Also change iOS/tvOS to use system zlib instead of compiling it in
2024-01-31 09:15:14 -08:00
Bernhard Schelling
e796716f57
Netplay netpacket interface fix "Sort Save States into Folders" settings (#16019)
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
2023-12-20 16:23:28 -08:00
Bernhard Schelling
f029b41a74
Netplay netpacket connection flow improvements (#15986)
- 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
2023-12-09 04:48:36 -08:00
Jamiras
bbe7afcd82
(cheevos) use rc_client for state management (#15912)
* use rc_client for achievement processing

* log disconnect/reconnect messages

* address compiler warnings

* address c89 warning

* address c89 warning
2023-11-15 13:18:20 -08:00
Bernhard Schelling
107283edc8
Updates to the netplay netpacket interface (#15887)
* 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
2023-11-09 16:36:08 -08:00
Bernhard Schelling
d096effe7f
When using the new core netpacket interface for netplay, don't synchronize the host SRAM to a joining client (#15797)
Fix netplay connection not getting marked as reusable while the new core netpacket interface is enabled
2023-10-13 10:53:22 -07:00
libretroadmin
94accbb6ef Nits 2023-08-30 06:36:38 +02:00
libretroadmin
5f94f36204 Explicit typecasts to bool 2023-08-16 17:10:59 +02:00
libretroadmin
c8e6506687 Fix --disable-menu errors 2023-08-14 23:36:19 +02:00
libretroadmin
bd090dea71 Replace more strlcat calls 2023-07-16 18:07:49 +02:00
libretroadmin
74959de48e Silence warning 'rv might be uninitialized' 2023-07-15 09:28:21 +02:00
Eric Warmenhoven
b1fdbb9a37 netplay discovery through bonjour/mdns 2023-07-15 08:25:27 +02:00
libretroadmin
cd8fffe5d3 Rename all local variables for retro_system_info to sysinfo 2023-07-15 07:45:20 +02:00
Bernhard Schelling
4d8f0215d1 Fix netplay default modus
Also add optional assertion code that can be enabled to validate the netplay frontend logic
2023-06-29 18:38:58 +02:00
Bernhard Schelling
67836c144e Do nothing if the same interface gets set twice 2023-06-29 13:55:14 +02:00
Bernhard Schelling
5b1e28843e C90 fix 2023-06-29 13:55:14 +02:00
Bernhard Schelling
5342d4ff63 Remove invalid test assert macro 2023-06-29 13:55:14 +02:00
Bernhard Schelling
e8283363fb Enhance netpacket interface
- Enable core host to refuse connecting new players to limit the number of connected players
- 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)
2023-06-29 13:55:14 +02:00
Bernhard Schelling
2546ac6bbc Change tab to spaces 2023-06-29 13:55:14 +02:00
Bernhard Schelling
6ccef38fea Enable clients to send netpackets to other clients 2023-06-29 13:55:14 +02:00
Bernhard Schelling
eceb712ca9 C89 fix 2023-06-29 13:55:14 +02:00
Bernhard Schelling
e2621a8474 Add enum netplay_modus 2023-06-29 13:55:14 +02:00
Bernhard Schelling
9de805c9b1 Clarify netpacket interface handling code
Reduce access to networking_driver_st global variable
2023-06-29 13:55:14 +02:00
Bernhard Schelling
20bb335017 C90 fix 2023-06-29 13:55:14 +02:00
Bernhard Schelling
c60878a10d Add netpacket interface
Adds a new libretro interface for a core to send and receive custom network packets for implementing a communication based multiplayer system instead of using the default state serialization based multiplayer. Connection management is still done by the frontend while a core gains the ability to easily support tunneling of multi-console data communication traffic.
2023-06-29 13:55:14 +02:00
libretroadmin
e8242253a7 Reduce strlcat calls where possible 2023-06-19 06:00:10 +02:00
libretroadmin
fc06e2f84f Simplify core_serialize_size and core_serialize_size_special 2023-06-16 17:20:27 +02:00
Grisly Glee
4202f8650d
Fix trivial signedness warnings (#15377)
* Fix trivial signedness warnings

* Followup on trivial signedness warnings
2023-06-14 04:43:11 +02:00
libretroadmin
f0c8008bda Split up runahead into its own file(s) - runahead.c/runahead.h -
by Dwedit's request
2023-01-11 10:19:56 +01:00
neil4
7213aada8d
Add Preemptive Frames to Latency Settings (#14832) 2023-01-10 07:22:14 +01:00
libretroadmin
38bc51f5c2 (config.def.h) only try to include define headers 2022-11-27 22:57:17 +01:00
LibretroAdmin
db6e0b1f42 Removed credits - requested by author 2022-11-01 21:40:13 +01:00
LibretroAdmin
b2e2330ed7 Addendum to prior commit - should be good now 2022-10-31 20:32:11 +01:00
LibretroAdmin
9a3a5688b8 Go about this a better way - the conditionals should now be fixed 2022-10-31 20:23:57 +01:00
LibretroAdmin
cb1b02a1c3 Revert changes to struct - concern trolling over perceived
backwards compat. regression (whether proven or not)
2022-10-31 19:17:05 +01:00