An input lag investigation

Typical users will benefit from fixing the input latency bug which makes many games unplayable. And the msu1 system requires special setup that typical users will not use, so it is better to fix the snes emulation/latency first and then work next on the msu1 system and its interaction with retroarch.

“unplayable” is hyperbole of the highest order. Very few people have complained about the single frame of extraneous latency in the 11 yrs bsnes has been around and in the 5+ years RetroArch has been around. OTOH, MSU1 is a flagship feature of bsnes and one of the main reasons people use it over snes9x.

If you guys value that one frame of extraneous latency over MSU1 support, you’re welcome to enable the option and compile your own copies of the core while we look for a proper solution to the serialization issue(s). In the meantime, snes9x/next doesn’t appear to have any issues with brunnis’ patches, so if latency is your biggest concern, just use it instead.

As long as one of them (Snes9X) has this fix inclided in mainline updates, awesome :slight_smile:

What about FCEUmm? It’s mentioned on the 1.3.5 post (now 1.3.6, for some reason). Does the regular FCEUmm include the lag fix now? (By regular, I mean the one provided by the online updater)

I believe I’ve found and fixed the issue. Please see pull request:

Hey, that’s great, Brunnis. Thanks for your continued attention and contributions on this.

Would it be possible to have a compiled .dll bsnes / bsnes-mercury with the lagfix ON, in order to test MSU-1 games with the latest commits? Unfortunately I lack any means to build it by myself as of now, but I would love to give it a try.

As usual, many thanks in advance. :slight_smile:

Please turn on the lagfix in libretro-bsnes so that others may test Brunnis’ input latency and serialization bug fixes. Work should be an open libretro community effort as the developers posted on the blog.

Sorry for adding this noise but : thanks a lot to all involved :slight_smile:

@Sam33 We’ll run our projects how we see fit, thankyouverymuch.

Anyway, here are a couple of builds with it turned on for testing:

Thanks everyone! Nice to be able to contribute. :slight_smile:

The fix is now in the latest nightly RetroArch build here: http://buildbot.libretro.com/nightly/windows/x86_64/

I just saw that the lag fix was re-enabled on both bsnes and bsnes-mercury, so it should soon be in the nightly core builds as well. It would be great if you guys could help out with additional testing, both with/without rewind enabled and on games with/without MSU-1 hack.

By the way, hunterk, I noticed that only the bsnes-mercury core in the zip file you posted has the lag fix enabled.

/shrug, I just git-pulled and changed ‘lagfix’ in the makefile to 1. I didn’t check to see if there was anything missing/required.

Okay, strange… I just made a fresh git clone and managed to compile all core variants with and without the lagfix and could confirm that the lag fix indeed works. Anyway, the code in the repo seems fine, so let’s not dwell on that.

I’ve compiled all bsnes and bsnes-mercury variants (for 64-bit) with and without the lagfix and provide a download link below. I’ve tested them all and confirmed that they work as expected. I’d be grateful if you guys would use them together with the latest RetroArch nightly to provide some more test results and confirmation that things now work as expected (i.e. without crashes).

bsnes_64bit.zip

I’ve performed tests on MegaMan X (MSU-1) and SMW2 (no MSU-1) in both RetroArch 1.3.4 and the latest nightly with the savestate fix. All tests were done with rewind enabled. I tested both bsnes and bsnes-mercury, but the results were exactly the same.

RetroArch 1.3.4, lag fix off

Accuracy:

  • SMW2: OK
  • MM X MSU-1: OK

Balanced:

  • SMW2: OK
  • MM X MSU-1: OK

Performance:

  • SMW2: Crash immediately on start
  • MM X MSU-1: Crash on entering title screen

RetroArch 1.3.4, lag fix on

Accuracy:

  • SMW2: Crash immediately on start
  • MM X MSU-1: Crash on entering title screen

Balanced:

  • SMW2: Crash immediately on start
  • MM X MSU-1: Crash on entering title screen

Performance:

  • SMW2: OK
  • MM X MSU-1: OK

RetroArch 1.3.6 + savestate fix, lag fix off

Accuracy:

  • SMW2: OK
  • MM X MSU-1: OK

Balanced:

  • SMW2: OK
  • MM X MSU-1: OK

Performance:

  • SMW2: OK
  • MM X MSU-1: OK

RetroArch 1.3.6 + savestate fix, lag fix on

Accuracy:

  • SMW2: OK
  • MM X MSU-1: OK

Balanced:

  • SMW2: OK
  • MM X MSU-1: OK

Performance:

  • SMW2: OK
  • MM X MSU-1: OK

So, as expected, the crash could occur even without MSU-1 or the lag fix. Also as expected, the fix seems effective for all of the observed failure cases. This issue must have caused crashes here and there for a long time…

[QUOTE=Brunnis;42871]

  • KMS + experimental OpenGL driver on Raspberry Pi[/QUOTE]

About this one, I have yet to upload the system image so you can easily test, Brunnis, but I am on a far off village right now, without a Raspberry Pi at hand or it’s SD, so I won’t be able to upload it for 1-2 weeks. Should have done it before I left my hometown, but I had no time. In case you want to try yourself, disable X11 server in Raspbian, and pass the overlay parameter I told you about in config.txt.

[QUOTE=vanfanel;42882]About this one, I have yet to upload the system image so you can easily test, Brunnis, but I am on a far off village right now, without a Raspberry Pi at hand or it’s SD, so I won’t be able to upload it for 1-2 weeks. Should have done it before I left my hometown, but I had no time. In case you want to try yourself, disable X11 server in Raspbian, and pass the overlay parameter I told you about in config.txt.[/QUOTE] No worries, I should be able to get this up and running myself. However, I probably won’t have any time for this during the coming two weeks. I’ll let you know then if I run into any problems.

Amazing work. I just have to ask… Did byuu seriously just ignore this post of yours? I know it’s a bubble over there, but I’m still quite blown away if he didn’t at least PM you a sincere response…

Yep, he just ignored it. I thought I was being pretty polite, forthcoming and had some interesting test results, but apparently it wasn’t worth bothering with. It’s almost comical how that thread managed to exceed my very worst expectations, with a pretty bloated discussion that quickly veered off course and was then ignored. Now that I’ve looked a lot more into this, I realize that my initial four questions in that thread should have been pretty easy to answer in a succint way.

EDIT: Ohh, and thanks for the compliments! :slight_smile:

Heh, incredible… I think the worst part may be that no one else challenged him to respond. I know there are many people there interested in decreasing input latency.

Now, please, don’t give me any reason to visit that place again. :stuck_out_tongue:

I think he basically sees certain keywords and then puts on blinders. libretro, latency/lag, a few others. He apparently feels like there’s no possibility of new information in these areas, so it’s not worth his time to consider it.

I’ve been reading through this thread, and I’m seeing quite a bit of testing data. Unfortunately, what I don’t see is information about how to set some of the variables used during testing (such as enabling dispmanx) on my Pi.

To start, how do I enable dispmanx, and how/should I set the frame delay for the NES emulator? Thanks!

Hi. I don’t have much to add but thought you might like to know that the same reordering of polling code to fix lag was discovered independently in the Provenance emulator for tvOS and iOS:

Anyway, thanks for your work!