docs: Campaign FW - FW2 status + the FW3 slice plan from the cutover survey
FW2 gate adjudication recorded (RecordingGpuDevice referees are the automated gate; the pixel A/B rides FW3's cutover toggle). FW3 sliced from the verified surface survey: FW3.1 production walk world data (the Building record drops every walk field today - the biggest gap), FW3.2 walk-driven static routes (stop EMITTING the three static routes; ClipFrameAssembler/ViewconeCuller survive for the dynamic routes; walk-path selection publication - picking is an unlisted consumer of the static draw path), FW3.3 ShellDrawLiftZ retirement (THREE sites - AP-32 lists only two), FW3.4 perf checkpoint with the baseline correction (519.7 fps is the Aerlinthe ordinary profile, not dense Arwic - capture a fresh pre-cutover dense-Arwic pair first). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
e65644cb33
commit
b95850defe
1 changed files with 69 additions and 0 deletions
|
|
@ -265,6 +265,21 @@ pixel-equivalent on static content.
|
||||||
- **Gates:** submitter unit tests (order preservation, merge legality);
|
- **Gates:** submitter unit tests (order preservation, merge legality);
|
||||||
framebuffer equivalence on static-content scenes; hermetic suites green.
|
framebuffer equivalence on static-content scenes; hermetic suites green.
|
||||||
|
|
||||||
|
**FW2 STATUS (2026-08-30, @`e65644cb`):** `OrderedDrawStream` +
|
||||||
|
`WbDrawDispatcher.OrderedStream` (the submitter partial — per-instance-
|
||||||
|
first emission, pure-CPU merge-run builder, fail-loud stage/pipeline/
|
||||||
|
cull boundary validation) and `WorldDepthContract` are landed with 27
|
||||||
|
RecordingGpuDevice gates; hermetic 6,714/0. Depth verified verbatim
|
||||||
|
from the decomp (`zfuncVal` 0x2 = D3DCMP_LESS via `SetDepthBufferMode`
|
||||||
|
@0x005a2d10; LESSEQUAL is GameSky-local). **Gate adjudication:** the
|
||||||
|
offscreen pixel A/B rides FW3's cutover toggle — a walk-driven scene
|
||||||
|
first exists there, `IGpuRenderTarget` has no readback verb today, and
|
||||||
|
opaque content under Less is order-independent, so the RecordingGpuDevice
|
||||||
|
order/merge referees are FW2's automated gate and the pixel proof joins
|
||||||
|
FW3's (offline pixel gate + owner visual gate). Deferred to FW3 and
|
||||||
|
recorded in the code: the building-detail overlay replay, portal-punch
|
||||||
|
emission, and the `_drawCullModes`/alpha-scope sequencing constraint.
|
||||||
|
|
||||||
### FW3 — static world cutover + THE perf checkpoint
|
### FW3 — static world cutover + THE perf checkpoint
|
||||||
|
|
||||||
**Goal:** terrain, EnvCell shells, and buildings draw via the walk in
|
**Goal:** terrain, EnvCell shells, and buildings draw via the walk in
|
||||||
|
|
@ -291,6 +306,60 @@ deeper commitment.
|
||||||
gate (statics look right indoors + outdoors, no seam strip at the
|
gate (statics look right indoors + outdoors, no seam strip at the
|
||||||
doorway, no z-fighting at shells); perf numbers recorded in this plan.
|
doorway, no z-fighting at shells); perf numbers recorded in this plan.
|
||||||
|
|
||||||
|
**FW3 SLICE PLAN (2026-08-30, from the cutover-surface survey):**
|
||||||
|
|
||||||
|
- **FW3.1 — production walk world data.** Materialize the walk's world
|
||||||
|
model at landblock commit time, registry-owned, through the LEGAL
|
||||||
|
`IDatReaderWriter` seam (never raw `DatCollection` —
|
||||||
|
`RuntimeDatAccessArchitectureTests`): (a) `WalkCell` fields onto/beside
|
||||||
|
`LoadedCell` (portal side/exact from the RAW `Flags` already preserved
|
||||||
|
on `CellPortalInfo`; plane from the existing `ClipPlanes` parallel
|
||||||
|
list; the 0xFFFF→0xFFFFFFFF exit-sentinel widening); (b) a production
|
||||||
|
`WalkBuilding` build in `LandblockBuildFactory`/`BuildingLoader` — the
|
||||||
|
BIGGEST gap: today's `Building` drops ModelId/Frame/portal
|
||||||
|
flags/stab lists at load; (c) the walk landscape assembly (retail
|
||||||
|
z-slabs from the height table, the SideCellCount LOD pyramid,
|
||||||
|
`CellBuildings[]`, viewer-centred grid) fed from landblock residency;
|
||||||
|
(d) the production frame context: camera/rays/CyPlane/ObjectToClip
|
||||||
|
derived from the LIVE `WorldCameraFrame` + real viewport (the capture
|
||||||
|
client's 1024×720 constants are fixture pins, not production values).
|
||||||
|
Conformance: the ten oracle fixtures re-run against the PRODUCTION
|
||||||
|
builders (same DATs → identical walk output as the test adapter).
|
||||||
|
- **FW3.2 — walk-driven static routes.** `WorldSceneRenderer` drives
|
||||||
|
`RetailFrameWalk` → `OrderedDrawStream`
|
||||||
|
(Terrain/BuildingShell/CellStatic/LookInStatic/PortalPunch stages) →
|
||||||
|
`SubmitOrderedStream` for static content; the old builder STOPS
|
||||||
|
EMITTING `LandscapeOutdoorStatic`/`LandscapeBuildingShell`/`CellStatic`
|
||||||
|
ranges (the `CompletePackedProductionFrame` count assertion forbids
|
||||||
|
emit-but-skip); dynamic routes (`LookInObject`,
|
||||||
|
`LandscapeOutsideDynamic`, `DynamicLast`) stay packed — which requires
|
||||||
|
`ClipFrameAssembler` + `ViewconeCuller` to SURVIVE this stage (their
|
||||||
|
slices key the dynamic routes). Walk-path SELECTION publication
|
||||||
|
(static picking today rides `publishSelection: true` in the packed
|
||||||
|
classifier — an unlisted consumer; the walk submitter must feed
|
||||||
|
`RetailSelectionScene` or statics go un-clickable). Portal-punch
|
||||||
|
emission via `PortalDepthMaskRenderer` at walk turns; building-detail
|
||||||
|
overlay replay; sky/weather move from per-slice to the walk's
|
||||||
|
landscape turn; the `_drawCullModes`/alpha-scope sequencing constraint
|
||||||
|
resolved (own cull scratch or strict sequencing). Route-keyed particle
|
||||||
|
owners re-sourced from the walk.
|
||||||
|
- **FW3.3 — ShellDrawLiftZ retirement.** THREE sites (the register row
|
||||||
|
AP-32 lists only two — `LandblockBuildFactory.cs` bakes the lift into
|
||||||
|
the drawn cell transform and is unlisted): delete all three, flip the
|
||||||
|
#130 proof (`UnliftedGate_LeavesTheStripAtTheDrawnTopEdge` is
|
||||||
|
explicitly written to fail-by-gap until the lift is gone), delete
|
||||||
|
AP-32 in the same commit.
|
||||||
|
- **FW3.4 — perf checkpoint + gates.** BASELINE CORRECTION: the
|
||||||
|
519.7 fps / 1.869 / 1.096 ms numbers are the Aerlinthe
|
||||||
|
ordinary-production profile, NOT dense Arwic. Before the cutover
|
||||||
|
lands, capture a fresh dense-Arwic pre-cutover baseline with the same
|
||||||
|
harness (`tools/run-connected-r6-soak.ps1 -Uncapped -DenseTown`), and
|
||||||
|
apply the ±20% stop rule to THAT pair. Transition checklist: the
|
||||||
|
lifecycle gate + dense-town soak exist; a Holtburg house-exit stop and
|
||||||
|
a teleport stopwatch metric must be ADDED to the lifecycle route
|
||||||
|
(`drive.ps1` from the spec does not exist — the checklist runs on the
|
||||||
|
existing gate scripts).
|
||||||
|
|
||||||
### FW4 — entities, particles, dynamics into walk turns; delete the apparatus
|
### FW4 — entities, particles, dynamics into walk turns; delete the apparatus
|
||||||
|
|
||||||
**Goal:** everything draws at its walk turn; the patch apparatus and the
|
**Goal:** everything draws at its walk turn; the patch apparatus and the
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue