It should be evicting things based on that cap, I wouldn’t say it’s a soft hint, but it is pretty firm. In your screenshot, those meshes are Raytrace meshes which should be a part of a separate streaming pool and have their own tunables by its own dedicated system in RayTracingGeometryManager.cpp, completely separate from the mesh/texture streaming pool. Here are the relevant CVars:
Pool Size & Residency
CVar: r.RayTracing.ResidentGeometryMemoryPoolSizeInMB
Default: 400
Description: Size of the RT geometry pool in MB. Unreferenced geometries stay resident up to this budget to avoid rebuild costs when re-requested.
────────────────────────────────────────
CVar: r.RayTracing.NumAlwaysResidentLODs
Default: 1
Description: Number of LODs per geometry group to keep resident even when not referenced by the TLAS.
────────────────────────────────────────
CVar: r.RayTracing.UseReferenceBasedResidency
Default: true
Description: Evict/keep geometries based on whether they’re referenced in the TLAS.
────────────────────────────────────────
CVar: r.RayTracing.ApproximateCompactionRatio
Default: 0.5
Description: Ratio used to estimate post-compaction size (temporary — will be replaced by actual tracking).
Streaming & Build Throttling
CVar: r.RayTracing.Streaming.MaxPendingRequests
Default: 128
Description: Max in-flight streaming requests for RT geometry data.
────────────────────────────────────────
CVar: r.RayTracing.OnDemandGeometryBuffersStreaming
Default: true
Description: Stream VB/IB buffers on-demand for dynamic geometry instead of keeping them in memory.
────────────────────────────────────────
CVar: r.RayTracing.Geometry.MaxBuiltPrimitivesPerFrame
Default: -1 (unlimited)
Description: BLAS build budget per frame in triangle count. When positive, builds are spread across frames.
────────────────────────────────────────
CVar: r.RayTracing.Geometry.PendingBuildPriorityBoostPerFrame
Default: 0.001
Description: Priority increment per frame for pending builds that weren’t scheduled.
Debug
CVar: r.RayTracing.Debug.GeometryMemoryPool.AlwaysResidentWarningPercentage
Default: 20
Description: Warns when always-resident geometry exceeds this percentage of the pool.
────────────────────────────────────────
CVar: r.RayTracing.DumpUnreferencedAlwaysResidentGeometries
Default: (command)
Description: Dumps unreferenced always-resident geometries to CSV for analysis.
The primary mechanism you want to look at is: r.RayTracing.ResidentGeometryMemoryPoolSizeInMB.
That said, I did see roughly 200 MB of skin cache data, which is all of the meshes in the scene, many of which are those mutable-made meshes just existing and being posed on the GPU. And I didn’t see any lod duplication in your data there. That system seems to be working correctly, but you would want to double check and make sure that anything that you expect to see there is there.
Based on the capture you did, it looks like you’re at roughly 12gigs of VRAM usage, 6 resident/6 non resident. Is the primary concern that you’re dealing with that you’re hitting that cap?
Dustin
[Attachment Removed]