Perf: avoid drawing opaque geometry twice (depth prepass 3.5 ms) #259
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#259
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 Baltimare party (85 avatars, 4K, 5090, FSR native AA, RT shadows): ~47-54 FPS, GPU ~20 ms ≈ CPU main ~21 ms (balanced).
g_prepass = 3.49 ms, then gbuf_static 2.60 + gbuf_rigged 1.05 redraw the same geometry. Options: HiZ-only occlusion (two-phase cull already exists) and drop the prepass where early-Z in the G-buffer pass suffices; prepass only for alpha-masked/expensive materials; or move toward the visibility buffer (#256).
Status 2026-10-10: not done. The depth pre-pass is still on by default (RenderVKDepthPrepass: opaque + alpha-mask depth pre-pass, then the lit pass tests EQUAL with early fragment tests), so opaque geometry is still drawn twice by design; g_prepass measured ~1.0 ms at 4K in a quiet home region (3.5 ms at the Baltimare party). Two-phase occlusion (
cf18746620) exists. The options in the description (drop the pre-pass where early-Z suffices, pre-pass only for alpha-mask / expensive materials, visibility buffer #256) are still open; RenderVKDepthPrepass 0 is the live A/B for measuring.Closing: measured, and the premise doesn't hold. The depth prepass is a large net win.
A/B on 2026-10-10 (RTX 5090, 3840x2088 with FSR, busy sim, GPU timers,
RenderVKDepthPrepasstoggled live):"Draw geometry once" without losing these inputs is the visibility-buffer work: #256. Removing the forward fallback is tracked separately (#640).