wip(assembler): round S8 -- region rebuilds no longer stall admission; result backlog capped

voxel.CoreRegionConcurrentAdmission (default on): tiles independent of the
entering region keep submitting while a region page compiles; pages are
immutable shared_ptr owners so running readers survive eviction. 6 m/s: 11
whole-pass skips -> 0, walkable ring ready at every centre change.
voxel.StreamingResultBacklogCap=256 bounds finished results (slow-apply worst
case 125 -> 76 MB). Spawn unchanged at ~7.7 s: LOD8 is 46% of worker time.
At 60 m/s + teleport the collision ring is outrun (102/113 centres).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-19 09:43:03 +02:00
1 parent 5eb9ee76ff
commit 8440adc742
10 files changed
+1011 -78

No files matched your search

@@ -1021,6 +1021,9 @@ namespace VoxelForgeCore
bool compile(const ShapeBuildRequest& request, const JobScheduler& scheduler,
std::string& error);
// True only when a fine tile needs a separately compiled region before generation.
// Vrai seulement si une tuile fine doit attendre la compilation d'une region dediee.
bool needsTileRegion(const TileKey& tile) const;
// Compile missing detail regions for entering fine tiles. Generated tile keys map to
// shared world-coordinate regions. The default analyticOnly path coalesces each entering
// LOD slab, builds its primitives/bins, and evaluates density on demand without
+10
View File
@@ -909,6 +909,16 @@ namespace VoxelForgeCore
return ok;
}
bool World::needsTileRegion(const TileKey& key) const
{
if(!impl_||!impl_->owner||!impl_->shape||!impl_->shape->IsBuilt()
||key.lod<0||key.lod>=impl_->configuration.fullResolutionLodCount)
return false;
if(CoveredByBaseShape(impl_->buildRequest,impl_->configuration,key))return false;
std::shared_lock lock(impl_->tileRegionMutex);
return !impl_->tileRegions.contains(key);
}
bool World::compileTileRegion(std::span<const TileKey> tiles,std::uint32_t workerLimit,
const JobScheduler& scheduler,std::string& error,
std::size_t* outCompiledTiles,