Repository navigation
Conversation
f0a61fd to
a620ba1
Compare
…irrors never pass Auto's Review of NotRexed#2834: Low's 1536 MB and Auto's 768 MB disagreed on the same 6 GB card, and preset_caps_memory lets Low's budgets through on cards up to 6.75 GB, so a 4 GB card on Low (or on Minimum with the row at 3.6 GB) would have asked for 1.5 GB of mirrors where it had 512. gpu/vk/mirror_budget.h holds the rule, apart from Vulkan: - auto_bytes: a quarter of the card, at most 3 GB, as before above 6.5 GB; an eighth on cards of 4.5 GB or less (512 MB on 4 GB), as before; a quarter between (1536 MB on 6 GB, was an eighth). The eighth there was for the empty image blocks the images' pool made at the start, which NotRexed#2711 now makes in the textures' pool. - preset_bytes: a Quality preset's mirrors never more than Auto's on the card. A budget chosen on the VRAM budget row itself stays the player's on any card. tests/test_mirror_budget.py runs the rules and checks that mirror_budget uses them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
with NotRexed#2834, Hyrule Field and Castle Town Market Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
a620ba1 to
45cec91
Compare
…irrors never pass Auto's Review of NotRexed#2834: Low's 1536 MB and Auto's 768 MB disagreed on the same 6 GB card, and preset_caps_memory lets Low's budgets through on cards up to 6.75 GB, so a 4 GB card on Low (or on Minimum with the row at 3.6 GB) would have asked for 1.5 GB of mirrors where it had 512. gpu/vk/mirror_budget.h holds the rule, apart from Vulkan: - auto_bytes: a quarter of the card, at most 3 GB, as before above 6.5 GB; an eighth on cards of 4.5 GB or less (512 MB on 4 GB), as before; a quarter between (1536 MB on 6 GB, was an eighth). The eighth there was for the empty image blocks the images' pool made at the start, which NotRexed#2711 now makes in the textures' pool. - preset_bytes: a Quality preset's mirrors never more than Auto's on the card. A budget chosen on the VRAM budget row itself stays the player's on any card. tests/test_mirror_budget.py runs the rules and checks that mirror_budget uses them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
with NotRexed#2834, Hyrule Field and Castle Town Market Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, not 512 Every 6 GB card starts on the Low (6GB) preset, whose 512 MB of mirrors left most of the game's memory pools out of VRAM: the GPU read them over PCIe and the game's readbacks waited for whole submissions. RTX 3060 Laptop (6 GB), Hyrule Field, a scripted walk, two runs each: 30-32 GB of bound ranges read over PCIe every 600 submits at 512 MB, ~0 at 1536. Main: 25.4, 25.4 fps, GPU 26.7-27.2 ms a frame, 525-645 frames over 50 ms. With this and the commit before (a build of them, no switches): 30.1, 31.8 fps, GPU 18.4-19.1 ms, 161-285 frames over 50 ms, VRAM at most 5.7-5.8 GB against 5.9. 1024 MB was not enough: 26.5 and 31.3 fps, the budget full and which pools stayed out varying. The row's 3.6 GB step (the Low preset's) only: a preset's budget applies on the card it is for (preset_caps_memory). The 1.5 GB comes out of what the images' pool no longer holds empty. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…irrors never pass Auto's Review of NotRexed#2834: Low's 1536 MB and Auto's 768 MB disagreed on the same 6 GB card, and preset_caps_memory lets Low's budgets through on cards up to 6.75 GB, so a 4 GB card on Low (or on Minimum with the row at 3.6 GB) would have asked for 1.5 GB of mirrors where it had 512. gpu/vk/mirror_budget.h holds the rule, apart from Vulkan: - auto_bytes: a quarter of the card, at most 3 GB, as before above 6.5 GB; an eighth on cards of 4.5 GB or less (512 MB on 4 GB), as before; a quarter between (1536 MB on 6 GB, was an eighth). The eighth there was for the empty image blocks the images' pool made at the start, which NotRexed#2711 now makes in the textures' pool. - preset_bytes: a Quality preset's mirrors never more than Auto's on the card. A budget chosen on the VRAM budget row itself stays the player's on any card. tests/test_mirror_budget.py runs the rules and checks that mirror_budget uses them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
with NotRexed#2834, Hyrule Field and Castle Town Market Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
45cec91 to
14b92e2
Compare
|
Thanks for the review. Updated:
#2711 alone (A) against #2711 + this (B), RTX 3060 Laptop, Low, DLSS, standing with the camera turning for 60 s, two runs each in turn. Built on 51da046 + #2711: main's renderer is API 20 with a new translator stamp, which this PC's game and program cache don't take.
You were right that the textures' budget is what gives: about 1 GB in the market and under 0.9 GB in Hyrule Field, where twice as many textures were made again (11 against 4-6 in 60 s; headless, so I haven't looked at them on screen). The market, the heavier spot, is the clearer win: +11% fps, GPU -24%, half the long frames, no more textures made again. With #2711 alone the driver's count went past the allowance in Hyrule Field (5.36-5.47 of 5.04 GB); with this it stayed under there and reached it in the market. Not done: another 6 GB card, or AMD. I can't run those here; a tester with a 2060, a 1660 or an RX 5600 XT on the same two spots would settle it. If the texture side needs holding back, the two things I'd measure next are |
6 GB cards (the RTX 3060 Laptop, 2060, 1660 and the like) start on the Low preset, whose 512 MB of mirrors leaves most of the game's memory pools out of VRAM: the GPU reads them over PCIe, 30-32 GB of bound ranges every 600 submits in Hyrule Field on an RTX 3060 Laptop. This gives those cards a quarter of the card, 1536 MB, on Low and on Auto alike: in Castle Town Market 20 → 22.4 fps, GPU 32 → 25 ms a frame, half the frames over 50 ms.
What changed
gpu/vk/vk_menu.cpp). It is the Low (6GB) preset's, whichmenu_first_start_for_gpugives every dedicated card of 4.5-6.5 GB.gpu/vk/mirror_budget.h,auto_bytes, used bymirror_budgetinvk_memory.cpp): cards over 4.5 GB and up to 6.5 GB get a quarter (1536 MB on 6 GB; it was an eighth, 768). Cards of 4.5 GB or less keep an eighth (512 MB on 4 GB), larger ones a quarter up to 3 GB as before. The eighth on 6 GB cards was there because the image blocks made at the start sat empty beside the mirrors; since fix(vk): make the blocks at the start in the pool the textures are made in (#2690) #2711 they are made in the textures' pool.preset_bytes, when a Quality preset set the budgets): Low on a 4 GB card, whichpreset_caps_memorylets through, or Minimum with the row moved to 3.6 GB, stays at 512. A budget chosen on the VRAM budget row itself stays the player's on any card (feat(menu): a VRAM budget row of its own (builds on #1358) #1859).tests/test_mirror_budget.pyruns the rules and checks thatmirror_budgetuses them;tests/test_vram_budget_row.pyhas Low's 1536.docs/development.mdsays whatRX_VK_MIRROR_MBdefaults to.Tested
Windows 11, RTX 3060 Laptop 6 GB (5.0-5.1 GB allowed), NVIDIA 621.14, Ryzen 7 6800HS, 16 GB. The first start's Low (6GB) budget, DLSS (1152x648 → 1536x864), Reflex on, Game speed Per frame (
HOS_REALTIME_STEP=0). No window (HOS_HEADLESS), input through the control bridge: the debug teleport, then standing with the camera turning for 60 s. A = 51da046 + #2711, B = that + this; both renderers built with llvm-mingw (RX_VK_ONLY,RX_RELEASE=1, NVIDIA DLSS). main's own renderer (API 20, a new translator stamp) does not run against this PC's game and program cache, so the base is the installed build's plus #2711. Two runs each, in turn:The cost is the textures' budget: about 1 GB in the market and under 0.9 GB in Hyrule Field, where twice as many textures were made again in 60 s (headless: not looked at on screen). Earlier, on a scripted walk (main before #2711, the preallocation off by switch): 1536 MB took ~0 GB over PCIe every 600 submits against 30-32 GB, GPU 27 → 19.5 ms; 1024 MB gave 26.5 and 31.3 fps with the budget full and which pools stayed out varying.
python -I -B tests/run_all.pyon Windows: 472 passed, 10 failed, 41 skipped. The same 10 fail on main on this PC (symlink privilege,dotnet restore, nogcc, andtest_readme_menu_rows: the Skip opening row has no README line).docs/tested-configurations.md.Not tested: another 6 GB card (a desktop one with a display attached has less allowed), AMD (GCN keeps its mirrors off) and Intel, Linux, 4 GB cards (the cap keeps them at 512).
Overlap
tests/test_vram_budget_row.py's preset table and thekVramMirrorMbline: whichever lands second updates them. With both, Balanced on an 8 GB card mirrors 1536 MB (Auto gives it 2048).🤖 Generated with Claude Code