chore(render): Phase A8.F — strip ACDREAM_A8_DIAG_* step-disable flags (keep PROBE_VIS)

Task 0 baseline cleanup. Removes the temporary A8 step-disable diag
toggles (A8Diag* properties + ACDREAM_A8_DIAG_* env reads) that the A8
batch left behind in RuntimeOptions, and unwraps their guards in
GameWindow.RenderInsideOutAcdream so every guarded draw (Step 2 punch,
Step 3 EnvCell-opaque + IndoorPass, Step 4 terrain + outdoor scenery,
portal depth-clamp) now runs unconditionally. RuntimeOptionsTests drops
the matching assertions. The ACDREAM_PROBE_VIS apparatus
(EmitDrawOrderProbe / EmitStencilProbe / EmitBuildingsProbe /
EmitEnvCellProbe) is preserved untouched.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-05-29 11:25:00 +02:00
parent 612400f998
commit bb903bc157
3 changed files with 22 additions and 91 deletions

View file

@ -11026,13 +11026,6 @@ public sealed class GameWindow : IDisposable
EmitBuildingsProbe(visibilityCellId: cameraCell.CellId, camBuildings, otherBuildings); EmitBuildingsProbe(visibilityCellId: cameraCell.CellId, camBuildings, otherBuildings);
bool diagDisableStep4Terrain = _options.A8DiagDisableInsideStep4Terrain;
bool diagDisableStep4Outdoor = _options.A8DiagDisableInsideStep4Outdoor;
bool diagDisableStep3EnvCellOpaque = _options.A8DiagDisableInsideStep3EnvCellOpaque;
bool diagDisableStep3IndoorPass = _options.A8DiagDisableInsideStep3IndoorPass;
bool diagDisableStep2Punch = _options.A8DiagDisableInsideStep2Punch;
bool diagDisablePortalDepthClamp = _options.A8DiagDisablePortalDepthClamp;
var visiblePortalCells = new System.Collections.Generic.List<AcDream.App.Rendering.LoadedCell>(); var visiblePortalCells = new System.Collections.Generic.List<AcDream.App.Rendering.LoadedCell>();
if (visibleCellIds is not null) if (visibleCellIds is not null)
{ {
@ -11073,23 +11066,20 @@ public sealed class GameWindow : IDisposable
_indoorStencilPipeline!.DrawUploadedPortalMesh( _indoorStencilPipeline!.DrawUploadedPortalMesh(
viewProj, viewProj,
writeFarDepth: false, writeFarDepth: false,
enableDepthClamp: !diagDisablePortalDepthClamp); enableDepthClamp: true);
EmitStencilProbe(op: "mark-visible"); EmitStencilProbe(op: "mark-visible");
if (!diagDisableStep2Punch) // Step 2: punch depth at portals.
{ // WB VisibilityManager.cs:99-104
// Step 2: punch depth at portals. gl.DepthMask(true);
// WB VisibilityManager.cs:99-104 gl.DepthFunc(DepthFunction.Always);
gl.DepthMask(true);
gl.DepthFunc(DepthFunction.Always);
EmitDrawOrderProbe(step: 2, sub: ' '); EmitDrawOrderProbe(step: 2, sub: ' ');
_indoorStencilPipeline!.DrawUploadedPortalMesh( _indoorStencilPipeline!.DrawUploadedPortalMesh(
viewProj, viewProj,
writeFarDepth: true, writeFarDepth: true,
enableDepthClamp: !diagDisablePortalDepthClamp); enableDepthClamp: true);
EmitStencilProbe(op: "punch-visible"); EmitStencilProbe(op: "punch-visible");
}
} }
// Step 3: render the indoor cells visible from the camera cell // Step 3: render the indoor cells visible from the camera cell
@ -11118,8 +11108,7 @@ public sealed class GameWindow : IDisposable
foreach (var id in visibleCellIds) foreach (var id in visibleCellIds)
currentEnvCellIds.Add(id); currentEnvCellIds.Add(id);
gl.Disable(EnableCap.Blend); gl.Disable(EnableCap.Blend);
if (!diagDisableStep3EnvCellOpaque) _envCellRenderer!.Render(AcDream.App.Rendering.Wb.WbRenderPass.Opaque, currentEnvCellIds);
_envCellRenderer!.Render(AcDream.App.Rendering.Wb.WbRenderPass.Opaque, currentEnvCellIds);
// Transparency pass. // Transparency pass.
gl.Enable(EnableCap.Blend); gl.Enable(EnableCap.Blend);
@ -11149,7 +11138,7 @@ public sealed class GameWindow : IDisposable
// current cottage shell occludes any farther geometry. NO stencil: we // current cottage shell occludes any farther geometry. NO stencil: we
// want the active building shell rendered unconditionally inside the // want the active building shell rendered unconditionally inside the
// camera-building. // camera-building.
if (camBuildings.Count > 0 && !diagDisableStep3IndoorPass) if (camBuildings.Count > 0)
{ {
_meshShader!.Use(); _meshShader!.Use();
_wbDrawDispatcher!.Draw(camera, _worldState.LandblockEntriesWithoutAnimatedIndex, frustum, _wbDrawDispatcher!.Draw(camera, _worldState.LandblockEntriesWithoutAnimatedIndex, frustum,
@ -11183,28 +11172,18 @@ public sealed class GameWindow : IDisposable
// convention. Step 4 enables culling before terrain, so temporarily // convention. Step 4 enables culling before terrain, so temporarily
// use terrain's own front-face convention or ground disappears through // use terrain's own front-face convention or ground disappears through
// indoor portal silhouettes. // indoor portal silhouettes.
if (!diagDisableStep4Terrain) gl.FrontFace(FrontFaceDirection.Ccw);
{ _terrain?.Draw(camera, frustum, neverCullLandblockId: playerLb);
gl.FrontFace(FrontFaceDirection.Ccw); gl.FrontFace(FrontFaceDirection.CW);
_terrain?.Draw(camera, frustum, neverCullLandblockId: playerLb);
gl.FrontFace(FrontFaceDirection.CW);
}
else
{
gl.FrontFace(FrontFaceDirection.CW);
}
_meshShader!.Use(); _meshShader!.Use();
// Scenery + static objects via dispatcher (WB lines 148-154). // Scenery + static objects via dispatcher (WB lines 148-154).
if (!diagDisableStep4Outdoor) _wbDrawDispatcher!.Draw(camera, _worldState.LandblockEntriesWithoutAnimatedIndex, frustum,
{ neverCullLandblockId: playerLb,
_wbDrawDispatcher!.Draw(camera, _worldState.LandblockEntriesWithoutAnimatedIndex, frustum, visibleCellIds: visibleCellIds, // OK - outdoor cells outside the building
neverCullLandblockId: playerLb, animatedEntityIds: null,
visibleCellIds: visibleCellIds, // OK - outdoor cells outside the building set: AcDream.App.Rendering.Wb.WbDrawDispatcher.EntitySet.OutdoorScenery);
animatedEntityIds: null, _a8PerfLastStaticStats = _wbDrawDispatcher.LastDrawStats;
set: AcDream.App.Rendering.Wb.WbDrawDispatcher.EntitySet.OutdoorScenery);
_a8PerfLastStaticStats = _wbDrawDispatcher.LastDrawStats;
}
} }
// Step 5: per-other-building 3-bit stencil pipeline. // Step 5: per-other-building 3-bit stencil pipeline.

View file

@ -39,12 +39,6 @@ public sealed record RuntimeOptions(
bool RetailCloseDegrades, bool RetailCloseDegrades,
bool DumpSceneryZ, bool DumpSceneryZ,
bool DumpLiveSpawns, bool DumpLiveSpawns,
bool A8DiagDisableInsideStep4Terrain,
bool A8DiagDisableInsideStep4Outdoor,
bool A8DiagDisableInsideStep3EnvCellOpaque,
bool A8DiagDisableInsideStep3IndoorPass,
bool A8DiagDisableInsideStep2Punch,
bool A8DiagDisablePortalDepthClamp,
int? LegacyStreamRadius) int? LegacyStreamRadius)
{ {
/// <summary> /// <summary>
@ -85,18 +79,6 @@ public sealed record RuntimeOptions(
RetailCloseDegrades: !string.Equals(env("ACDREAM_RETAIL_CLOSE_DEGRADES"), "0", StringComparison.Ordinal), RetailCloseDegrades: !string.Equals(env("ACDREAM_RETAIL_CLOSE_DEGRADES"), "0", StringComparison.Ordinal),
DumpSceneryZ: IsExactlyOne(env("ACDREAM_DUMP_SCENERY_Z")), DumpSceneryZ: IsExactlyOne(env("ACDREAM_DUMP_SCENERY_Z")),
DumpLiveSpawns: IsExactlyOne(env("ACDREAM_DUMP_LIVE_SPAWNS")), DumpLiveSpawns: IsExactlyOne(env("ACDREAM_DUMP_LIVE_SPAWNS")),
A8DiagDisableInsideStep4Terrain:
IsExactlyOne(env("ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP4_TERRAIN")),
A8DiagDisableInsideStep4Outdoor:
IsExactlyOne(env("ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP4_OUTDOOR")),
A8DiagDisableInsideStep3EnvCellOpaque:
IsExactlyOne(env("ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP3_ENVCELL_OPAQUE")),
A8DiagDisableInsideStep3IndoorPass:
IsExactlyOne(env("ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP3_INDOORPASS")),
A8DiagDisableInsideStep2Punch:
IsExactlyOne(env("ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP2_PUNCH")),
A8DiagDisablePortalDepthClamp:
IsExactlyOne(env("ACDREAM_A8_DIAG_DISABLE_PORTAL_DEPTH_CLAMP")),
// Legacy override for ACDREAM_STREAM_RADIUS. Caller applies it on // Legacy override for ACDREAM_STREAM_RADIUS. Caller applies it on
// top of the quality preset's radii. Null when unset or invalid. // top of the quality preset's radii. Null when unset or invalid.
LegacyStreamRadius: TryParseNonNegativeInt(env("ACDREAM_STREAM_RADIUS"))); LegacyStreamRadius: TryParseNonNegativeInt(env("ACDREAM_STREAM_RADIUS")));

View file

@ -37,12 +37,6 @@ public sealed class RuntimeOptionsTests
// Default-on: RetailCloseDegrades is true unless explicitly disabled. // Default-on: RetailCloseDegrades is true unless explicitly disabled.
Assert.True(opts.RetailCloseDegrades); Assert.True(opts.RetailCloseDegrades);
Assert.False(opts.DumpSceneryZ); Assert.False(opts.DumpSceneryZ);
Assert.False(opts.A8DiagDisableInsideStep4Terrain);
Assert.False(opts.A8DiagDisableInsideStep4Outdoor);
Assert.False(opts.A8DiagDisableInsideStep3EnvCellOpaque);
Assert.False(opts.A8DiagDisableInsideStep3IndoorPass);
Assert.False(opts.A8DiagDisableInsideStep2Punch);
Assert.False(opts.A8DiagDisablePortalDepthClamp);
Assert.Null(opts.LegacyStreamRadius); Assert.Null(opts.LegacyStreamRadius);
Assert.False(opts.HasLiveCredentials); Assert.False(opts.HasLiveCredentials);
} }
@ -190,24 +184,12 @@ public sealed class RuntimeOptionsTests
["ACDREAM_NO_AUDIO"] = "1", ["ACDREAM_NO_AUDIO"] = "1",
["ACDREAM_ENABLE_SKY_PES"] = "1", ["ACDREAM_ENABLE_SKY_PES"] = "1",
["ACDREAM_DUMP_SCENERY_Z"] = "1", ["ACDREAM_DUMP_SCENERY_Z"] = "1",
["ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP4_TERRAIN"] = "1",
["ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP4_OUTDOOR"] = "1",
["ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP3_ENVCELL_OPAQUE"] = "1",
["ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP3_INDOORPASS"] = "1",
["ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP2_PUNCH"] = "1",
["ACDREAM_A8_DIAG_DISABLE_PORTAL_DEPTH_CLAMP"] = "1",
})); }));
Assert.True(allOn.DevTools); Assert.True(allOn.DevTools);
Assert.True(allOn.DumpMoveTruth); Assert.True(allOn.DumpMoveTruth);
Assert.True(allOn.NoAudio); Assert.True(allOn.NoAudio);
Assert.True(allOn.EnableSkyPesDebug); Assert.True(allOn.EnableSkyPesDebug);
Assert.True(allOn.DumpSceneryZ); Assert.True(allOn.DumpSceneryZ);
Assert.True(allOn.A8DiagDisableInsideStep4Terrain);
Assert.True(allOn.A8DiagDisableInsideStep4Outdoor);
Assert.True(allOn.A8DiagDisableInsideStep3EnvCellOpaque);
Assert.True(allOn.A8DiagDisableInsideStep3IndoorPass);
Assert.True(allOn.A8DiagDisableInsideStep2Punch);
Assert.True(allOn.A8DiagDisablePortalDepthClamp);
// Any non-"1" value leaves them off, matching the // Any non-"1" value leaves them off, matching the
// string.Equals(env, "1", StringComparison.Ordinal) check. // string.Equals(env, "1", StringComparison.Ordinal) check.
@ -218,24 +200,12 @@ public sealed class RuntimeOptionsTests
["ACDREAM_NO_AUDIO"] = "2", ["ACDREAM_NO_AUDIO"] = "2",
["ACDREAM_ENABLE_SKY_PES"] = "on", ["ACDREAM_ENABLE_SKY_PES"] = "on",
["ACDREAM_DUMP_SCENERY_Z"] = " 1", ["ACDREAM_DUMP_SCENERY_Z"] = " 1",
["ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP4_TERRAIN"] = "true",
["ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP4_OUTDOOR"] = "yes",
["ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP3_ENVCELL_OPAQUE"] = "2",
["ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP3_INDOORPASS"] = " 1",
["ACDREAM_A8_DIAG_DISABLE_INSIDE_STEP2_PUNCH"] = "true",
["ACDREAM_A8_DIAG_DISABLE_PORTAL_DEPTH_CLAMP"] = "yes",
})); }));
Assert.False(anyOther.DevTools); Assert.False(anyOther.DevTools);
Assert.False(anyOther.DumpMoveTruth); Assert.False(anyOther.DumpMoveTruth);
Assert.False(anyOther.NoAudio); Assert.False(anyOther.NoAudio);
Assert.False(anyOther.EnableSkyPesDebug); Assert.False(anyOther.EnableSkyPesDebug);
Assert.False(anyOther.DumpSceneryZ); Assert.False(anyOther.DumpSceneryZ);
Assert.False(anyOther.A8DiagDisableInsideStep4Terrain);
Assert.False(anyOther.A8DiagDisableInsideStep4Outdoor);
Assert.False(anyOther.A8DiagDisableInsideStep3EnvCellOpaque);
Assert.False(anyOther.A8DiagDisableInsideStep3IndoorPass);
Assert.False(anyOther.A8DiagDisableInsideStep2Punch);
Assert.False(anyOther.A8DiagDisablePortalDepthClamp);
} }
[Fact] [Fact]