fix(ablation): tunnel-core ablation no longer disables the fused evaluator
Salvaged from the parked exact-culling round (wip/exact-cull-20260914, 49369ac). This is the only
change ported. `if (!VoxelDensityAblation::IsTunnelCoreOff() && CP_UseOpStack)` becomes
`if (CP_UseOpStack)`: with the tunnel-core ablation on, the old condition also sent coarse tiles
to the scalar per-chunk cache path. That was the 2.9x "tunnel core off" anomaly in 6ccf371. In
normal runs (ablation off) the condition is unchanged.
Salvage round (Codex; checked by me):
- Baseline confirmed on this machine: static worker 33.98 s. So the parked round really was a
regression (~41 s with all its switches off), not machine drift.
- The parked round's always-on cost: EvaluateSDFCached did a tile-window/candidate lookup
unconditionally; tunnel-chain signatures added candidate range checks and per-segment AABB/Sqrt
lower bounds; CanSkipSmoothMin read exported globals + TLS per primitive even when disabled;
passage candidate setup ran before the disabled check; the passage/landing/post paths copied
density and built debug closures with debug off. No FORCEINLINE was lost; the added work was
inlined into the hot sample path.
- Not ported: tile candidates (48.26 s on vs 46.19 s off even inside the WIP), the SmoothMin cutoff,
the post early-outs (a measured loss) and the debug hooks.
Final vs baseline DLL, two interleaved runs each: static worker 33.98 -> 33.56 s, moving
73.89 -> 74.70 s; LOD0 generation p50 66.1 -> 65.5 ms static, 64.7 -> 65.3 ms moving. Equal
within noise, as expected from a change that is inert in normal runs.
Field exact: 841/841 keyed tiles, export b3e5f4c3..9b377, capability 20,830 / 10,909.
Every launch was serialized (prelaunch UnrealEditor count 0); no crash folders; two harness-only
trace wrapper failures preceded the passing trace.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TaFdXhTdYMkW1xrV6ApT6Y
This commit is contained in:
1 parent
6ccf3718ff
commit
7a972f513d
1 file changed
+1
-1
@@ -2597,7 +2597,7 @@ float UVoxelGenerator::GetDensityAt(float WorldX, float WorldY, float WorldZ) co
|
|||||||
// Le seul point d'entrée de la pile dans le chemin de production. Elle rend la convention
|
// Le seul point d'entrée de la pile dans le chemin de production. Elle rend la convention
|
||||||
// MC (négatif = solide) comme les fonctions d'archétype, donc les disturbances et la couche
|
// MC (négatif = solide) comme les fonctions d'archétype, donc les disturbances et la couche
|
||||||
// de diff qui suivent ne voient aucune différence.
|
// de diff qui suivent ne voient aucune différence.
|
||||||
if (!VoxelDensityAblation::IsTunnelCoreOff() && CP_UseOpStack)
|
if (CP_UseOpStack)
|
||||||
{
|
{
|
||||||
const bool bCanUseFusedEvaluator =
|
const bool bCanUseFusedEvaluator =
|
||||||
GVoxelForgeUseFusedEvaluator != 0
|
GVoxelForgeUseFusedEvaluator != 0
|
||||||
|
|||||||
Reference in new issue
Block a user