D247: close as NOT A BUG -- confirmed faithful N64 TV-safe letterbox; D246 narrowed

Display pipeline pass on the two remaining M-116 QA reports.

D247 (black bars top/bottom): traced to bondviewGetCurrentPlayerViewportHeight()
returning VIEWPORT_HEIGHT_DEFAULT (220 of 240 NTSC scanlines, fr.h) for the
decomp's own default SCREEN_SIZE_FULLSCREEN option -- unmodified ground-truth
code, no #ifdef PORT anywhere near it. Verified against both the existing
save and a fresh EEPROM (rules out a stale Screen=Wide/Cinema setting from
earlier sessions) -- same inset either way. This is GoldenEye's real
TV-safe-area letterbox, present on original hardware. No code change.

D246 (left/right edge strips): GE_PCDUMP captures of the native render show
clean edge columns, ruling out an RDP/game-DL scissor bug and the D227/D245
tc-overflow class -- the defect must be introduced later, in the SDL window
presentation path GE_PCDUMP bypasses (MSAA resolve blit or a live-window
scale remainder). Still needs the user's window size/MSAA setting to chase
further; documented as a narrowed OPEN with concrete next steps.

New porting-notes.md entry: check the decomp's own constants before
assuming a rendering "defect" is a port bug.

Claude-Session: https://claude.ai/code/session_016DQUKGLZxFtPy52MkKXXog
This commit is contained in:
James Dansereau committed 2026-09-12 20:35:50 -04:00
1 parent 4806799867
commit 1f7f804733
3 files changed
+24 -4

No files matched your search

+20
View File
@@ -1106,3 +1106,23 @@ and turns every such overrun into a fatal `*** stack smashing detected ***`
anim/physics data never produced the degenerate value, so the decomp never
checks. Suspect a misaligned `Model`/struct field (D100/D140 pun family) as
the NaN source before blaming the data. §F **D156**.
- **D247 — a visual "defect" report can be faithful, unmodified N64 behaviour;
check the decomp's own constants before assuming a port bug.** User reported
black bars top/bottom of the screen. The obvious port-side suspects (a
present/letterbox path, a framebuffer-vs-window size mismatch) were all
clean — no code anywhere sets `G_ASPECT_MODE_EXT` for GE, so fast3d never
letterboxes. The real cause: `bondviewGetCurrentPlayerViewportHeight()`
(`bondview2.c:7858`) returns `VIEWPORT_HEIGHT_DEFAULT` = 220 of 240 NTSC
scanlines (`fr.h:34`, ~92% fill) whenever `PLAYER_OPTION_SCREEN` is
`SCREEN_SIZE_FULLSCREEN` — the decomp's own default value — unmodified,
no `#ifdef PORT` in sight. `VIEWPORT_HEIGHT_FULLSCREEN` (304, no inset) is
a trap name: it's only reachable via the unrelated `cameraBufferToggle`
branch, not normal solo play. This is GoldenEye's real TV-safe-area
letterboxing, present on original hardware. Ruled out a stale EEPROM
`Screen=Wide/Cinema` setting from earlier sessions as an alternative
explanation by reproducing identically on a fresh EEPROM. **Lesson:**
before chasing a `port/` fix for a rendering "bug," grep the reported
geometry (viewport height/width, screen offset, etc.) back to its decomp
origin — a visually surprising but *exactly reproduced* N64 quirk isn't a
port defect, and the fix is to close the finding, not to write code.
§F **D247**.