streaming: near LODs first (walkable ring, LOD0, LOD1, LOD2, then far); exact passage trims (L78)
- Headless and Unreal schedulers drain the collision-critical ring, then LOD0-2, then far LODs at low priority. LOD0-2 ready (W8 medians): SW 4.36->1.76, FI 6.89->5.26, TN 4.88->3.22, VS 2.71->1.56 s. Whole view roughly unchanged (FI/VS slightly later). KNOWN RISK: far tiles wait until every near tile is ready, so far LODs may starve while moving fast (to address next). - Exact composer trims: tile-level upper-mouth candidate list, segment-index min/max rejection before lower_bound, 64-entry thread-local value-noise corner cache. Passage share 65 -> 63%. - World exact: 24/24 hash matrix + pinned L75 owner hash. Fast tier PASS. Linux UE host builds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
1 parent
5e091d254c
commit
ec20994a8e
10 files changed
+718
-52
No files matched your search
@@ -5061,6 +5061,7 @@ namespace StandaloneStreamBenchmark
|
||||
*VoxelForgeCore::Linux77Profiler::RouteCount*2>,9> L77DispatchByLOD{};
|
||||
std::array<std::uint64_t,9> L77GridInteriorByLOD{},L77GridHaloByLOD{};
|
||||
std::array<double,9> L77LODReadySeconds{};
|
||||
std::array<double,9> LODReadySeconds{};
|
||||
std::array<std::uint64_t,9> SkirtTrianglesByLOD{};
|
||||
std::array<std::uint64_t,9> TileCountByLOD{};
|
||||
std::array<std::uint64_t,9> ClassifiedAirTilesByLOD{},ClassifiedSolidTilesByLOD{};
|
||||
@@ -5129,6 +5130,9 @@ namespace StandaloneStreamBenchmark
|
||||
const std::size_t LOD=static_cast<std::size_t>(Tile.Key.Level);
|
||||
const auto& TileDiagnostics=Tile.CoreDiagnostics;
|
||||
++TileCountByLOD[LOD];
|
||||
if(TileCountByLOD[LOD]==ExpectedTilesByLOD[LOD])
|
||||
LODReadySeconds[LOD]=std::chrono::duration<double>(
|
||||
Tile.CompletedAt-ColdStart).count();
|
||||
if(bLinux77Profile)
|
||||
{
|
||||
const auto& D=TileDiagnostics;
|
||||
@@ -5551,6 +5555,23 @@ namespace StandaloneStreamBenchmark
|
||||
}
|
||||
}
|
||||
}
|
||||
double NearLODReadySeconds=0.0;
|
||||
uint64 NearLODExpected=0,NearLODCompleted=0;
|
||||
for(std::size_t LOD=0;LOD<=2;++LOD)
|
||||
{
|
||||
NearLODExpected+=ExpectedTilesByLOD[LOD];
|
||||
NearLODCompleted+=TileCountByLOD[LOD];
|
||||
if(ExpectedTilesByLOD[LOD]!=0)
|
||||
NearLODReadySeconds=std::max(NearLODReadySeconds,LODReadySeconds[LOD]);
|
||||
}
|
||||
std::printf("[WorldAssemblerNearLODReady] lods=0-2 tiles=%llu/%llu cold_ready_s=%.6f\n",
|
||||
static_cast<unsigned long long>(NearLODCompleted),
|
||||
static_cast<unsigned long long>(NearLODExpected),NearLODReadySeconds);
|
||||
for(std::size_t LOD=0;LOD<TileCountByLOD.size();++LOD)
|
||||
if(ExpectedTilesByLOD[LOD]!=0)
|
||||
std::printf("[WorldAssemblerLODReady] lod=%zu tiles=%llu cold_ready_s=%.6f\n",
|
||||
LOD,static_cast<unsigned long long>(TileCountByLOD[LOD]),
|
||||
LODReadySeconds[LOD]);
|
||||
Streamer.Stop();
|
||||
Streamer.DumpColdTimelineTrace();
|
||||
bool bScreenSpaceGatePassing=true;
|
||||
|
||||
Reference in new issue
Block a user