Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

crt-beam-simulator shader causes constant frame time spikes accompanied by severe flickering #17341

Open
2 tasks done
EeK9X opened this issue Jan 3, 2025 · 4 comments
Open
2 tasks done

Comments

@EeK9X
Copy link

EeK9X commented Jan 3, 2025

Is there an existing issue for this?

  • This is a bug in RetroArch frontend
  • I have searched the existing issues

Description

Loading the crt-beam-simulator shader preset causes frame time spikes at a constant and frequent interval (every half second or so), and each spike is accompanied by severe screen flickering (not just regular BFI flicker, but a full-on black screen flash).

The result of these frame time spikes is that the frame rate, otherwise perfectly locked to 120 on my 7800X3D/4090 system, also dips by 1, to 119 fps, with every single spike.

This happens with shader sub-frames correctly set to 2, as my display's refresh rate is 120Hz (LG C9 OLED TV). And it only happens after the crt-beam-simulator shader is loaded.

Other shaders (like crt-royale, for scanlines) do not cause the issue, and it also doesn't occur until a few seconds after the crt-beam-simulator shader is loaded. Changing any settings via the menu seem to cause the issue to stop for a few seconds (three to four), until it starts happening again.

I've seen hardware BFI at 60Hz and 120Hz, and the level of flickering is nowhere near what's being shown by RetroArch with crt-beam-simulator. And, as mentioned, it only happens when the frame time spikes start occurring.

Here are two screen caps showing RTSS's frame rate and frame time graph:

This is with no frame rate cap via RTSS or other external, third-party software (hard to notice the spikes, as the frame time line is all over the place);

This is with the frame rate capped to 120 via RTSS (notice the perfect flat frame time line, with tiny bumps caused by crt-beam-simulator).

I've tried disabling all background apps and processes, but the issue still occurs. All RetroArch settings were left at default. I've tested with bsnes and Snes9X cores, same behavior in both. Also tested with Vulkan and D3D12 APIs - again, no change.

Expected behavior

No frame time spikes are expected and the frame rate should remain constant even after loading the crt-beam-simulator shader.

Steps to reproduce the bug

  1. Load a game;
  2. Load the crt-beam-simulator shader;
  3. Wait a few seconds, screen starts flickering like crazy and the frame time spikes occur every half second or so.

Version/Commit

1.20.0

Bisect Results

No response

Check in the nightly version

Yes, this is reproduced in the nightly build

Platform & operating system

Windows 11 23H2

Affected Cores

bsnes, Snes9X, likely others

Environment information

4090
7800X3D
64GB DDR5 6000

Relevant log output

No response

@hizzlekizzle
Copy link
Contributor

Have you tried turning off RTSS and using RetroArch's own vsync to see if that makes a difference? Also, have you tried any of the other BFI shaders to see if they have the same spikes?

@EeK9X
Copy link
Author

EeK9X commented Jan 4, 2025

Have you tried turning off RTSS and using RetroArch's own vsync to see if that makes a difference? Also, have you tried any of the other BFI shaders to see if they have the same spikes?

Yes, I've tried completely shutting down both MSI Afterburner and RTSS, while using RetroArch's own VSync (which cannot be disabled when selecting shader sub-frames - required for the subframe-bfi shaders).

Of all the shaders in the subframe-bfi folder, the only one (aside from motionblur-test, which works for its intended testing purposes) that doesn't cause the issue (frame time spikes accompanied by severe screen flickering) is bfi-simple. But that one doesn't appear to be doing anything, either. It doesn't even reduce the overall brightness, like BFI tends to do.

120hz-safe-BFI, 120hz-smart-BFI and crt-beam-simulator all produce the unintended behavior described in my initial post.

@rzumer
Copy link
Contributor

rzumer commented Jan 5, 2025

FWIW I tested this today on a fresh install of the latest nightly, have a similar setup with a 3080 12GB, 7700X, and LG C3 at 4K/120Hz with 2 subframes. Used the Vulkan renderer and didn't see anything like this in Mesen or bsnes cores, it seemed to work as expected besides some weird interactions with other shaders.

@EeK9X
Copy link
Author

EeK9X commented Jan 5, 2025

FWIW I tested this today on a fresh install of the latest nightly, have a similar setup with a 3080 12GB, 7700X, and LG C3 at 4K/120Hz with 2 subframes. Used the Vulkan renderer and didn't see anything like this in Mesen or bsnes cores, it seemed to work as expected besides some weird interactions with other shaders.

Thanks for chiming in. I'd first tested on the 1.19.0 and then, before reporting this issue, again on the recently released 1.20.0 - both clean installs, both with the same issue.

To expand on it, I've noticed that I can't get a proper flat frame time line in RetroArch even without the BFI shaders (those only seem to aggravate the issue and cause additional flickering). Enabling shader sub-frames by itself, without any shaders, already seem to cause the mess in frame times (with FPS constantly switching between 120 and 119) shown in one of the images in the OP.

The closest I can get to a constant 120 and an almost perfectly flat frame time line is by either capping the FPS externally (using RTSS), to 120, and then enabling shader sub-frames; or by using RA's own VSync combined with its VRR solution ("sync to exact content framerate").

In both cases, as soon as I make the changes, the FPS is locked to 120 or 60, respectively, and the frame time line remains flat... for about four or five seconds. Then, a minuscule spike starts showing up every two and half seconds, on the dot. Plus, in the instance of 120Hz refresh (with shader sub-frames enabled and external 120 cap), the frame rate flips back and forth constantly between 119 and 120.

Tl;dr: the main issue is getting proper locked frame rates and frame times, without any spikes (which can be tiny or massive, depending on the configuration, causing additional flickering) and the constant switching between the max refresh rate/fps and one frame below.

If I solve this, I'm sure I'll be able to use the BFI shaders without the dreaded flickering, as it is definitely related to the frame time spikes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants