checkpoint: preserve user-gated FW closeout fixes

This commit is contained in:
Erik 2026-08-31 08:27:37 +02:00
parent a2f2eb7d78
commit b8befded8b
22 changed files with 1005 additions and 198 deletions

View file

@ -202,11 +202,11 @@ internal sealed partial class RetailPViewPassExecutor
/// </summary>
internal sealed class WalkProductionLeafRenderer : IWalkFrameLeafRenderer
{
private readonly RetailPViewPassExecutor _passes;
private readonly RetailPViewFrameInput _frame;
private readonly ClipFrameAssembly _clipAssembly;
private readonly Action _clearInteriorDepth;
private readonly Action _drawExitSeals;
private RetailPViewPassExecutor _passes = null!;
private RetailPViewFrameInput _frame = null!;
private ClipFrameAssembly _clipAssembly = null!;
private Action _clearInteriorDepth = null!;
private Action _drawExitSeals = null!;
private readonly HashSet<uint> _singleCellScratch = new();
private readonly List<uint> _singleCellListScratch = new();
private readonly Dictionary<uint, int> _singleCellClipScratch = new(1);
@ -217,10 +217,24 @@ internal sealed class WalkProductionLeafRenderer : IWalkFrameLeafRenderer
ClipFrameAssembly clipAssembly,
Action clearInteriorDepth,
Action drawExitSeals)
=> Reset(passes, frame, clipAssembly, clearInteriorDepth, drawExitSeals);
/// <summary>
/// FW6 allocation closeout: bind the retained leaf and its retained
/// one-cell collections to the current frame. Replay is synchronous, so
/// no frame may outlive these references.
/// </summary>
internal void Reset(
RetailPViewPassExecutor passes,
RetailPViewFrameInput frame,
ClipFrameAssembly clipAssembly,
Action clearInteriorDepth,
Action drawExitSeals)
{
_passes = passes ?? throw new ArgumentNullException(nameof(passes));
_frame = frame ?? throw new ArgumentNullException(nameof(frame));
_clipAssembly = clipAssembly;
_clipAssembly = clipAssembly
?? throw new ArgumentNullException(nameof(clipAssembly));
_clearInteriorDepth = clearInteriorDepth
?? throw new ArgumentNullException(nameof(clearInteriorDepth));
_drawExitSeals = drawExitSeals