Skip to content

docs(phase5): P2-RTX graphical corruption investigation — dual-mod (Digital pack) root-cause hypothesis - #85

Merged
weter11 merged 5 commits into
mainfrom
phase5/p2-graphics-investigation
Aug 16, 2026
Merged

docs(phase5): P2-RTX graphical corruption investigation — dual-mod (Digital pack) root-cause hypothesis#85
weter11 merged 5 commits into
mainfrom
phase5/p2-graphics-investigation

Conversation

@weter11

@weter11 weter11 commented Aug 15, 2026

Copy link
Copy Markdown
Owner

What

Investigation record for the Portal 2 RTX graphical corruption seen on both runners (wine11-wow64 DirectWine and pure-PE Proton 11.0 in the SLR container). Follows PR #84 (Phase 5 validation) and PR #83 (Phase 4 overview).

Problem

RTX Remix renders corrupted frames: dark-with-only-lights, noise/flicker, wrong colors, garbage geometry, missing/black textures. RTX pipeline confirmed running (MangoHud ~25 fps RTX vs ~120 fps non-RTX; camera accepted in-map). The 16:19 container run (purepe) shows byte-identical symptoms to the 15:24 DirectWine run — runner-independent.

What we ruled out

  • Core mod files are md5-pristine vs the 2.4.3 zip (bin/d3d9.dll, bin/winmm.dll, portal2_dlc3/pak01_dir.vpk all match) — no file corruption.
  • Not the runner stack (purepe == wine11-wow64 symptoms).

Root-cause hypothesis (with direct log proof)

rtx-remix/mods/ holds two mods each with mod.usda: the current base mod portal2rtx/ and the Feb-2026 Digital-additions pack built for p2-rtx 2.1. The runtime loads both → replacement-stage conflicts, plus Digital's enormous 2.1-era textures (160–170 MB) blow the 96 MB streaming staging buffer → forced synchronous uploads (stutter, ~25 fps) and black/missing textures:

warn: A suboptimal replacement texture detected: …\mods\Digital\assets\portal mel\…   (25× wine11 run, 23× purepe run)
err:  Texture (20480x6144) doesn't fit into STAGING memory for streaming (TEXTURE=160MB, but STAGING=96MB). Forcing synchronous upload…

Identical failures in both runs → data-driven, not runner-driven.

A/B plan

  1. Move mods/Digital out (backup) → retest → expect corruption cleared.
  2. Restore pristine rtx.conf + minimal overrides (graphicsPreset=4, showUI=2).
  3. rtx.integrateIndirectMode = 0 (skip NRC fallback noise path).
  4. Per-variant screenshot classification if still corrupt.

Test config

steam_mode = OfflineEmulated + steamflow-proton-11.0-purepe (container boot proven in phase 4; no native Steam needed). +map sp_a1_intro1; remap watcher for the compositor white; logs → ~/remix_logs.

…igital pack) root-cause hypothesis

Evidence: core mod files md5-pristine; mods/Digital (p2-rtx 2.1-era, Feb-2026)
loaded alongside the 2.4.x base mod in BOTH the wine11-wow64 (15:24) and
purepe-container (16:19) runs — suboptimal replacement texture warnings +
160-170MB textures exceeding the 96MB streaming staging buffer (forced
synchronous uploads, stutter, black/missing textures). Runner-independent by
construction. A/B plan: move Digital out, then pristine rtx.conf, then
integrateIndirectMode=0.
…rectWine (wined3d fallback)

16:53 run (purepe bare wine, 620/pfx) never loaded the mod chain: wine builtin
wined3d rendered instead (15M trace lines, no bridge/remix logs, dxwrapper log
stale). Launch matrix: wine11-wow64 DirectWine and purepe OnlineContainerized
both load the chain; purepe DirectWine does not. Digital A/B must run under a
mod-loading configuration.
…ore (missing USD plugin resources)

Full audit vs the 2.4.3 archive: 124/165 files missing (all usd/ plugInfo +
glslfx shaders), 37 diag-artifact leftovers, d3d9.dll a foreign binary
(24c7cf vs archive 9e301a). Aug-8 restore was partial. Restored full .trex
from archive (backup kept). Runner-independent corruption source.
…rruption root cause

User retest: Portal 2 renders perfectly after the archive .trex restore (Digital
out). Mel (317400) follow-up: installed the 2.4.3 chain + base mod + real
Digital pack; SteamFlow entry created.
fea906f (cadence-gated cover checks) removed ensure_image_requested's
early returns for already-loaded best variants. The spawned task completes
within the same frame it starts (24h state window still fresh -> cached
path sent back -> pending_images cleared in poll_image_results), so the
selected game's cover task respawned EVERY UI frame at full repaint rate
(~165 Hz on a high-refresh display): cached JPEG re-decoded in the tokio
worker + texture re-uploaded on the UI thread, pegging ~1 core (~7% on a
16-core host).

Fix: track last_cover_request per appid and skip spawning while inside the
COVER_RECHECK_INTERVAL_SECS window (covers failed fetches too — same
respawn loop). The once-per-day availability HEAD recheck still runs when
the interval elapses; Refresh Library clears the map so manual refresh
forces an immediate full recheck.
@weter11
weter11 merged commit 1649135 into main Aug 16, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant