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
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>0 frame without a
|
||||
/// clear — no retail analogue, no production path.</summary>
|
||||
internal int PortalsDrawnCount;
|
||||
|
||||
IReadOnlyList<uint> IWalkLookInViewSource.LookInCellTurns => LookInCellTurns;
|
||||
|
|
|
|||
|
|
@ -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 > 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
|
||||
|
|
|
|||
|
|
@ -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 > 0</c> AND a nonzero persistent
|
||||
/// <c>portalsDrawnCount</c> (S3 chunk 2); the walk driver decides, this
|
||||
/// seam only executes.
|
||||
/// </summary>
|
||||
void ClearInteriorDepth();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue