Skip to content

Advertise lower modes - #19062

Draft
digant73 wants to merge 2 commits into
RPCS3:masterfrom
digant73:advertise_lower_modes
Draft

Advertise lower modes#19062
digant73 wants to merge 2 commits into
RPCS3:masterfrom
digant73:advertise_lower_modes

Conversation

@digant73

@digant73 digant73 commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Disclosure: Used Opus 4.8 for instrumenting and analyzing log.

Bug description

cellVideoOutGetDeviceInfo did not advertise the lower standard resolutions (720p/480p) when the video output was configured at 1080p or higher, unlike a real display which reports them in its EDID.

Evidence from the instrumented log at the crash point:
• At 1080p, cellVideoOutGetDeviceInfo returned only 1080 modes:

mode[0]: resolutionId=0x1 (1080)
mode[1..4]: 0xa/0xb/0xc/0xd (1600x1080, 1440x1080, 1280x1080, 960x1080)

No 720 mode.
• The registers at the crash showed the game looking for the 720 mode:

r10: 0xd0020464 -> 02 01 01 02 ...   ; CellVideoOutDisplayMode with resolutionId=0x2 (720)
  r27: 0xd0020428 -> 02 01 00 02 ...   ; same, resolutionId=0x2 (720)
  r3 = 0x0                              ; resulting descriptor is NULL
  0x305edc  lbz r4,0(r3)               ; deref NULL -> crash

The game (Metal Gear Solid V: Ground Zeroes renders at 720p) searched for the 720 mode in the device info. At 1080p it was missing, so the game's internal lookup function returned NULL, and dereferencing it caused the access violation.
This explains:
• why 720p works (the 720 mode is present);
• why adding/removing the 1080 modes (the earlier attempts) changed nothing — the game was not looking for those.

Fix

A real Full HD display also advertises the lower resolutions in its EDID. In rpcs3\Emu\Cell\Modules\cellVideoOut.cpp I added the lower standard modes (720p/480p) to all high-resolution cases (_1080p, _1080i, _720p, _1600x1080p, _1440x1080p, _1280x1080p, _960x1080p), replicating real hardware behavior.

(a mix of the issue and non sense FR request) fixes #17058
fixes #15570
fixes #15464
probably fixes #14786
(used as reference even if prematurely closed without a fix) fixes #14538

@schm1dtmac

Copy link
Copy Markdown
Contributor

Fundamentally the entire TV resolution dropdown needs to be reworked IMO to behave like the Sound Formats settings already does, aka matching PS3 realHW behaviour (where you check off individual modes your TV supports from a list, unless you're on HDMI where it can autodetect the best mode, usually 1080p, and autocheck all lower modes, very similar to the console's and RPCS3's UX for selecting audio formats).

@digant73

digant73 commented Jul 20, 2026

Copy link
Copy Markdown
Contributor Author

Fundamentally the entire TV resolution dropdown needs to be reworked IMO to behave like the Sound Formats settings already does, aka matching PS3 realHW behaviour (where you check off individual modes your TV supports from a list, unless you're on HDMI where it can autodetect the best mode, usually 1080p, and autocheck all lower modes, very similar to the console's and RPCS3's UX for selecting audio formats).

yeah, on real HW the EDID is used to list the supported capabilities. On RPCS3 it is static so I simply needed to provide standard Full HD resolutions supported by games and TV

Comment thread rpcs3/Emu/Cell/Modules/cellVideoOut.cpp Outdated
@woj1993

woj1993 commented Jul 20, 2026

Copy link
Copy Markdown

I', wondering if it won't be better to do a fallback trought cases to not duplicate code

@Kazeira

Kazeira commented Jul 21, 2026

Copy link
Copy Markdown

Fundamentally the entire TV resolution dropdown needs to be reworked IMO to behave like the Sound Formats settings already does, aka matching PS3 realHW behaviour (where you check off individual modes your TV supports from a list, unless you're on HDMI where it can autodetect the best mode, usually 1080p, and autocheck all lower modes, very similar to the console's and RPCS3's UX for selecting audio formats).

Exactly, the resolutions in PARAM.SFO only tell us what is supported without any details, so selecting all the desired output resolutions and having RPCS3 choose the best would be better.
Especially since in some games, even if 1080i/p is supported, it actually isn't the best choice and is used on a real PS3 only when 720p is disabled, sometimes with lower graphics settings.
Making 720p the default option, as it is today, isn't ideal either because some games are designed to run in 1080i/p by default.
But being able to force these "hidden" 1080i/p modes can still be interesting for testing purposes and for the games that adjust their native resolution to the output resolution without any other changes besides realHW performance.

@kd-11
kd-11 marked this pull request as draft July 21, 2026 09:53

@kd-11 kd-11 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We decided long ago to restrict the list on purpose. There are 2 reasons for this:

  1. Isolation. If a game is presenting broken graphics to the user, a single-mode selection allows us to communicate and document known bad resolutions. This is why that knowledge base exists today, we know game X will break if you select resolution Y because we only showed it resolution Y. Selecting 1080p doesn't just mean "maybe give me 1080p", we really wanted it to be 1080p and only 1080p. That's also why the default is 720p.
  2. Games do not always function correctly when unsupported resolutions are selected by users and the game is not expecting them. As you know, there is a serious problem with users conflating the "TV" output resolution and ingame resolution in the general populace too, so once you show them 1080p they'll just go for that.

There's also the firmware issue here - we know games break when modes outside their declared set cause problems, which means the PS3 firmware itself filters out the list, but idk if anyone thoroughly documented that behavior.
This is why I asked that such ideas be put in a discussion ticket first before we move to PRs. While there is a problem here, we don't yet have consensus on a proper stable solution that doesn't also infuriate maintainers with asinine requests about resolution support.

Next actions:

  1. Check real PS3 behavior when a manifest is present. I believe we already did some tests for this but I cannot recall if the results were documented. We really should have a github wiki with all the hardware test results.
  2. If we decide to still proceed with the lower modes, then it becomes a matter of matching VSH behavior. You should not ever send modes that the user did not approve. The user should pick the resolutions from a list like they do on VSH.
  3. If we insist on sending all modes in the manifest to the game, we need a way to stop the user from kneecapping themselves. I don't want to look into issues where end users configure themselves into a terrible experience. This isn't some simple thing like adding a comment to the UI because users don't read them. Previously if you set 1080p and game crashes, reset to default and move on. Now if I select 1080p and 480p and the game launches with problems - ??

If we're going to touch this incredibly thorny aspect of rpcs3, then it has to be done right and in one go.

@kd-11

kd-11 commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

I'll append my personal opinion now below:
For me, it's a question of risk vs reward. What do we gain by adding the full "user pick any and all resolutions" and what do we lose.

Gains:
i - Minor: The user can select 1080p resolution (let's be honest, its the only one affected here in practice) without games rejecting it. The game still won't actually render at 1080p and in every scenario we have 1080p selection is a straight-up downgrade compared to 720p. See losses section.
ii - Minor: The full list of resolutions mimics VSH usage pattern for PS3 enthusiasts.

Losses:
i - Major: The game still wont render at 1080p (placebo). If they do go beyond 720p it is often by cutting graphical features to hit the higher internal resolutions. In most games allowing 1080p is actually a silent downgrade.
ii - Minor: The resolution scaler becomes ambiguous. Is 2x res really 1440p? Now it could be 4k maybe? Most games use very strange internal resolutions if they try to support 1080p output.
iii - Major: Potential for increased support tickets. It's not something you see now because we solved it, but we had tickets opened every other week for years because of that damned resolution dropdown.

EDIT: Added Gains-ii

@schm1dtmac

schm1dtmac commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

I'll append my personal opinion now below: For me, it's a question of risk vs reward. What do we gain by adding the full "user pick any and all resolutions" and what do we lose.

Gains: i - Minor: The user can select 1080p resolution (let's be honest, its the only one affected here in practice) without games rejecting it. The game still won't actually render at 1080p and in every scenario we have 1080p selection is a straight-up downgrade compared to 720p. See losses section. ii - Minor: The full list of resolutions mimics VSH usage pattern for PS3 enthusiasts.

Losses: i - Major: The game still wont render at 1080p (placebo). If they do go beyond 720p it is often by cutting graphical features to hit the higher internal resolutions. In most games allowing 1080p is actually a silent downgrade. ii - Minor: The resolution scaler becomes ambiguous. Is 2x res really 1440p? Now it could be 4k maybe? Most games use very strange internal resolutions if they try to support 1080p output. iii - Major: Potential for increased support tickets. It's not something you see now because we solved it, but we had tickets opened every other week for years because of that damned resolution dropdown.

EDIT: Added Gains-ii

Just to throw another two pennies worth in, this is where I’ve also thought that, in future, maybe the TV resolution selection should also be banished from easy user access altogether into say the Advanced or even Debug tabs if need be to eliminate confusion, those major issues are quite serious ones especially the more user-facing/UX concerns. I believe there is a small subset/list of games that did in fact render at true native 1920x1080 on PS3 without compromise versus the 720p mode, where I think the emulator defaulting to 1080p on these select titles could be beneficial as far as getting higher resolution UI artwork goes for example (were the game to use lower resolution UI artwork in the 720p mode). Those cases should really be handled by the wiki & database settings though and otherwise 720p defaulted to in all other cases, such that most casual users should never have to even think about this option in practice and only need to worry about resolution scaling.

I’d still argue though that, once hidden away, the TV resolution behaviour should match up with PS3 selection behaviour for those tweaking with it just to ensure that all possible game behaviours can be obtained inside the emulator (even if they’re relatively stupid, like GTA IV having a mode that upscales to 1080p if and only if the 720p mode is unselected in the XMB). It’d also avoid ambiguity on what a ‘1080p’ dropdown selection could mean as, like with Sound formats having both the dropdown and the checklist, you can visually see what each dropdown mode checks off (I’d expect them to check off every mode up to and including the mode chosen versus just checking off said mode, for example).

@kd-11

kd-11 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

I think for a long time, every time this issue comes up, we all agree it should be a checklist, not a single entry dropdown as it is right now. But we are yet to solve the UX problem of not letting users pretty much destroy the experience by having that 1080p thing checked. Unfortunately games didn't offer the "performance" and "quality" options back then in the game menus, so this is all done silently without the user choice. The worst thing is those games that force FHD by lowering the graphical fidelity.
Maybe we can hide 1080p option completely behind a checkbox in debug tab or something, but I'm sure someone on youtube will just post a video "how to enable native 1080p on rpcs3" and ruin it.

@Satan86

Satan86 commented Jul 24, 2026

Copy link
Copy Markdown

I think the best course of action would be what @schm1dtmac said, hide the option somewhere most users won't mess with it, defaulted to 720p and below checked, then pull 1080p default from the database only for the few games where it is beneficial.

The only problem is that the database doesn't pull debug settings, so I don't know how one would effectively "hide" this setting and pull from the database at the same time, but I'm sure less people would mess with the setting that way. Really, anything we can do to hide this setting is good for the user, as messing with it manually makes the experience worse 99% of the time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

7 participants