fix(render): S3 chunk 2 review follow-ups
- delete the ACDREAM_PROBE_CATHEDRAL_SKIP_SEALS discriminator (member, read site, launch-options row): its investigation is closed by the retail axiom, and the review found it had silently gained a second effect through the seal count (a skipped seal also suppressed the next depth clear); - the interior PView's draw_landscape is now wired explicitly (RenderDeviceD3D::Init 0x0059efb0), so the two-PView pin asserts wiring, not a default; - the two backend seam comments name retail's clear gate; - the counter doc states the Collect/Replay consume/re-arm split and why it has no retail analogue. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
4c364412f0
commit
434a7df289
7 changed files with 15 additions and 22 deletions
|
|
@ -330,7 +330,6 @@ issue is closed, the strip was missed; delete both.
|
||||||
| `ACDREAM_PROBE_PVINPUT` | "throwaway apparatus — strip once the jitter source is pinned" | `=1` | one `[pv-input]` line/frame with 6-dp-precision `PortalVisibilityBuilder.Build` inputs (camera eye, player position, VP elements) + resulting flood-cell count; deliberately runs WITHOUT the heavier `[flap]` probe so the log stays diffable | print-only | `RenderingDiagnostics.ProbePvInputEnabled` |
|
| `ACDREAM_PROBE_PVINPUT` | "throwaway apparatus — strip once the jitter source is pinned" | `=1` | one `[pv-input]` line/frame with 6-dp-precision `PortalVisibilityBuilder.Build` inputs (camera eye, player position, VP elements) + resulting flood-cell count; deliberately runs WITHOUT the heavier `[flap]` probe so the log stays diffable | print-only | `RenderingDiagnostics.ProbePvInputEnabled` |
|
||||||
| `ACDREAM_PROBE_REMOTE_SLIDE` | bug b, temporary — strip once two-client roof capture lands | `=1` OR `=<comma-separated hex GUID list>` | gates `[remote-slide-up]`/`[remote-slide-vec]`/`[remote-slide-snap]`/`[remote-slide-enq]` lines across `LiveEntityNetworkUpdateController`, `InterpolationManager`, `RuntimeRemotePhysicsUpdater`, `RuntimeRemoteSteadyStatePosition` tracing two candidate remote-slide "blip" producers | print-only; `BeginRemoteSlideAttribution`/GUID-stamping calls are UNCONDITIONAL at several call sites (self-guard is internal), so a `[ThreadStatic]` field write happens on every remote tick regardless of the flag (cheap, non-allocating); a GUID allow-list narrows output to specific entities for a readable two-client capture | `PhysicsDiagnostics.ProbeRemoteSlideEnabled` + `ProbeRemoteSlideGuids` (raw string parsed via `ParseHexIdList` unless it's the literal `"1"`) |
|
| `ACDREAM_PROBE_REMOTE_SLIDE` | bug b, temporary — strip once two-client roof capture lands | `=1` OR `=<comma-separated hex GUID list>` | gates `[remote-slide-up]`/`[remote-slide-vec]`/`[remote-slide-snap]`/`[remote-slide-enq]` lines across `LiveEntityNetworkUpdateController`, `InterpolationManager`, `RuntimeRemotePhysicsUpdater`, `RuntimeRemoteSteadyStatePosition` tracing two candidate remote-slide "blip" producers | print-only; `BeginRemoteSlideAttribution`/GUID-stamping calls are UNCONDITIONAL at several call sites (self-guard is internal), so a `[ThreadStatic]` field write happens on every remote tick regardless of the flag (cheap, non-allocating); a GUID allow-list narrows output to specific entities for a readable two-client capture | `PhysicsDiagnostics.ProbeRemoteSlideEnabled` + `ProbeRemoteSlideGuids` (raw string parsed via `ParseHexIdList` unless it's the literal `"1"`) |
|
||||||
| `ACDREAM_PROBE_REMOTE_TELEPORT` | c4 route 4b-3, temporary | `=1` | gates one `[remote-teleport]` line per routed remote teleport arm in `LiveEntityNetworkUpdateController.ApplyRemoteContactRouting` | print-only; a 2026-08-04 fix moved the enabled-check to the CALL SITE because the probe's internal self-guard did not prevent `teleportStatus.ToString()` from being evaluated/allocated on every teleport regardless of flag state — now properly guarded | `PhysicsDiagnostics.ProbeRemoteTeleportEnabled` |
|
| `ACDREAM_PROBE_REMOTE_TELEPORT` | c4 route 4b-3, temporary | `=1` | gates one `[remote-teleport]` line per routed remote teleport arm in `LiveEntityNetworkUpdateController.ApplyRemoteContactRouting` | print-only; a 2026-08-04 fix moved the enabled-check to the CALL SITE because the probe's internal self-guard did not prevent `teleportStatus.ToString()` from being evaluated/allocated on every teleport regardless of flag state — now properly guarded | `PhysicsDiagnostics.ProbeRemoteTeleportEnabled` |
|
||||||
| `ACDREAM_PROBE_CATHEDRAL_SKIP_SEALS` | Campaign FW floating-stair discriminator | `=1` | suppresses only the true-depth exit seals of cells `0xF4180107` and `0xF4180112`, whose coplanar authored exit polygons span the floating-stair seam at world Y~=24 | **Behavior-changing diagnostic**; never use as a production fix | `RenderingDiagnostics.ProbeCathedralSkipFloatingStairSeals` |
|
|
||||||
| `ACDREAM_PROBE_CATHEDRAL_SKIP_PUNCH` | Campaign FW floating-stair discriminator (committed by the `b3b7d922` investigation checkpoint) | `=1` | suppresses only the far-Z portal punch of the authored building whose look-in owns cell `0xF4180112`, the moving transparent seam at the `0xF4180107/0112` floating stairs | **Behavior-changing diagnostic**; never use as a production fix; scheduled for deletion in Campaign OVERHAUL S5 | `RenderingDiagnostics.ProbeCathedralSkipStairBuildingPunch` |
|
| `ACDREAM_PROBE_CATHEDRAL_SKIP_PUNCH` | Campaign FW floating-stair discriminator (committed by the `b3b7d922` investigation checkpoint) | `=1` | suppresses only the far-Z portal punch of the authored building whose look-in owns cell `0xF4180112`, the moving transparent seam at the `0xF4180107/0112` floating stairs | **Behavior-changing diagnostic**; never use as a production fix; scheduled for deletion in Campaign OVERHAUL S5 | `RenderingDiagnostics.ProbeCathedralSkipStairBuildingPunch` |
|
||||||
| `ACDREAM_PROBE_CATHEDRAL_SKIP_CELL_SHELLS` | Campaign FW floating-stair carrier discriminator | `=1` | suppresses only the visible EnvCell shells of cells `0xF4180107` and `0xF4180112`; missing walls are intentional so the moving wall-textured triangles can be attributed or exonerated | **Behavior-changing diagnostic**; never use as a production fix | `RenderingDiagnostics.ProbeCathedralSkipFloatingStairCellShells` |
|
| `ACDREAM_PROBE_CATHEDRAL_SKIP_CELL_SHELLS` | Campaign FW floating-stair carrier discriminator | `=1` | suppresses only the visible EnvCell shells of cells `0xF4180107` and `0xF4180112`; missing walls are intentional so the moving wall-textured triangles can be attributed or exonerated | **Behavior-changing diagnostic**; never use as a production fix | `RenderingDiagnostics.ProbeCathedralSkipFloatingStairCellShells` |
|
||||||
| `ACDREAM_PROBE_CATHEDRAL_SKIP_SOUTH_LOOKIN_SHELLS` | Campaign FW south-building carrier discriminator | `=1` | suppresses the visible EnvCell shells of `0xF4180112/0113/0114` only during the south building's pre-clear look-in; the ordinary interior-root repaint is unchanged | **Behavior-changing diagnostic**; never use as a production fix | `RenderingDiagnostics.ProbeCathedralSkipSouthLookInCellShells` |
|
| `ACDREAM_PROBE_CATHEDRAL_SKIP_SOUTH_LOOKIN_SHELLS` | Campaign FW south-building carrier discriminator | `=1` | suppresses the visible EnvCell shells of `0xF4180112/0113/0114` only during the south building's pre-clear look-in; the ordinary interior-root repaint is unchanged | **Behavior-changing diagnostic**; never use as a production fix | `RenderingDiagnostics.ProbeCathedralSkipSouthLookInCellShells` |
|
||||||
|
|
|
||||||
|
|
@ -396,13 +396,6 @@ public RetailPViewPassExecutor(
|
||||||
{
|
{
|
||||||
if (_portalDepthMask is null)
|
if (_portalDepthMask is null)
|
||||||
return 0;
|
return 0;
|
||||||
if (!forceFarZ
|
|
||||||
&& AcDream.Core.Rendering.RenderingDiagnostics
|
|
||||||
.ProbeCathedralSkipFloatingStairSeals
|
|
||||||
&& cellId is 0xF4180107u or 0xF4180112u)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
LoadedCell? cell = frame.Cells.Find(cellId);
|
LoadedCell? cell = frame.Cells.Find(cellId);
|
||||||
if (cell is null)
|
if (cell is null)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,9 @@ public interface IRetailFrameWalkContext : IWalkBuildingFrameContext
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class RetailFrameWalk
|
public sealed class RetailFrameWalk
|
||||||
{
|
{
|
||||||
private readonly WalkPView _interiorPView = new();
|
// RenderDeviceD3D::Init @0x0059efb0: indoor_pview = PView(…, 1) — the
|
||||||
|
// interior pview DRAWS the landscape through its surviving exit views.
|
||||||
|
private readonly WalkPView _interiorPView = new() { DrawLandscape = true };
|
||||||
// The outdoor pview never draws the landscape through its look-in
|
// The outdoor pview never draws the landscape through its look-in
|
||||||
// floods (the landscape is already drawn when buildings punch), so its
|
// floods (the landscape is already drawn when buildings punch), so its
|
||||||
// draw_landscape is FALSE and look-in DCs always read ov=0 — exactly
|
// draw_landscape is FALSE and look-in DCs always read ov=0 — exactly
|
||||||
|
|
|
||||||
|
|
@ -565,7 +565,11 @@ internal sealed class WalkFrameDriver : IWalkEventSink, IWalkLookInViewSource
|
||||||
/// frame's read will see. A driver whose interior floods never reach an
|
/// frame's read will see. A driver whose interior floods never reach an
|
||||||
/// exit portal keeps this at zero forever — the gated clear never fires
|
/// exit portal keeps this at zero forever — the gated clear never fires
|
||||||
/// for it, matching retail exactly (no seals submitted, no depth ever
|
/// for it, matching retail exactly (no seals submitted, no depth ever
|
||||||
/// needed clearing).</summary>
|
/// needed clearing). Retail consumes and re-arms inside ONE synchronous
|
||||||
|
/// <c>DrawCells</c>; here the consume is at Collect and the re-arm at
|
||||||
|
/// Replay, so a frame that Collects but never Replays (an exception path
|
||||||
|
/// that already failed the frame) leaves the next ov>0 frame without a
|
||||||
|
/// clear — no retail analogue, no production path.</summary>
|
||||||
internal int PortalsDrawnCount;
|
internal int PortalsDrawnCount;
|
||||||
|
|
||||||
IReadOnlyList<uint> IWalkLookInViewSource.LookInCellTurns => LookInCellTurns;
|
IReadOnlyList<uint> IWalkLookInViewSource.LookInCellTurns => LookInCellTurns;
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,9 @@ internal interface IWorldPassScope
|
||||||
/// Retail's interior depth clear, scoped to the live pass.
|
/// Retail's interior depth clear, scoped to the live pass.
|
||||||
///
|
///
|
||||||
/// <para><c>RetailPViewPassExecutor</c> issues <c>glClear(GL_DEPTH_BUFFER_BIT)</c>
|
/// <para><c>RetailPViewPassExecutor</c> issues <c>glClear(GL_DEPTH_BUFFER_BIT)</c>
|
||||||
/// between the landscape slice and the interior cells. Splitting the pass to
|
/// between the landscape slice and the interior cells, only when the walk
|
||||||
|
/// driver's retail gate fires (<c>outside_view.view_count > 0</c> and a
|
||||||
|
/// nonzero <c>portalsDrawnCount</c> — S3 chunk 2). Splitting the pass to
|
||||||
/// get a depth load-op is exactly what the resolve forbids, so the backend
|
/// get a depth load-op is exactly what the resolve forbids, so the backend
|
||||||
/// records <c>vkCmdClearAttachments</c> instead — reached through here, so the
|
/// records <c>vkCmdClearAttachments</c> instead — reached through here, so the
|
||||||
/// pinned contract stays frozen and the backend-only verb stays inside the
|
/// pinned contract stays frozen and the backend-only verb stays inside the
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,10 @@ internal interface IWorldPassSurface
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Retail's interior depth clear, between the landscape slice and the
|
/// Retail's interior depth clear, between the landscape slice and the
|
||||||
/// interior cells (<c>PView::DrawCells @ 0x005A4840</c>).
|
/// interior cells (<c>PView::DrawCells @ 0x005A4840</c>). Retail gates it
|
||||||
|
/// on <c>outside_view.view_count > 0</c> AND a nonzero persistent
|
||||||
|
/// <c>portalsDrawnCount</c> (S3 chunk 2); the walk driver decides, this
|
||||||
|
/// seam only executes.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void ClearInteriorDepth();
|
void ClearInteriorDepth();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -119,16 +119,6 @@ public static class RenderingDiagnostics
|
||||||
public static bool ProbeCathedralSkipStairBuildingPunch { get; set; } =
|
public static bool ProbeCathedralSkipStairBuildingPunch { get; set; } =
|
||||||
Environment.GetEnvironmentVariable("ACDREAM_PROBE_CATHEDRAL_SKIP_PUNCH") == "1";
|
Environment.GetEnvironmentVariable("ACDREAM_PROBE_CATHEDRAL_SKIP_PUNCH") == "1";
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Temporary cathedral discriminator: suppresses only the true-depth exit
|
|
||||||
/// seals authored by the two cells that meet at the floating-stair seam.
|
|
||||||
/// Both portal polygons lie on world Y ~= 24 and span the reported moving
|
|
||||||
/// triangle. This is a binary visual experiment only; normal production
|
|
||||||
/// behavior is unchanged while the flag is unset.
|
|
||||||
/// </summary>
|
|
||||||
public static bool ProbeCathedralSkipFloatingStairSeals { get; set; } =
|
|
||||||
Environment.GetEnvironmentVariable("ACDREAM_PROBE_CATHEDRAL_SKIP_SEALS") == "1";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Temporary cathedral carrier discriminator: suppresses only the visible
|
/// Temporary cathedral carrier discriminator: suppresses only the visible
|
||||||
/// EnvCell shells for cells 0xF4180107 and 0xF4180112. This deliberately
|
/// EnvCell shells for cells 0xF4180107 and 0xF4180112. This deliberately
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue