[rendering] Cluster LOD perf: close the gap to legacy in avatar-heavy scenes (RT cut, shadow rig cull, pre-cluster pass, raster) #1008
Labels
No labels
amd
avatars
bug
builder
cannot-reproduce
crash
epic
feature
from-viewer
gl-removal
known-limitation
monitoring
parity
perf
platform
priority
critical
priority
high
priority
low
priority
medium
provenance
rendering
rt
status
in-progress
status
testing
status
up-next
triage
ui
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sky_line/Slipstream#1008
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Measured at a busy party; full numbers below. Goal: CLOD at or below legacy so it can replace legacy (#642). Refs #928.
Build
d75c207bb2. DLSS RR at 1280x696 render. Half-res RT signals (RenderVKGIScale 0.5,RenderVKDlssFullResSignalsMode 0). GI 3, ReSTIR DI 3, emissive on, RenderVKGILatencyFrame 1.
65 avatars traced. CLOD was turned on live at 01:24:49 UTC. The LOD controller climbed to
tolerance level 3 (8 px) because the cluster+rigged GPU time (~5.2 ms) was over its 5 ms budget.
Probes were turned off at 01:27:22.
Reading
still had probes on, which cost it about 0.7 ms (pr_trace). So the real gap is closer to
~3 ms.
g_pre_cl_endtake ~3.6 ms, against~2.7 ms for legacy's terrain tris, prepass and rigged G-buffer. The post-pass rigged draw
costs +0.6 ms.
BLAS build + skin + weld total ~5.6 ms, against ~2.9 ms for legacy refit + preskin. The RT
cut is re-selected and rebuilt every frame.
Probe capture under CLOD (collect later; probes are going away under GI)
With CLOD on, these became large: pr_rt_alpha ~6.3, pr_rt_gbuf ~4.7, pr_alpha ~4.6 and
pr_rt_rigcull ~1.3 ms, against ~0 under legacy. They mostly ran beside the GI chain:
q_gi_beside was 8.0, and turning probes off moved that wait into g_join_gi. So the
critical-path cost was only ~0.9 ms.
Probe faces (128 px) seem to draw and trace the cluster cut at view detail, and take alpha
paths that legacy probe capture skipped.
To do if probes stay for the non-GI tiers:
Targets (in order)
clusters that changed. Reuse #1007's cadence and pose-skip rules for rigged staleness.
c_shadow_rigcull(1.3 ms) andg_pre_cl_end(1.3-1.5 ms): find what they do that legacydidn't.
Related ticket: #928 (user: FPS loss in avatar-heavy scenes, CLOD on).
Target 2 findings (2026-10-24, same night)
cluster extensions. The tier line read
raster=1 mdi_uint8 | cmdgen=0 draw_count, with:"mesh_shader: needs RenderVKClusterLOD on at startup or RenderVKClusterDeviceFeatures 2
(restart); device_generated_commands / partitioned TLAS: needs RenderVKClusterLOD on at
startup". So the cluster raster numbers (g_pre_cl_end 1.34, g_gbuf_cluster_t1 2.47,
g_p2_post_rig 1.19) are the uint8 draw-indirect tier, not the mesh-shader tier.
Re-measure with CLOD on at startup before working on the raster side.
asyncJoin(cmd)(the joinon the async RT build), so it included the graphics queue waiting for the longer cluster RT
build (q_rt_build 4.5 vs 3.6 ms). The join now has its own mark,
g_join_rt_build. Target 1(#1008 RT cut) is what shrinks it.
Hi-Z and TAA). Legacy's rigged pre-pass was ~0.8 ms (g_prepass 0.95 minus static ~0.15). So
at the fallback tier the clusters' pre-pass + G-buffer ~= 3.8 ms, against legacy rigged
~2.4 ms (pre-pass ~0.8 + g_gbuf_rigged 0.61 + the rigged share of g_term_tri ~1.0).
avatars are missing from the terminator-triangle image (RT shadow terminator fix), and
whether that is a correctness gap or intended.
released (6490 slots, 262 MB).
Mesh-shader tier (CLOD on at startup), same party, 01:39-01:40 UTC, 19 samples
Tiers:
raster=2 mesh_shader | cmdgen=1 dgc_ext | rt=2 clas+ptlas. PTLAS has 0 instances (RenderVKClusterRT 1).GPU total 22.46 ms / 44.2 FPS, which is parity with legacy (22.48 / 44.1).
bd1911891f.Parked 2026-10-24 (owner): CLOD RT perf is not profitable right now. Measured after #1008 fix / #1010 / #1011 at the party: RT build still ~5.6 ms; RT cut sub-timers: place 1.26, cut 0.55, admit 0.36, gather 0.23, reset 0.10, select 0.15; rig_skin (mode 9: copying the raster skinned vertices + the reuse compare) 2.67 ms, CLAS build alone 0.71, BLAS 0.66. CLAS reuse barely fires with dancing avatars (70.9k compared, 2.9k kept, 86.4k rebuilt). #1010 arena is fine (0 dropped / hidden / coarsened). Next step if revisited: remove the RT vertex copy (point CLAS build + hit shading at the raster skinned output for this frame; ~-2.5 ms), then mode 12 placement, then the CPU front end. Notes: research PLAN_60FPS_PARTY_2026-10-24.