Repository navigation
feat(vk): RX_VK_WAIT_FIRST_PART=1, an A/B of #2419's fence-wait cost … - #2587
SadTransGirl wants to merge 1 commit into
Conversation
…it cost where pools have VRAM mirrors NotRexed#2419 made the game's fence waits cover the last part of a split submission, which fixed one-frame flashes on iGPUs (NotRexed#997), where the later parts read guest memory in place. It costs frame rate: 45-70 -> 38-49 fps on the ROG Ally X it was measured on, and it was not measured on discrete GPUs, where the buffer pools have VRAM mirrors synced at submit. RX_VK_WAIT_FIRST_PART=1 maps a value to its first part again, as before NotRexed#2419, and only when mirrors are on. The default is unchanged. Pools left without a mirror (budget full, over 1 GB) are still read in place, so this is an A/B to measure the cost on NVIDIA and discrete AMD, not a fix. Assisted-by: Claude Opus 5.5, Claude Mythos 5.2 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Mythos 5.2 <noreply@anthropic.com>
|
Measured on a discrete AMD card, as the description asks. Short version: on this card #2419's wait costs about half the frame rate in Kokiri Forest, and Setup
The bridge's own fps agree: 61.1 against the log's 62.1. The log confirms the switch: Flashes (
Why, on this card. The mirror budget fills, and a pool is read in place: That is the case the description warns about ( Suggestion. The gain is so large here (2x in Kokiri) that the last-part wait looks worth narrowing rather than dropping. For example, a value keeps its first part's recording only when none of the later parts reads or writes a pool without a mirror, so the unmirrored pool decides per submission instead of per run. I'm happy to measure a version like that on this card, flashes included. |
|
Thanks for measuring this on the RX 5600 XT, @Waryxxful. That settles it: the switch's gain comes with #997's flashes back wherever a pool is read in place, and on a 6 GB card that's normal play. On NVIDIA, #2602 has since taken back most of #2419's cost (Castle Town to the field within about 1 fps of the switch here), so an A/B switch isn't worth carrying. Closing this. Your narrower idea (a value keeps its first part's recording only when no later part reads or writes a pool without a mirror) looks like the real fix for AMD. It's a different change from this one, so it would be its own PR. |
…where pools have VRAM mirrors
#2419 made the game's fence waits cover the last part of a split submission, which fixed one-frame flashes on iGPUs (#997), where the later parts read guest memory in place. It costs frame rate: 45-70 -> 38-49 fps on the ROG Ally X it was measured on, and it was not measured on discrete GPUs, where the buffer pools have VRAM mirrors synced at submit.
RX_VK_WAIT_FIRST_PART=1 maps a value to its first part again, as before #2419, and only when mirrors are on. The default is unchanged. Pools left without a mirror (budget full, over 1 GB) are still read in place, so this is an A/B to measure the cost on NVIDIA and discrete AMD, not a fix.
Assisted-by: Claude Opus 5.5, Claude Mythos 5.2