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:
Erik 2026-09-03 08:01:37 +02:00
parent 4c364412f0
commit 434a7df289
7 changed files with 15 additions and 22 deletions

View file

@ -396,13 +396,6 @@ public RetailPViewPassExecutor(
{
if (_portalDepthMask is null)
return 0;
if (!forceFarZ
&& AcDream.Core.Rendering.RenderingDiagnostics
.ProbeCathedralSkipFloatingStairSeals
&& cellId is 0xF4180107u or 0xF4180112u)
{
return 0;
}
LoadedCell? cell = frame.Cells.Find(cellId);
if (cell is null)
return 0;

View file

@ -43,7 +43,9 @@ public interface IRetailFrameWalkContext : IWalkBuildingFrameContext
/// </summary>
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
// floods (the landscape is already drawn when buildings punch), so its
// draw_landscape is FALSE and look-in DCs always read ov=0 — exactly

View file

@ -565,7 +565,11 @@ internal sealed class WalkFrameDriver : IWalkEventSink, IWalkLookInViewSource
/// 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
/// 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&gt;0 frame without a
/// clear — no retail analogue, no production path.</summary>
internal int PortalsDrawnCount;
IReadOnlyList<uint> IWalkLookInViewSource.LookInCellTurns => LookInCellTurns;

View file

@ -96,7 +96,9 @@ internal interface IWorldPassScope
/// Retail's interior depth clear, scoped to the live pass.
///
/// <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 &gt; 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
/// records <c>vkCmdClearAttachments</c> instead — reached through here, so the
/// pinned contract stays frozen and the backend-only verb stays inside the

View file

@ -79,7 +79,10 @@ internal interface IWorldPassSurface
/// <summary>
/// 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 &gt; 0</c> AND a nonzero persistent
/// <c>portalsDrawnCount</c> (S3 chunk 2); the walk driver decides, this
/// seam only executes.
/// </summary>
void ClearInteriorDepth();
}

View file

@ -119,16 +119,6 @@ public static class RenderingDiagnostics
public static bool ProbeCathedralSkipStairBuildingPunch { get; set; } =
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>
/// Temporary cathedral carrier discriminator: suppresses only the visible
/// EnvCell shells for cells 0xF4180107 and 0xF4180112. This deliberately