feat(video): support 48:9 triple-monitor picture geometry #2052
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot!2052
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/triple-monitor-48-9"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
On a 48:9 desktop the camera stopped widening at 32:9, and the game rejected custom outputs such as 5760×1080 and 7680×1440. Both settings now give a wider view and keep the HUD in the center 16:9 area.
Addresses the 48:9 request in #1007, originally reported in #2039.
Technical changes
Validation
At
0d5e2981, geometry and output fixtures pass on Windows LLVM-MinGW and Linux GCC. The new four-decimal case fails before the fix (6608x1240) and passes after it (6528x1224). Full local suite: Windows 325 passed / 3 failed / 25 skipped; Linux 330 / 1 / 22. All three Windows failures reproduce on mainf915af93; Linux lacks the bake fixture dependency covered by #1954.Current-head upstream source checks fail in finish-output fixtures after main added FSR runtime provisioning; existing #2102 owns the fixture correction. These differ from the local failures. Windows build/package and AppImage passed.
At
557542cdond47206ed, the geometry and output fixtures passed on Windows and Ubuntu. All 11 Windows startup cases also passed. The previous revision also passed the geometry, parser and presentation rectangle checks on Windows and Ubuntu.Native Windows smoke at
9ed2da57on RTX 5070 Ti used both output settings in a 1920×360 window. Vulkan reported source sizes of 5760×1080 and 6528×1224, with a full 1920×360 destination in both cases. Captures decoded at the two configured output sizes. The HUD stayed in the middle third and the house-to-Kokiri Forest transition completed in both runs.With 7680×1440 configured, maximizing to a 3440×1369 swapchain kept a 3440×645 centered destination. Both runs exited normally and preserved the original checkpoint hashes.
The brief black center with visible sides during the opening transition was also reproduced at 32:9 on the pre-change build
600960cd. Linux gameplay, campaign-wide cutscenes and a physical three-monitor span remain untested.Dev-work claim.
0d5e2981)Looks good to me. The 32:9 and 48:9 limits now live in one place (
hos_output_size_valid/hos_output_is_surroundinhos_wide_size.h), so the host parser and the menu can't drift apart any more. The host and the menu both force the surround shape for a >32:9 custom output, so the menu's Render resolution rows match what boot picks. The 24-row alignment checks out: 7680x1440 goes over the 3840x2160 budget and comes out at exactly 6528x1224 (48:9), and 5760x1080 fits in the budget at full size. Handheld is unaffected becausehos_output_sizereports 2560x1440 there. The pool goes to 515 MB and 900 MB as the test expects. Nothing on main since the base touches these files, and CI is green.A few nits, none blocking:
hos_main.c: a surround output now overrides an explicitHOS_ASPECT(see inline).hos_wide_clamp: the 1e-6 snap doesn't catch the 4-decimal form (see inline).vk_menu.cpppicture_for: the doc comment above it still says "with Ultrawide on". A surround output now takes this path with Ultrawide off too, so it's worth a few words there.The opening-transition black centre is also on the pre-change 32:9 build, so I agree it's not from this PR. A real three-monitor span and Linux are still untested, as the description says.
@ -1528,4 +1533,3 @@uint32_t hos_output_size(int height); /* (host/nn_applet.c: the Output resolution's height, 1440 as shipped) *//* (the height kept, the width at the screen's ratio, at most 3840 x 2160's pixels with the shape kept:host/hos_wide_size.h, which the Insert menu's Output and Render resolution rows share; issue 1031) */unsigned ow, oh;Nit: this also runs when
HOS_ASPECTis set, soHOS_ASPECT=1.7778(or0) can't opt out of the surround camera with a 5760x1080/7680x1440 output. The block comment above still saysHOS_ASPECTwins. If the override is intended, a word in that comment would do. If not,if (!e && hos_output_is_surround(...))keeps the env var as the escape hatch. (The menu ignoresHOS_ASPECTanyway, so either choice is consistent with it.)@ -6,10 +6,23 @@#define HOS_WIDE_SIZE_HNit: the 1e-6 tolerance catches
5.333333but not5.3333, which is the 4-decimal form the docs use forHOS_ASPECT(2.3889). WithHOS_ASPECT=5.3333at the 1440 output,risn't exactly 48/9, sohos_wide_sizetakes the 8-row path and gives 6608x1240 (5.329) instead of 6528x1224. A tolerance like 1e-4 would snap both. Only matters for the env var: the output-derived ratio is exact.Addressed the three nits at
0d5e2981. A custom output above 32:9 intentionally takes precedence, keeping startup and menu geometry consistent; both comments now say so. The clamp accepts four-decimal 48:9 input. The added regression fails before the fix (6608x1240) and passes after it (6528x1224). Geometry and output fixtures pass on Windows LLVM-MinGW and Linux GCC. Fresh full-suite/build checks are pending; the description separates them from earlier evidence.github-sync referenced this pull request2026-11-12 06:22:54 +00:00