perf(vk): the capture's streaming-store copy opt-in (RX_VK_CAPTURE_NT=1): more stutters, no gain measured #1841
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot!1841
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/capture-nt-opt-in"
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?
#1619 (merged) made the memory capture copy pages with non-temporal stores by default. On this machine it neither shortened the capture nor smoothed the frame, and it added stutter.
Measured
One build (main + #1619), RTX desktop, 2560x1440 docked, the field smoothness walk. Four runs interleaved (off, on, off, on):
Both 'on' runs are worse than both 'off' runs in stutters, p99 and 1% low. The capture time per submit doesn't drop.
Change
capture_nt()defaults to off;RX_VK_CAPTURE_NT=1turns it on. The copy andtests/test_capture_copy_nt.pystay (it passes, SSE2 and AVX2), so a CPU where it helps can still use it. The comment records the numbers.🤖 Generated with Claude Code
Looks good. The flip is right: unset or
0gives plain memcpy, any non-zero integer turns the streaming copy on, andcopy_fence()already keys offcapture_nt(), so the off path doesn't pay for an sfence either. The four interleaved runs are a reasonable basis for making it opt-in, and keeping copy_nt andtests/test_capture_copy_nt.py(itscapture_nt() ? copy_nt : std::memcpycheck still matches) means it stays tested for anyone who sets the variable.No conflict with #1375 (merged today): its copy_split/copy_part changes sit below this in vk_memory.cpp and GitHub reports the branch as mergeable. The env var isn't documented anywhere outside this comment block, so there are no docs to update.
CI: the finished jobs (Windows Vulkan back end, appimage, F2I lowering) pass; the Python checks were still pending when I looked.
Nit:
atoimeansRX_VK_CAPTURE_NT=trueor=yesquietly stays off. That's the same parsing the other RX_VK_* switches use, so it's fine as is. The comment above says=1, which is what people will copy.Can you sync with @itaskaev2 and figure out proper solution