Idea: cut the per-draw cost of the compute fallback (the Market at 2,300 draws: GPU 22.7 ms plus 19 ms of replay submit on an RX 5600 XT) #549
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
beanstalk: approved @ 1697603
beanstalk: approved @ 2c5a62e
beanstalk: approved @ 4fd82b7
beanstalk: approved @ 64d6d09
beanstalk: approved @ 6f91fae
beanstalk: approved @ 70a78f9
beanstalk: approved @ 8d361dc
beanstalk: approved @ 9d8356e
beanstalk: approved @ abf2227
beanstalk: approved @ d82f202
beanstalk: approved @ e5f1e40
beanstalk: approved @ ee8ab5f
ci: approved
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/macos
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
regression
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
ci: approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot#549
Loading…
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?
The idea
On a card without mesh shaders, once the mirror retry of #288 is in, what is left under 30 fps is not a memory mode: it is the cost of each draw. I am looking for someone who knows the compute fallback or the replay's submit path to say which part of that cost can go, and for the same numbers from other cards.
The numbers. RX 5600 XT 6 GB (RDNA1, Adrenalin 26.10.1), Ryzen 5 5600X, Windows 11, Render resolution 50% of 1920x1080. Main
9c9d69edwithea6dc5f5(the mirror retry) cherry-picked, the same renderer in the four runs. The Market, 25 s while Link walks; the walk ends in a different place each run, which is why the draws differ:At 2,290 draws the frame is 48 ms, more than the GPU's 22.7 ms and the submit's 19.1 ms added up. The submit there is
draw11.5 ms,commands3.6 ms,uploads2.2 ms,memory_sync1.7 ms,dispatch1.3 ms. Kokiri Forest on the same renderer, 730 draws: 46-48 fps, GPU 14.5-14.8 ms, submit 9 ms.Where the GPU's frame goes (
RX_VK_PASS_TIMING=2, one block at the Desert Colossus, 842 draws; the shares matter, the profile lengthens the frame):What I tried that did not move the frame, so nobody repeats it:
RX_VK_READBACK_LATE=newest: the long readback waits are gone (0 of 60 log lines against 4 to 19), the Market is the same, 27-28 fps at 1,400-1,600 draws.RX_VK_ASYNC=1: worse everywhere, 13-25 fps in the six areas.What does help on this card is
RX_VK_WB_MAX_KB=1024: the write-back above falls from 60 to 16 MB a frame and the GPU's frame by 2.5 ms (#547 has the runs).The questions:
draw. #402 and #410 report the same wall on other hardware. Is there work in flight on it that a card like this one could test?Who can help without writing code: anyone on the compute fallback (the log says
no mesh shaders (the compute fallback)). AddRX_VK_PASS_TIMING=2tolongshot_env.txt, stand in the Market for a minute and paste onevk: GPU pass timingblock fromlongshot_log.txthere with the card and the driver. Two more cards would show whether the passes and the dispatches weigh the same on NVIDIA and on Polaris.Anything else
Where the two things that did not help were run, since #326 cites this issue and I had left that out.
Main
9c9d69edwithea6dc5f5(the mirror retry) on every side,RX_VK_MIRROR_SPARSE=0, RX 5600 XT 6 GB, Adrenalin 26.10.1, Windows 11, render resolution 50% of 1920x1080. Six areas by teleport as child Link, 10 s to settle and then 25 s while Link walks by scripted input; two runs a side, interleaved with the other sides. The PR 326 side is its commite089b486(the head on 2026-11-14, before the tables' fix9e8545acand the rebase ontoe090cc48) cherry-picked onto that base; the barriers side is a local patch that narrows the compute fallback's barriers, not a PR. fps / GPU ms a frame / replay submit ms a frame:Only Kokiri Forest is steady enough between runs to compare (the walk ends in a different place in the others, so the draws differ by up to 2-3 times): there neither side moves the GPU's frame or the submit by more than the base's own spread. That is all "no gain" means here: two runs a side, one card, an earlier head of the PR. It is not a result against the PR's own measurement on an RTX 5080.