Hover pick costs ~3.5 ms of main-thread time per frame: move it off the CPU raycast #702
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#702
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 (2026-10-12, perf sample of the main thread, ~68 FPS scene):
LL_updateUIis ~3.6 ms/frame, and ~3.5 ms of that is not UI: it is the world hover pick (LLToolPie::handleHover->pickImmediate->cursorIntersect).Breakdown of the CPU raycast (overlapping): alpha-tested face tests (
LLCleanPickAlpha::intersectFace) ~2.4 ms, worn attachments (vkIntersectAttachmentObject) ~1.6 ms, HUD (vkPickHUD) ~1.3 ms, instance store segment test ~2.1 ms.The #361 throttle (re-pick only on mouse / modifier / camera change or every 100 ms) doesn't help much in practice: the camera changes on almost every frame.
Direction (to be decided before work starts): answer the hover pick on the GPU against what was drawn (the rigged/particle pick in
llcleanpickvkalready does this), harvested a couple of frames late; keep an exact pick for clicks. Design questions are being discussed first.Design decided (2026-10-12):
Shipped in 1.3.0 Beta 7: hover and click picking run on the GPU (about 3.5 ms less main-thread time per frame).