mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-23 15:52:42 +02:00
docs(D217/D211): M-86 — D217 root cause characterised; D211 aim-zoom verified
D217: two defects found. (1) The visible green grip/hand is upstream of fast3d — the grip's count=1 model G_LOADTLUT is fed different source bytes per level (Facility 1a 00 -> 0x1A00 green; Bunker 00 01 -> black); every larger model TLUT carries a 2-entry leading zero pad, so the port's model-TLUT source pointer is likely 4 bytes low (or a d43_emit.py blob offset). fast3d byteswap is correct (proven by Bunker). (2) A real CI texture-cache collision (no palette-content key) — fix landed on branch fix/d217-model-texture-palette f6fc0399 (palette FNV-1a hash in the CI key); owes a 21-level sweep; does not fix (1). porting-notes + graphics- backlog updated. D211: aim-zoom compose verified correct by construction (single post-lerp multiply at the fr.c chokepoint; zoom ratio preserved). Only a low-risk cosmetic eyeball remains (viewmodel/frustum-cull use unscaled fovy). Claude-Session: https://claude.ai/code/session_016TaKy6AAsVUTfjkhrX6CjG
This commit is contained in:
1 parent
2cdecd3aa6
commit
6b66c9ddc9
4 files changed
+21
-3
No files matched your search
@@ -469,6 +469,23 @@ through a converter or a runtime bswap fixup reads scrambled.
|
||||
`import_texture()` dispatched purely on `tile.fmt` and did a palette lookup
|
||||
against a stale `rdp.palette` → garbage (D161, GE Depot ceiling = blue
|
||||
speckle). Fix: when `rdp.palette_fmt == G_TT_NONE`, route CI4/CI8 → I4/I8.
|
||||
- **CI texture cache must key on palette CONTENT, not just the TLUT source
|
||||
address (D217).** GE assembles weapon/character model DLs in scratch arena
|
||||
RAM and reissues `gDPLoadTLUT` from a *repeated* source address with different
|
||||
palette content between materials and frames. fast3d keyed CI textures on
|
||||
`{texel addr, palette_addrs[0/1], palette_index, size_bytes}` with no content
|
||||
check → a later material takes a stale cache HIT and samples the GL texture
|
||||
decoded for an earlier palette. Fix: FNV-1a the 512-byte `rdp.palette` in
|
||||
`gfx_dp_load_tlut` (rare vs draws) and fold that hash into the CI cache key.
|
||||
- **GE model-DL TLUT payloads carry a 2-entry leading zero pad (D217, still
|
||||
open).** Every larger weapon/chr model TLUT decodes with `entry[0]==entry[1]
|
||||
==0x0000` and real colour from index 2. `count=1` model TLUTs that feed
|
||||
palette index 0 (solid-fill weapon parts — the PP7 grip) are the canary: if
|
||||
the port's model-TLUT source pointer is even 4 bytes off, index 0 reads
|
||||
adjacent texel/blob bytes and the part renders a wrong flat colour (green on
|
||||
Facility/Depot, black-by-luck on Bunker1) while larger tiles look plausible
|
||||
because they never index the low entries. Fix is upstream (segment resolution
|
||||
or `tools_pc/d43_emit.py` blob placement), not in the fast3d decode.
|
||||
- **RC3 / D167 — GL `GL_REPEAT` wraps at the uploaded image size; the N64 RDP
|
||||
wraps a render tile at `1<<masks` (`= ceil(log2(dim))` for GE, `texDimensionToMask`).**
|
||||
Equal for power-of-two textures, so this is invisible almost everywhere — but a
|
||||
|
||||
Reference in new issue
Block a user