streaming: split dense passage-junction grid fills; heavy-first order + far-parent deferral in Unreal (L85)
Tiles with passage-overlap score >= 9 split grid fill over up to 4 helper lanes (disjoint rows, same per-sample order, join before MC) when workers are idle. FI junction tile fill 173 -> 99 ms; estimated serial floor ~0.55-0.60 s. Readiness essentially unchanged (FI/TN LOD0-2 ~2.15 s @W12): the limit is now aggregate work, not single tiles. Unreal: LOD0-2 ordered by passage overlap before travel/distance (L80 modes kept); far parents built after LOD0-1, LOD2 gated on them; helper budget via ParallelFor. Unreal null-RHI FI arrival: LOD0-2 resident at 3.65 s. All tile hashes identical to L84 (four whole views). 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
0a98da6fd0
commit
06f558dc91
17 files changed
+1561
-54
No files matched your search
@@ -271,11 +271,32 @@ public:
|
||||
}
|
||||
ActivePassageTileQueries=this;
|
||||
}
|
||||
// Duplicate the immutable per-tile masks onto a density-grid helper worker. Mutable
|
||||
// segment-range caches remain lane-local so helpers never race with the parent query.
|
||||
explicit FScopedPassageTileQueries(const FScopedPassageTileQueries& source)
|
||||
:shape_(source.shape_),minimumSubvoxels_(source.minimumSubvoxels_),
|
||||
maximumSubvoxels_(source.maximumSubvoxels_),featureIndices_(source.featureIndices_),
|
||||
stampIndices_(source.stampIndices_),cavernFeatureIndices_(source.cavernFeatureIndices_),
|
||||
passageRoutes_(source.passageRoutes_),passageColumns_(source.passageColumns_),
|
||||
passageMouthSupports_(source.passageMouthSupports_),
|
||||
passageMouthSupportSegments_(source.passageMouthSupportSegments_),
|
||||
passageSegmentRangeCaches_(source.passageSegmentRangeCaches_.size()),
|
||||
upperMouthSupportPassages_(source.upperMouthSupportPassages_),
|
||||
routeSegmentCandidateCount_(source.routeSegmentCandidateCount_),
|
||||
routeFeatureOverlap_(source.routeFeatureOverlap_),columnZOverlap_(source.columnZOverlap_),
|
||||
mayContainResolvedBoundaryBand_(source.mayContainResolvedBoundaryBand_),
|
||||
mayContainTransitionPassageFade_(source.mayContainTransitionPassageFade_),
|
||||
previous_(ActivePassageTileQueries)
|
||||
{ ActivePassageTileQueries=this; }
|
||||
~FScopedPassageTileQueries(){ActivePassageTileQueries=previous_;}
|
||||
FScopedPassageTileQueries(const FScopedPassageTileQueries&)=delete;
|
||||
FScopedPassageTileQueries& operator=(const FScopedPassageTileQueries&)=delete;
|
||||
|
||||
bool matches(const FStandaloneShapeWorld& shape) const{return shape_==&shape;}
|
||||
static const FScopedPassageTileQueries* CurrentFor(const FStandaloneShapeWorld& shape)
|
||||
{
|
||||
const FScopedPassageTileQueries* current=ActivePassageTileQueries;
|
||||
return current&¤t->shape_==&shape?current:nullptr;
|
||||
}
|
||||
bool hasFeature(std::size_t passageIndex,bool columnFeature) const
|
||||
{
|
||||
const auto& candidates=columnFeature?passageColumns_:passageRoutes_;
|
||||
|
||||
Reference in new issue
Block a user