mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-23 15:52:42 +02:00
port: D397 — retract the ineffective CI->I import block; correct the finding record
Per scratch/d397_fs/HANDOFF-D397.md: the stale-RENDERTILE hypothesis is REFUTED (D161 already routes CI + G_TT_NONE to the I8 import; the GE_TEXI logs show palfmt=0 on all 299 row strips), so the D397 block added to import_texture had no effect (12px frame diff) and is removed. The finding's true state: data path proven clean (byte-exact I8 uploads vs the ground-truth PGM); MSAA/mips/noise/quant/cache ruled out. Leading cause H1 = the file-select custom-CC LERP feeding ENV_ALPHA 0x14 as a 20/255 mix factor (black texels render ~0.92x prim = the measured 27/28/17 census); the N64 RDP 5-bit coefficient scaling (gmain.s / PD CC engine) is the open root-cause question. H2 = possible separate row-strip-geometry comb. GE_D397SH probe stays in-tree until the root cause lands. findings table + tail section + CSV corrected.
This commit is contained in:
1 parent
2ba72eb75f
commit
65875ad45b
3 files changed
+3
-19
No files matched your search
@@ -273,7 +273,7 @@ D393,FIXED,Controller B/Y both crouch; no in-game use button —,FIXED + user li
|
||||
D394,PARTIAL,Xbox 1.1 Jinx controller parity —,PARTIAL (port 1.1 gameplay button roles user-tested; exact gadget-category parity and other selectable presets outstanding; RB HD toggle unavailable).
|
||||
D395,PARTIAL,Controller trapped in keyboard/mouse-only binding capture —,"PARTIAL (both options UIs block pad-initiated capture; pad B can cancel an active modal; NTSC build linked, controller-only retest owed)."
|
||||
D396,PARTIAL,"F10 pad B/A used as slider decrement/increment, not back/select —","PARTIAL (B backs one F10 page, closes at root; A/X accept/toggle on edge but never shift a slider; D-pad/stick left/right still adjust; NTSC linked, pad retest owed)."
|
||||
D397,PARTIAL,SELECT FILE background + intro gun-barrel show an interlaced/comb look —,FIX LANDED (in tree; by-eye + PCDUMP verification owed):
|
||||
D397,OPEN,SELECT FILE background + intro gun-barrel show an interlaced/comb look —,"OPEN, re-scoped + root-causing (no fix yet):"
|
||||
D398,FIXED,PC Options label: D348's procedural slider glyph replaced with an existing mainfolderimages texture (2026-09-27).,"SUPERSEDED by D400 (icon removed, text-only label; purple-hover bug moot; the D400 textMeasure arg-swap bug was found and fixed there)."
|
||||
D399,PARTIAL,File-select bottom row (SELECT FILE text + Copy/Erase + PC Options dot/label) shifted 15px left as a block (user sign-off 2026-09-27).,"LANDED (port-only, D343 class):"
|
||||
D400,PARTIAL,"File-select ""PC Options"" label:","LANDED (port-only, frontoptions.c):"
|
||||
|
@@ -681,7 +681,7 @@ covers D24–D69; the log continues in §H (D32 procedure, D70–D121).
|
||||
| D394 | **Xbox 1.1 Jinx controller parity** — user supplied the Xbox 1.1–1.4 control table; B is gadgets, stick clicks crouch, LB aim, RB HD toggle (not weapon cycling). | PARTIAL (port 1.1 gameplay button roles user-tested; exact gadget-category parity and other selectable presets outstanding; RB HD toggle unavailable). |
|
||||
| D395 | **Controller trapped in keyboard/mouse-only binding capture** — pad could enter the binding modal but could not finish or cancel without keyboard. | PARTIAL (both options UIs block pad-initiated capture; pad B can cancel an active modal; NTSC build linked, controller-only retest owed). |
|
||||
| D396 | **F10 pad B/A used as slider decrement/increment, not back/select** — B/Y fed Left and A/X fed Right on every row. | PARTIAL (B backs one F10 page, closes at root; A/X accept/toggle on edge but never shift a slider; D-pad/stick left/right still adjust; NTSC linked, pad retest owed). |
|
||||
| D397 | **SELECT FILE background + intro gun-barrel show an interlaced/comb look** — D182(2) family, but present on FIRST display, not only after re-entry (2026-09-27). Full `## D397` entry at file tail. | FIX LANDED (in tree; by-eye + PCDUMP verification owed): root-caused — `titleRenderFolderMenuBackgroundLines` loads 299 one-pixel 440-byte I8 rows with `gDPLoadTextureBlock(I, 8b)` and samples `G_TX_RENDERTILE` but never emits `gSPSetTile`, so the tile's fmt/siz is whatever the previous screen left (CI/4b spectrum-screen leftover, D116 probe); fast3d ran the I8 bytes through `import_texture_ci4` against a stale/all-zero 16-entry palette → periodic black rows. Fix: `gfx_pc.cpp` `import_texture` routes the import through the source's fmt/siz when a CI/RGBA tile genuinely disagrees with an I8 8b load (mirrors the D229 case); `GE_D397SH` shader-formula probe added in `gfx_opengl.cpp`. D159/D183 leads stand disproven; no ROM RLE decode needed. |
|
||||
| D397 | **SELECT FILE background + intro gun-barrel show an interlaced/comb look** — D182(2) family, but present on FIRST display, not only after re-entry (2026-09-27). Full `## D397` entry at file tail. | OPEN, re-scoped + root-causing (no fix yet): data path proven clean (299 I8 row strips upload byte-exact vs the ground-truth PGM); the stale-RENDERTILE import hypothesis is REFUTED (D161 already routes CI+G_TT_NONE to the I8 import); MSAA, mips, noise dither, 5-bit quant, cache aliasing all ruled out. Leading cause H1: the file-select custom-CC LERP uses ENV_ALPHA 0x14 as the mix factor and the port feeds it as 20/255≈0.078 — a black texel then renders ≈0.92×prim, matching the measured 27/28/17 black-region census; the N64 RDP's 5-bit coefficient scaling is the open question (check `rsp/graphics/gmain.s` + the PD port's CC engine). Possible second defect H2: the 6-of-9-row comb in row-strip geometry. `GE_D397SH` shader probe in `gfx_opengl.cpp` (kept during investigation, remove before merge). An ineffective CI→I import-routing block was tried and removed (D161 covers it). |
|
||||
| D398 | **PC Options label: D348's procedural slider glyph replaced with an existing mainfolderimages texture (2026-09-27).** Full `## D398` entry at file tail. | SUPERSEDED by D400 (icon removed, text-only label; purple-hover bug moot; the D400 `textMeasure` arg-swap bug was found and fixed there). |
|
||||
| D399 | **File-select bottom row (SELECT FILE text + Copy/Erase + PC Options dot/label) shifted 15px left as a block (user sign-off 2026-09-27).** Full `## D399` entry at file tail. | LANDED (port-only, D343 class): `selectpos.f[0]` 110→95 (new `#ifdef PORT` in front.c), Copy 200/222→185/207, Erase 282/304→267/289 (D343 PORT block), `LABEL_X` 358→343 (`frontoptions.c`); hit bounds recompute from the shifted positions. Clean build, PCDUMP frame 195 no overlaps; by-eye check owed. |
|
||||
| D400 | **File-select "PC Options" label: icon removed, text-only; fixed a swapped textMeasure() arg bug and a 7px vertical misalignment vs Copy/Erase (user sign-off 2026-09-27).** Full `## D400` entry at file tail. | LANDED (port-only, `frontoptions.c`): D398's dot icon dropped on user instruction ("most straightforward design"); label now a plain `textRender` word, GAP 28 after Erase. Two measurement bugs fixed: (1) `textMeasure(textheight, textwidth)` args passed swapped -> label 35px above the bar, hot band transposed; (2) bare-label height measures 0 (vs 14 for newline-terminated Copy/Erase) -> 7px lower tops; fixed by restoring the `kLabelNL` height measure. PCDUMP frame 195: tops aligned 279.8 vs 279.3, 31px clearance from Erase; by-eye check owed. |
|
||||
@@ -15175,7 +15175,7 @@ I logged all of this as **D397** (`docs/dev/findings.md`, index CSV, and the D18
|
||||
|
||||
**Owed (concrete next steps, single session):** (a) one `GE_PCDUMP` capture of the fresh file-select screen + the intro gun-barrel (not a round-trip); (b) ROM ground-truth decode of the `unknown2` gun-barrel RLE image (`tools_pc` extract of `assets/ge007.u.2A4D50.usedby7F008DE4.bin`) to settle cause 1 vs 2; (c) if cause 2, an `GE_DTEX` sweep of the 299 row imports to confirm cache/STRIDED behaviour. Cross-refs: D182(2) (same symptom, round-trip trigger), D176(b) (Family A, disproven), D159 (no-op'd), D183 (pitch de-stride, latent no-op here).
|
||||
|
||||
**Fix landed (in tree, 2026-09-28) — status: awaiting by-eye + PCDUMP verification.** The live capture found the tile was imported as **CI/4b — the spectrum-screen leftover** (D116 probe), i.e. cause 2 (GL texture-cache artifact), not a ground-truth dither: `titleRenderFolderMenuBackgroundLines` samples `G_TX_RENDERTILE` but never emits `gSPSetTile`, so the tile's fmt/siz is whatever the previous screen left; fast3d then ran the I8 bytes through `import_texture_ci4` against a stale/all-zero 16-entry palette → periodic black rows. Fix in `gfx_pc.cpp` `import_texture`: route the import through the **source's** fmt/siz when a CI/RGBA tile genuinely disagrees with an I8 8b load (mirrors the D229 mirror case above it); real CI/RGBA textures are untouched because the guard only fires on a genuine format disagreement. A `GE_D397SH` shader-formula probe (`gfx_opengl.cpp`, env-gated) was added to inspect the file-select gunbarrel combine; the label was initially written as "D398", which collided with the PC-Options-label finding and was renamed to D397. No ROM RLE decode (step b) is needed to verify: the PCDUMP of the file-select + intro gun-barrel screens against the pre-fix capture is the check.
|
||||
**Status (2026-09-28, per `scratch/d397_fs/HANDOFF-D397.md`) — OPEN, re-scoped; no fix landed.** An in-tree CI→I import-routing block in `gfx_pc.cpp` `import_texture` was tried and is **ineffective** (the D116 stale-tile-metadata hypothesis is REFUTED: D161 already routes `fmt==CI && palette==G_TT_NONE` to `import_texture_i8`; the GE_TEXI logs show `palfmt=0` on all 299 rows) — the block was removed 2026-09-28. Established: the data path is 100% clean (299 row strips upload byte-exact vs `scratch/d397_fs/gunbarrel.pgm`); the artifact is static; MSAA, mips, RAND_NOISE, 5-bit quant and texture-cache aliasing are ruled out. Leading hypotheses: **H1** — the file-select custom-CC LERP (`gDPSetCombineLERP(TEXEL0, PRIMITIVE, ENV_ALPHA, ...)`) uses ENV_ALPHA 0x14 as the mix factor; the port feeds it as `20/255 ≈ 0.078` (`G_CCMUX_ENV_ALPHA` input, `gfx_pc.cpp`), so a black texel renders ≈0.92×prim ≈ the measured 27/28/17 black-region census — the N64 RDP 5-bit coefficient scaling (check `rsp/graphics/gmain.s` and the PD port's CC engine for the same combine id) is the root-cause question; **H2** — the 6-of-9-row comb is a second, separate row-strip-geometry defect (non-integer quad y + NEAREST, or the 256-tri vertex-ring wrap between the two tris of a row); **H3** — part of the darkened look is authentic N64 (G_TC_FILT 4-bit intensity dither, unimplemented here). A `GE_D397SH` env-gated shader-formula probe (in `gfx_opengl.cpp`, ~30 lines) stays in-tree until the root cause lands, then is removed. Next steps per the handoff: Q1 correlate which of the 20 compiled shaders is the gun-barrel row-strip one, Q4 settle the LERP-factor scaling against gmain.s/PD, Q5 native 640×480 FBO capture to re-measure the comb period.
|
||||
|
||||
|
||||
## D398 — PC Options label: IMG_DOT texture replaces the D348 procedural slider glyph (2026-09-27)
|
||||
|
||||
@@ -1329,22 +1329,6 @@ static void import_texture(int i, int tile, bool importReplacement) {
|
||||
* palette path instead -- the port-layer equivalent of the ucode's
|
||||
* expand-at-load. Only fires when the tile format genuinely disagrees
|
||||
* with the loaded source, so real RGBA16 textures are untouched. */
|
||||
/* D397: comb/interlace grain on the file-select background + intro
|
||||
* gun-barrel. titleRenderFolderMenuBackgroundLines loads 299 one-pixel
|
||||
* 440-byte I8 rows with gDPLoadTextureBlock(I, 8b) and samples
|
||||
* G_TX_RENDERTILE but never emits gSPSetTile, so the tile's fmt/siz is
|
||||
* whatever the previous screen left (D116 probe: CI/4b -- the
|
||||
* spectrum-screen leftover). fast3d then ran the I8 bytes through
|
||||
* import_texture_ci4 against a 16-entry palette (stale / all-zero)
|
||||
* -> periodic black rows. Route the import through the source's
|
||||
* format, exactly like the D229 mirror case above. Only fires when
|
||||
* the tile format genuinely disagrees with the loaded source (CI or
|
||||
* RGBA tile over an I8 load), so real CI/RGBA textures are untouched. */
|
||||
if (loaded_texture.src_fmt == G_IM_FMT_I && siz == G_IM_SIZ_8b &&
|
||||
(fmt_eff == G_IM_FMT_CI || fmt_eff == G_IM_FMT_RGBA)) {
|
||||
fmt_eff = G_IM_FMT_I;
|
||||
siz_eff = G_IM_SIZ_8b;
|
||||
}
|
||||
if (fmt_eff == G_IM_FMT_RGBA && siz == G_IM_SIZ_16b &&
|
||||
loaded_texture.src_fmt == G_IM_FMT_CI) {
|
||||
#ifdef PORT
|
||||
|
||||
Reference in new issue
Block a user