VRAM use higher on v2.0.13 than v2.0.11 on an 8 GB card: dedicated memory full, 3+ GB spilled to shared system memory #1710

Closed
opened 2026-11-10 14:16:22 +00:00 by NotRexed · 13 comments
NotRexed commented 2026-11-10 14:16:22 +00:00 (Migrated from github.com)

Reported on Discord (8 GB card, Windows; v2.0.13).

What changed: on v2.0.11 the game used about 5.9 of 8 GB. On v2.0.13 it fills the card and spills into shared system memory. The player's Task Manager screenshot (GPU page, during play) shows:

  • dedicated GPU memory 7.5 / 8.0 GB
  • shared GPU memory 3.1 / 7.9 GB
  • GPU memory in all 10.6 / 15.9 GB
  • GPU use 47%

Memory spilled to shared system RAM is read over PCIe, which is the kind of overcommit that makes the frame rate drop and stay low on 8 GB cards (see #993 and #1400).

Why it's unexpected: v2.0.12 lowered the texture budget on cards with 8 GB or less to 45% of what the driver allows (#1485), so texture memory should be lower than on v2.0.11, not higher. Other pools changed since v2.0.11 too (render-target image pool #1416/#1436, upload budget, descriptor/mirror pools), so something other than textures may be growing.

What would help: a hookshot_log.txt from v2.0.13 after a few minutes in the same place, with its vk: VRAM: ... used of ... allowed, textures ... (budget ...) and memory heaps lines, the GPU model and driver, and if possible the same lines from v2.0.11.

Related: #993 (VRAM over budget on 4-8 GB cards), #1072 (memory growth), #1400.

Reported on Discord (8 GB card, Windows; v2.0.13). **What changed:** on v2.0.11 the game used about 5.9 of 8 GB. On v2.0.13 it fills the card and spills into shared system memory. The player's Task Manager screenshot (GPU page, during play) shows: - dedicated GPU memory **7.5 / 8.0 GB** - shared GPU memory **3.1 / 7.9 GB** - GPU memory in all **10.6 / 15.9 GB** - GPU use 47% Memory spilled to shared system RAM is read over PCIe, which is the kind of overcommit that makes the frame rate drop and stay low on 8 GB cards (see #993 and #1400). **Why it's unexpected:** v2.0.12 lowered the texture budget on cards with 8 GB or less to 45% of what the driver allows (#1485), so texture memory should be lower than on v2.0.11, not higher. Other pools changed since v2.0.11 too (render-target image pool #1416/#1436, upload budget, descriptor/mirror pools), so something other than textures may be growing. **What would help:** a hookshot_log.txt from v2.0.13 after a few minutes in the same place, with its `vk: VRAM: ... used of ... allowed`, `textures ... (budget ...)` and `memory heaps` lines, the GPU model and driver, and if possible the same lines from v2.0.11. Related: #993 (VRAM over budget on 4-8 GB cards), #1072 (memory growth), #1400.
NotRexed commented 2026-11-10 17:16:10 +00:00 (Migrated from github.com)

Update from the reporter: VRAM keeps growing the longer they play and spills into shared memory, and v2.0.11 did that too. So this looks like a leak over play time rather than only a higher starting level on v2.0.13. A log from a long session (its vk: VRAM: ... used of ... allowed, textures ... (budget ...) and memory heaps lines, early and late) would show what grows. Related: #1072.

Update from the reporter: VRAM keeps growing the longer they play and spills into shared memory, and v2.0.11 did that too. So this looks like a leak over play time rather than only a higher starting level on v2.0.13. A log from a long session (its `vk: VRAM: ... used of ... allowed`, `textures ... (budget ...)` and `memory heaps` lines, early and late) would show what grows. Related: #1072.
NotRexed commented 2026-11-10 18:18:17 +00:00 (Migrated from github.com)

Possibly related: floor and ground textures that go wrong after playing for a while and come back after reloading the save are now reported by two players on v2.0.14 (an RX 9070 XT, and Dodongo's Cavern 2F; see #1006 and #1717). If VRAM keeps growing until textures are evicted or fail, that would fit this issue's leak.

Possibly related: floor and ground textures that go wrong after playing for a while and come back after reloading the save are now reported by two players on v2.0.14 (an RX 9070 XT, and Dodongo's Cavern 2F; see #1006 and #1717). If VRAM keeps growing until textures are evicted or fail, that would fit this issue's leak.
pitsa-stack commented 2026-11-10 18:54:04 +00:00 (Migrated from github.com)

+1 as well as the ground textures going wrong after a longer play session and vram limit being reached. are there any options that help alleviate the issue a bit in the settings?
I am on rtx 5060 8 gb.

+1 as well as the ground textures going wrong after a longer play session and vram limit being reached. are there any options that help alleviate the issue a bit in the settings? I am on rtx 5060 8 gb.
xdv1m commented 2026-11-10 19:23:48 +00:00 (Migrated from github.com)

2.0.14

Image Image Image Image [hookshot_log - BALANCED (8GB) NO FG + HANDLED PROFILE ON.txt](https://github.com/user-attachments/files/34648183/hookshot_log.-.BALANCED.8GB.NO.FG.%2B.HANDLED.PROFILE.ON.txt) [hookshot_log - BALANCED (8GB) NO FG.txt](https://github.com/user-attachments/files/34648182/hookshot_log.-.BALANCED.8GB.NO.FG.txt) [hookshot_log - DLAA 1080p NO FG.txt](https://github.com/user-attachments/files/34648184/hookshot_log.-.DLAA.1080p.NO.FG.txt) [hookshot_log - MINIMUM (4GB) NO FG.txt](https://github.com/user-attachments/files/34648185/hookshot_log.-.MINIMUM.4GB.NO.FG.txt)

.14
I ran some tests following a specific route using various presets: Forest Temple > Kokori Forest > Hyrule Field > Kakariko Village > Teleport back to the Forest Temple, I repeat the route once more.

The issue I’ve described in some detail below causes frame drops and a 30%–40% reduction in frame-per-second (FPS) performance after a short period of gameplay.

One thing to note is that, whether using the minimum or the balanced preset, the system's power consumption appears to be the same.

(1) "minimum" (4GB) preset, the game starts after the loading screen using about 5GB of the 8GB of dedicated VRAM and 2GB of the 8GB of shared memory. By the end of the route, dedicated VRAM usage reaches around 7.2GB (out of 8GB), while shared memory jumps from 2GB to 4.5GB—occasionally hitting 5GB at certain points.

(2) "balanced" (8GB) preset (without Frame Generation), the figures are surprisingly similar—nearly identical, in fact. After loading, it starts with 5GB of the 8GB of dedicated video memory and 2GB of the 8GB of shared memory; by the end of the test, following the teleport back to the Forest Temple, it finishes with 7.2GB of the 8GB of dedicated video memory and 4.2GB of shared video memory (slightly less than with the "minimum" preset).

(3) with the "balanced" (8GB) preset (without Frame Generation) and the "Handheld" profile enabled, the results match the previous test, showing almost no difference compared to "Docked" mode at a higher resolution.

(4) When using the "balanced" preset with DLAA enabled, the results are the same as the "balanced" (8GB) preset without it, the only difference being a slightly lower frame rate.

1.PRESET MINIMUM (4GB) NO FG
FULLSCREEN: OFF
FRAME PACING: ON
FRAME CAP: 60
NVIDIA RÉFLEX: OFF
OUTPUT RESOLUTION: 1920x1080p
UPSCALER: GAME'S OWN
RENDER RESOLUTION: 50%
WINDOW SCALING FILTER: LANCZOS
HANDHELD PROFILE: ON
REBURST BUFFS: AUTO
Start of route >
Video memory: 5gb (8b)
shared memory: 2gb (8gb)
End of route >
Video memory: 7.3gb (8gb)
shared memory: 4.3gb (8gb)

2.PRESET BALANCED (8GB) NO FG
FULLSCREEN: OFF
FRAME PACING: ON
FRAME CAP: 60
NVIDIA RÉFLEX: OFF
OUTPUT RESOLUTION: 1920x1080p
UPSCALER: GAME'S OWN
RENDER RESOLUTION: 50%
WINDOW SCALING FILTER: LANCZOS
HANDHELD PROFILE: OFF
REBURST BUFFS: AUTO
Start of route >
Video memory: 5gb (8b)
shared memory: 2gb (8gb)
End of route >
Video memory: 7.4gb (8gb)
shared memory: 4.1gb (8gb)

3.PRESET BALANCED (8GB) NO FG
FULLSCREEN: OFF
FRAME PACING: ON
FRAME CAP: 60
NVIDIA RÉFLEX: OFF
OUTPUT RESOLUTION: 1920x1080p
UPSCALER: GAME'S OWN
RENDER RESOLUTION: 100%
WINDOW SCALING FILTER: LANCZOS
HANDHELD PROFILE: OFF
REBURST BUFFS: AUTO
Start of route >
Video memory: 5gb (8b)
shared memory: 2gb (8gb)
End of route >
Video memory: 7.5gb (8gb)
shared memory: 4.3gb (8gb)

4.PRESET BALANCED (8GB) NO FG
FULLSCREEN: OFF
FRAME PACING: ON
FRAME CAP: 60
NVIDIA RÉFLEX: OFF
OUTPUT RESOLUTION: 1920x1080p
UPSCALER: DLAA
RENDER RESOLUTION: NATIVE DLAA
WINDOW SCALING FILTER: LANCZOS
HANDHELD PROFILE: OFF
REBURST BUFFS: AUTO
Start of route >
Video memory: 5gb (8b)
shared memory: 2gb (8gb)
End of route >
Video memory: 7.3gb (8gb)
shared memory: 4.4gb (8gb)

Configuration: CPU RYZEN 7 5700G + RTX 3060TI + 16GB RAM 3200MHZ + SSD NVME 4.0 - WINDOWS 11 PRO 26H2 - NVIDIA GPU DRIVER 621.14

hookshot_log - MINIMUM (4GB) NO FG.txt
hookshot_log - BALANCED (8GB) NO FG + HANDLED PROFILE ON.txt
hookshot_log - BALANCED (8GB) NO FG.txt
hookshot_log - DLAA 1080p NO FG.txt

2.0.14 <img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/ba9cd022-6fb9-48c0-823c-8aed5efd5bf5" /> <img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/ea77440e-2eb1-4ca8-890d-55ac400b80f7" /> <img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/2f38b173-2197-47b8-994f-40aaa93bca2e" /> <img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/8e5c103c-cb15-48c5-aa75-a814d8dac3d7" /> [hookshot_log - BALANCED (8GB) NO FG + HANDLED PROFILE ON.txt](https://github.com/user-attachments/files/34648183/hookshot_log.-.BALANCED.8GB.NO.FG.%2B.HANDLED.PROFILE.ON.txt) [hookshot_log - BALANCED (8GB) NO FG.txt](https://github.com/user-attachments/files/34648182/hookshot_log.-.BALANCED.8GB.NO.FG.txt) [hookshot_log - DLAA 1080p NO FG.txt](https://github.com/user-attachments/files/34648184/hookshot_log.-.DLAA.1080p.NO.FG.txt) [hookshot_log - MINIMUM (4GB) NO FG.txt](https://github.com/user-attachments/files/34648185/hookshot_log.-.MINIMUM.4GB.NO.FG.txt) .14 I ran some tests following a specific route using various presets: Forest Temple > Kokori Forest > Hyrule Field > Kakariko Village > Teleport back to the Forest Temple, I repeat the route once more. The issue I’ve described in some detail below causes frame drops and a 30%–40% reduction in frame-per-second (FPS) performance after a short period of gameplay. One thing to note is that, whether using the minimum or the balanced preset, the system's power consumption appears to be the same. (1) "minimum" (4GB) preset, the game starts after the loading screen using about 5GB of the 8GB of dedicated VRAM and 2GB of the 8GB of shared memory. By the end of the route, dedicated VRAM usage reaches around 7.2GB (out of 8GB), while shared memory jumps from 2GB to 4.5GB—occasionally hitting 5GB at certain points. (2) "balanced" (8GB) preset (without Frame Generation), the figures are surprisingly similar—nearly identical, in fact. After loading, it starts with 5GB of the 8GB of dedicated video memory and 2GB of the 8GB of shared memory; by the end of the test, following the teleport back to the Forest Temple, it finishes with 7.2GB of the 8GB of dedicated video memory and 4.2GB of shared video memory (slightly less than with the "minimum" preset). (3) with the "balanced" (8GB) preset (without Frame Generation) and the "Handheld" profile enabled, the results match the previous test, showing almost no difference compared to "Docked" mode at a higher resolution. (4) When using the "balanced" preset with DLAA enabled, the results are the same as the "balanced" (8GB) preset without it, the only difference being a slightly lower frame rate. 1.PRESET MINIMUM (4GB) NO FG FULLSCREEN: OFF FRAME PACING: ON FRAME CAP: 60 NVIDIA RÉFLEX: OFF OUTPUT RESOLUTION: 1920x1080p UPSCALER: GAME'S OWN RENDER RESOLUTION: 50% WINDOW SCALING FILTER: LANCZOS HANDHELD PROFILE: ON REBURST BUFFS: AUTO Start of route > Video memory: 5gb (8b) shared memory: 2gb (8gb) End of route > Video memory: 7.3gb (8gb) shared memory: 4.3gb (8gb) 2.PRESET BALANCED (8GB) NO FG FULLSCREEN: OFF FRAME PACING: ON FRAME CAP: 60 NVIDIA RÉFLEX: OFF OUTPUT RESOLUTION: 1920x1080p UPSCALER: GAME'S OWN RENDER RESOLUTION: 50% WINDOW SCALING FILTER: LANCZOS HANDHELD PROFILE: OFF REBURST BUFFS: AUTO Start of route > Video memory: 5gb (8b) shared memory: 2gb (8gb) End of route > Video memory: 7.4gb (8gb) shared memory: 4.1gb (8gb) 3.PRESET BALANCED (8GB) NO FG FULLSCREEN: OFF FRAME PACING: ON FRAME CAP: 60 NVIDIA RÉFLEX: OFF OUTPUT RESOLUTION: 1920x1080p UPSCALER: GAME'S OWN RENDER RESOLUTION: 100% WINDOW SCALING FILTER: LANCZOS HANDHELD PROFILE: OFF REBURST BUFFS: AUTO Start of route > Video memory: 5gb (8b) shared memory: 2gb (8gb) End of route > Video memory: 7.5gb (8gb) shared memory: 4.3gb (8gb) 4.PRESET BALANCED (8GB) NO FG FULLSCREEN: OFF FRAME PACING: ON FRAME CAP: 60 NVIDIA RÉFLEX: OFF OUTPUT RESOLUTION: 1920x1080p UPSCALER: DLAA RENDER RESOLUTION: NATIVE DLAA WINDOW SCALING FILTER: LANCZOS HANDHELD PROFILE: OFF REBURST BUFFS: AUTO Start of route > Video memory: 5gb (8b) shared memory: 2gb (8gb) End of route > Video memory: 7.3gb (8gb) shared memory: 4.4gb (8gb) Configuration: CPU RYZEN 7 5700G + RTX 3060TI + 16GB RAM 3200MHZ + SSD NVME 4.0 - WINDOWS 11 PRO 26H2 - NVIDIA GPU DRIVER 621.14 [hookshot_log - MINIMUM (4GB) NO FG.txt](https://github.com/user-attachments/files/34647454/hookshot_log.-.MINIMUM.4GB.NO.FG.txt) [hookshot_log - BALANCED (8GB) NO FG + HANDLED PROFILE ON.txt](https://github.com/user-attachments/files/34647455/hookshot_log.-.BALANCED.8GB.NO.FG.%2B.HANDLED.PROFILE.ON.txt) [hookshot_log - BALANCED (8GB) NO FG.txt](https://github.com/user-attachments/files/34647456/hookshot_log.-.BALANCED.8GB.NO.FG.txt) [hookshot_log - DLAA 1080p NO FG.txt](https://github.com/user-attachments/files/34647457/hookshot_log.-.DLAA.1080p.NO.FG.txt)
sena-senpai commented 2026-11-10 21:33:29 +00:00 (Migrated from github.com)

v2.0.14 log attached (from #1925). RTX 5060 Laptop 8 GB, driver allows 7131 MB, driver 621.14.
Output 1920x1080, Render resolution Auto, Frame generation Off, preset Custom, no hookshot_env.txt.

  • Over the driver's allowance 11 times, peak 7341 MB used, 1356 MB of it free in the blocks
  • Render target blocks: 1408 MB for 427 MB of images
  • Mirrors ~1950 MB, 8 pools stay in system memory at the mirrors' cap
  • No crash this session

v2.0.13: 3 times over, peak 8059 MB with 2359 MB free in the blocks (render target blocks 1024 MB for 379 MB).
An earlier v2.0.13 session (Frame generation 3x, Render resolution 100%) ended in VK_ERROR_DEVICE_LOST
entering Sacred Forest Meadow.

hookshot_log_v2.0.14.txt

v2.0.14 log attached (from #1925). RTX 5060 Laptop 8 GB, driver allows 7131 MB, driver 621.14. Output 1920x1080, Render resolution Auto, Frame generation Off, preset Custom, no hookshot_env.txt. - Over the driver's allowance 11 times, peak 7341 MB used, 1356 MB of it free in the blocks - Render target blocks: 1408 MB for 427 MB of images - Mirrors ~1950 MB, 8 pools stay in system memory at the mirrors' cap - No crash this session v2.0.13: 3 times over, peak 8059 MB with 2359 MB free in the blocks (render target blocks 1024 MB for 379 MB). An earlier v2.0.13 session (Frame generation 3x, Render resolution 100%) ended in VK_ERROR_DEVICE_LOST entering Sacred Forest Meadow. [hookshot_log_v2.0.14.txt](https://github.com/user-attachments/files/34652110/hookshot_log_v2.0.14.txt)
rossoneri1899-sudo commented 2026-11-10 23:00:12 +00:00 (Migrated from github.com)

Adding a Windows data point on v2.0.14. In my case the growth over a long session ended in a crash: Windows ran out of commit (RAM + page file), and then ParallelDecompThread wrote to memory it had failed to commit. Related to #1072 as well.

System

  • Windows 11, RTX 5070 Ti 16 GB (driver 617.42), Ryzen 7 7800X3D, 32 GB RAM, ~14 GB page file (system managed)
  • hookshot v2.0.14 (source 3a9998c3)
  • Settings: Custom preset, output 2560x1440, render resolution 100%, Lanczos, frame generation 8x

What happened

  • I played for about 4 h 50 min in one session (10:00 to 14:49).
  • Windows raised "low virtual memory" warnings at about 10 and 2 minutes before the crash. They named hookshot.exe as using 38.3 GB and then 37.6 GB of virtual memory. The README says a run normally uses about 10 GB.
  • The log shows commit failures, followed by an access violation:
[hos Resource Memory] mem: commit of 0x90000 bytes at 0x7e482f0000 failed (error 1455)
[hos Resource Memory] mem: Windows is out of memory (RAM and page file): close other programs, or let Windows manage the page file size
[hos Resource Memory] mem: commit of 0x200000 bytes at 0x7e47d80000 failed (error 1455)
... (9 more commit failures)
[hos ParallelDecompThread] CRASH: exception 0xc0000005 (write 0x107e47e10000, guest 0x7e47e10000) at hookshot.exe+0x394d4c8
[hos ParallelDecompThread] CRASH: host backtrace: hookshot.exe+0x394d4c8 hookshot.exe+0x18e38236 hookshot.exe+0x18e35c49 hookshot.exe+0x18e34b93 hookshot.exe+0x113d hookshot.exe+0x15be hookshot.exe+0x19731b38 KERNEL32.DLL+0x2dda7 ntdll.dll+0x7ee4c

The Windows Error Reporting entry matches it: APPCRASH in hookshot.exe, exception c0000005, offset 0x394d4c8.

A side note: after a commit fails, the decompression thread seems to write into the range anyway instead of handling the failure.

The log lines you asked for, early and late in the session

Early (first minute):

vk: VRAM: 1519 MB used of 15227 MB allowed (198 MB of it free in the blocks); textures 96 MB (budget 6144 MB), 11 textures
vk: memory heaps: heap 0 (device): 62 blocks 1120 MB, 160 allocations 921 MB; used 1519 of 15227 MB; heap 1 (system): 11 blocks 253 MB, 42 allocations 204 MB; used 495 of 15178 MB;
vk: imports: 4 live (96 MB), 0 retired still imported (0 MB), 0 retired given back (0 MB)
vi: 281 frames presented (56.1 fps over the last 5.0 s, interval 1)

Late (seconds before the crash):

vk: VRAM: 13107 MB used of 14785 MB allowed (3491 MB of it free in the blocks); textures 5806 MB (budget 6144 MB), 3090 textures
vk: memory heaps: heap 0 (device): 166 blocks 12349 MB, 3316 allocations 8858 MB; used 13107 of 14785 MB; heap 1 (system): 33 blocks 971 MB, 44 allocations 875 MB; used 4327 of 15178 MB;
vk: imports: 88 live (3216 MB), 0 retired still imported (0 MB), 25 retired given back (1216 MB)
vi: 1038468 frames presented (28.4 fps over the last 7.6 s, interval 1)

A counter that only grows

vk: releases kept for stopped work rose steadily over the whole session and never went down: 6001 → 50001 → 100001 → 148001 → 194001 → 238001 → 286001, the last value just before the crash. I don't know whether that counter matters here, but it is the one thing in the log that climbs without ever falling back.

Retired pools are being given back ("0 retired still imported"), so this doesn't look like the #1057 retired-pool case.

I can attach the full log (47 MB) or test an env var or build if that would help.

Adding a Windows data point on v2.0.14. In my case the growth over a long session ended in a crash: Windows ran out of commit (RAM + page file), and then `ParallelDecompThread` wrote to memory it had failed to commit. Related to #1072 as well. **System** - Windows 11, RTX 5070 Ti 16 GB (driver 617.42), Ryzen 7 7800X3D, 32 GB RAM, ~14 GB page file (system managed) - hookshot v2.0.14 (source 3a9998c3) - Settings: Custom preset, output 2560x1440, render resolution 100%, Lanczos, frame generation 8x **What happened** - I played for about 4 h 50 min in one session (10:00 to 14:49). - Windows raised "low virtual memory" warnings at about 10 and 2 minutes before the crash. They named hookshot.exe as using 38.3 GB and then 37.6 GB of virtual memory. The README says a run normally uses about 10 GB. - The log shows commit failures, followed by an access violation: ``` [hos Resource Memory] mem: commit of 0x90000 bytes at 0x7e482f0000 failed (error 1455) [hos Resource Memory] mem: Windows is out of memory (RAM and page file): close other programs, or let Windows manage the page file size [hos Resource Memory] mem: commit of 0x200000 bytes at 0x7e47d80000 failed (error 1455) ... (9 more commit failures) [hos ParallelDecompThread] CRASH: exception 0xc0000005 (write 0x107e47e10000, guest 0x7e47e10000) at hookshot.exe+0x394d4c8 [hos ParallelDecompThread] CRASH: host backtrace: hookshot.exe+0x394d4c8 hookshot.exe+0x18e38236 hookshot.exe+0x18e35c49 hookshot.exe+0x18e34b93 hookshot.exe+0x113d hookshot.exe+0x15be hookshot.exe+0x19731b38 KERNEL32.DLL+0x2dda7 ntdll.dll+0x7ee4c ``` The Windows Error Reporting entry matches it: APPCRASH in hookshot.exe, exception c0000005, offset 0x394d4c8. A side note: after a commit fails, the decompression thread seems to write into the range anyway instead of handling the failure. **The log lines you asked for, early and late in the session** Early (first minute): ``` vk: VRAM: 1519 MB used of 15227 MB allowed (198 MB of it free in the blocks); textures 96 MB (budget 6144 MB), 11 textures vk: memory heaps: heap 0 (device): 62 blocks 1120 MB, 160 allocations 921 MB; used 1519 of 15227 MB; heap 1 (system): 11 blocks 253 MB, 42 allocations 204 MB; used 495 of 15178 MB; vk: imports: 4 live (96 MB), 0 retired still imported (0 MB), 0 retired given back (0 MB) vi: 281 frames presented (56.1 fps over the last 5.0 s, interval 1) ``` Late (seconds before the crash): ``` vk: VRAM: 13107 MB used of 14785 MB allowed (3491 MB of it free in the blocks); textures 5806 MB (budget 6144 MB), 3090 textures vk: memory heaps: heap 0 (device): 166 blocks 12349 MB, 3316 allocations 8858 MB; used 13107 of 14785 MB; heap 1 (system): 33 blocks 971 MB, 44 allocations 875 MB; used 4327 of 15178 MB; vk: imports: 88 live (3216 MB), 0 retired still imported (0 MB), 25 retired given back (1216 MB) vi: 1038468 frames presented (28.4 fps over the last 7.6 s, interval 1) ``` **A counter that only grows** `vk: releases kept for stopped work` rose steadily over the whole session and never went down: 6001 → 50001 → 100001 → 148001 → 194001 → 238001 → 286001, the last value just before the crash. I don't know whether that counter matters here, but it is the one thing in the log that climbs without ever falling back. Retired pools are being given back ("0 retired still imported"), so this doesn't look like the #1057 retired-pool case. I can attach the full log (47 MB) or test an env var or build if that would help.
Zarigis commented 2026-11-11 02:35:41 +00:00 (Migrated from github.com)

A reproduction with numbers, on a 16 GB card: the mirrored game memory ("imports") grows with every new area and is never given back. On a scripted tour that revisits Castle Town's market, the market goes from 53 fps on the first visit to 30 fps (lows of 15) after Lake Hylia, once VRAM passes the driver's allowance. Places that don't need the extra memory are unaffected: the open field and Kokiri hold 59-60 fps on the same build.

Over one tour the imports went from 43 pools (1.6 GB) to 109 (4.0 GB), with 0 retired still imported the whole time. So this isn't the retired-pool case #1906 handles. I'm checking whether the renderer drops a pool's import when the game finalizes it, and will follow up.

Per-visit numbers

Teleport tour (Debug tab teleports), 20 s camera spin at each stop: Market → Kakariko → Market → Lake Hylia → Market → Hyrule Field (Lost Woods bridge tunnel) → Market. Values from the log's VRAM:, memory heaps: and imports: lines at the end of each market visit.

Market visit Game fps (5 s reports) VRAM used / allowed Imports Textures (budget 6144 MB) Free inside the blocks
1st 53.6 13.3 / 14.6 GB 81 pools, 2944 MB 6184 MB 2.5 GB
2nd (after Kakariko) 50.3, sinking to 39 14.9 / 14.9 GB 101, 3568 MB 7187 MB 2.7 GB
3rd (after Lake Hylia) 29.6, lows of 15 14.1 / 13.9 GB 105, 3872 MB 7081 MB 2.6 GB
4th (after the field) 31.3, lows of 22 14.4 / 14.9 GB 109, 4000 MB 6924 MB 2.8 GB

The Hyrule Field stop in between went back to a flat 60 fps once the market's memory was out of use. So it's memory pressure, not the area itself.

The same tour without Lake Hylia (Market → Kakariko → Market → Kakariko → Market → field → Market) grew more slowly (39 → 101 pools, 1.6 → 3.9 GB). It stayed just under the allowance, and the market only went 52.8 → 48-49 fps.

What fills VRAM
  1. Imports: only ever grow. +2.4 GB over the tour, none retired or given back.
  2. The market's textures go over their own budget: 6.9-7.2 GB against 6144 MB on later visits. The render targets the camera spin makes count toward that total, so the budget pass may not keep up while the camera turns.
  3. 2.5-2.8 GB free inside VMA's blocks that the driver still counts (#1637 / #1821 territory). RX_VK_COMPACT=1 loses the device at its first compaction pass in this scene here, with or without other switches.

The textures and render targets do go back down between areas (4-6 GB, cycling). The imports are the part that only goes up.

Setup
  • RTX 4080 SUPER 16 GB, driver 617.42; i9-14900KF; Windows 11.
  • 4K output, 3D at 100%, the game's own upscaler, frame generation off, windowed, HDR on. RX_VK_PARALLEL=3; it changes nothing here, the baseline holds 60 fps with it.
  • A local build of main at 0ffc004 plus #1944 (DLSS Frame Gen row off) and uncommitted local changes, all switched off.
  • Baseline on the same build, loading saves without teleporting: open field 59.4 fps standing / 58.9 spinning, Kokiri 59.8 / 59.8.
A reproduction with numbers, on a 16 GB card: the mirrored game memory ("imports") grows with every new area and is never given back. On a scripted tour that revisits Castle Town's market, the market goes from 53 fps on the first visit to 30 fps (lows of 15) after Lake Hylia, once VRAM passes the driver's allowance. Places that don't need the extra memory are unaffected: the open field and Kokiri hold 59-60 fps on the same build. Over one tour the imports went from 43 pools (1.6 GB) to 109 (4.0 GB), with `0 retired still imported` the whole time. So this isn't the retired-pool case #1906 handles. I'm checking whether the renderer drops a pool's import when the game finalizes it, and will follow up. <details><summary>Per-visit numbers</summary> Teleport tour (Debug tab teleports), 20 s camera spin at each stop: Market → Kakariko → Market → Lake Hylia → Market → Hyrule Field (Lost Woods bridge tunnel) → Market. Values from the log's `VRAM:`, `memory heaps:` and `imports:` lines at the end of each market visit. | Market visit | Game fps (5 s reports) | VRAM used / allowed | Imports | Textures (budget 6144 MB) | Free inside the blocks | |---|---|---|---|---|---| | 1st | 53.6 | 13.3 / 14.6 GB | 81 pools, 2944 MB | 6184 MB | 2.5 GB | | 2nd (after Kakariko) | 50.3, sinking to 39 | 14.9 / 14.9 GB | 101, 3568 MB | 7187 MB | 2.7 GB | | 3rd (after Lake Hylia) | 29.6, lows of 15 | 14.1 / 13.9 GB | 105, 3872 MB | 7081 MB | 2.6 GB | | 4th (after the field) | 31.3, lows of 22 | 14.4 / 14.9 GB | 109, 4000 MB | 6924 MB | 2.8 GB | The Hyrule Field stop in between went back to a flat 60 fps once the market's memory was out of use. So it's memory pressure, not the area itself. The same tour without Lake Hylia (Market → Kakariko → Market → Kakariko → Market → field → Market) grew more slowly (39 → 101 pools, 1.6 → 3.9 GB). It stayed just under the allowance, and the market only went 52.8 → 48-49 fps. </details> <details><summary>What fills VRAM</summary> 1. **Imports: only ever grow.** +2.4 GB over the tour, none retired or given back. 2. **The market's textures go over their own budget:** 6.9-7.2 GB against 6144 MB on later visits. The render targets the camera spin makes count toward that total, so the budget pass may not keep up while the camera turns. 3. **2.5-2.8 GB free inside VMA's blocks** that the driver still counts (#1637 / #1821 territory). `RX_VK_COMPACT=1` loses the device at its first compaction pass in this scene here, with or without other switches. The textures and render targets do go back down between areas (4-6 GB, cycling). The imports are the part that only goes up. </details> <details><summary>Setup</summary> - RTX 4080 SUPER 16 GB, driver 617.42; i9-14900KF; Windows 11. - 4K output, 3D at 100%, the game's own upscaler, frame generation off, windowed, HDR on. `RX_VK_PARALLEL=3`; it changes nothing here, the baseline holds 60 fps with it. - A local build of main at 0ffc004 plus #1944 (DLSS Frame Gen row off) and uncommitted local changes, all switched off. - Baseline on the same build, loading saves without teleporting: open field 59.4 fps standing / 58.9 spinning, Kokiri 59.8 / 59.8. </details>
Zarigis commented 2026-11-11 02:43:26 +00:00 (Migrated from github.com)

Correction to the above: the imports are in the system-memory heap, not VRAM (vram_usage counts only device-local heaps), and only ~100-180 MB of them belong to pools the game has finalized. Their growth isn't what pushes VRAM over. What tracks the collapse is the texture cache going over its budget at the market (7.1-7.2 GB of 6144 MB) while 2.6-2.8 GB sits free inside VMA's blocks. The log says at the driver's limit, room in the blocks: not squeezed at those peaks, so the driver's count reaches its allowance and pages while the renderer sees room. The per-visit numbers above still stand.

Correction to the above: the imports are in the system-memory heap, not VRAM (`vram_usage` counts only device-local heaps), and only ~100-180 MB of them belong to pools the game has finalized. Their growth isn't what pushes VRAM over. What tracks the collapse is the texture cache going over its budget at the market (7.1-7.2 GB of 6144 MB) while 2.6-2.8 GB sits free inside VMA's blocks. The log says `at the driver's limit, room in the blocks: not squeezed` at those peaks, so the driver's count reaches its allowance and pages while the renderer sees room. The per-visit numbers above still stand.
Zarigis commented 2026-11-11 03:02:35 +00:00 (Migrated from github.com)

Correction: the RX_VK_COMPACT=1 device loss mentioned above was caused by a local change in my build (a cached-view shortcut that didn't know about moved textures), not by #1821. With that fixed, compaction runs cleanly here.

Correction: the `RX_VK_COMPACT=1` device loss mentioned above was caused by a local change in my build (a cached-view shortcut that didn't know about moved textures), not by #1821. With that fixed, compaction runs cleanly here.
edinoryaziz commented 2026-11-11 15:25:55 +00:00 (Migrated from github.com)

8 GB card (RTX 3060 Ti): the upscaler's own render targets are a large part of the overcommit

Adding data to this issue rather than opening a new one, since a vk: VRAM: report
from an 8 GB card was asked for.

v2.1.0, Windows 11 build 22621, NVIDIA 32.0.16.2101. Output resolution 2560x1440,
borderless. Same route for all three runs (Castle Town, Hyrule Field, the Castle
fountain).

Finding: on this card the game's own upscaler accounts for a large share of the
video-memory overcommit, and turning it off does more for VRAM and for frame time
than any render-resolution change.

Setting VRAM over-allowance GPU ms/frame textures made/frame
1440p, render 100%, Upscaler game's own 7.2 - 8.4 of 7.0 GB 20 17 - 33 14 - 17
1440p, render 75%, Upscaler game's own 7.0 - 7.6 of 7.0 GB 7 3.4 - 4.8 28 - 35
1440p, render 75%, Upscaler Off 5.9 - 6.8 of 7.0 GB 0 2.8 - 11.4 7 - 9.8

With the upscaler off (plain linear stretch) the game stops overshooting the
allowance entirely, texture churn drops about 70%, and the worst frame in the
vk: status: lines went from 149 ms to 25-69 ms. Image also stops looking
oversharpened, since the reconstruction network is what sharpens at 75%.

Caveat for anyone reading: Upscaler Off also removes the temporal AA that comes
with that network, so this is a mitigation for memory-constrained cards rather
than a recommendation for everyone.

Relevant log lines at the first two settings:

vk: VRAM: 7606 MB used of 7129 MB allowed (1903 MB of it free in the blocks);
textures 2607 MB (budget 3...
vk: over the driver's video-memory allowance (7.0 of 7.0 GB)
vk: VRAM: 7068 MB used of 7115 MB allowed; textures 3557 MB (budget 3286 MB)

In the second one the textures ask for 3557 MB against a 3286 MB budget, so the
game evicts and remakes 28-35 textures every frame. That is where the stutter is.
It is not shader compilation: waits for shaders or pipelines stays at
0.0 - 1.0 ms for the whole run.

Two questions if useful:

  1. Is the upscaler's render-target allocation counted inside the same texture
    budget, or outside it? The numbers above suggest one shared pool, so enabling
    the upscaler effectively shrinks the texture budget available to the scene.

  2. memory_budget=3 (the Balanced 8GB caps) lowered the overshoot but raised
    churn, because the derived texture budget landed below demand. Is there a
    value intended to leave headroom for the upscaler on an 8 GB card?

Happy to attach the full hookshot_log.txt for any of the three runs, or to run
a specific setting and route and post that log instead.

8 GB card (RTX 3060 Ti): the upscaler's own render targets are a large part of the overcommit Adding data to this issue rather than opening a new one, since a `vk: VRAM:` report from an 8 GB card was asked for. v2.1.0, Windows 11 build 22621, NVIDIA 32.0.16.2101. Output resolution 2560x1440, borderless. Same route for all three runs (Castle Town, Hyrule Field, the Castle fountain). Finding: on this card the game's own upscaler accounts for a large share of the video-memory overcommit, and turning it off does more for VRAM and for frame time than any render-resolution change. Setting VRAM over-allowance GPU ms/frame textures made/frame 1440p, render 100%, Upscaler game's own 7.2 - 8.4 of 7.0 GB 20 17 - 33 14 - 17 1440p, render 75%, Upscaler game's own 7.0 - 7.6 of 7.0 GB 7 3.4 - 4.8 28 - 35 1440p, render 75%, Upscaler Off 5.9 - 6.8 of 7.0 GB 0 2.8 - 11.4 7 - 9.8 With the upscaler off (plain linear stretch) the game stops overshooting the allowance entirely, texture churn drops about 70%, and the worst frame in the `vk: status:` lines went from 149 ms to 25-69 ms. Image also stops looking oversharpened, since the reconstruction network is what sharpens at 75%. Caveat for anyone reading: Upscaler Off also removes the temporal AA that comes with that network, so this is a mitigation for memory-constrained cards rather than a recommendation for everyone. Relevant log lines at the first two settings: vk: VRAM: 7606 MB used of 7129 MB allowed (1903 MB of it free in the blocks); textures 2607 MB (budget 3... vk: over the driver's video-memory allowance (7.0 of 7.0 GB) vk: VRAM: 7068 MB used of 7115 MB allowed; textures 3557 MB (budget 3286 MB) In the second one the textures ask for 3557 MB against a 3286 MB budget, so the game evicts and remakes 28-35 textures every frame. That is where the stutter is. It is not shader compilation: `waits for shaders or pipelines` stays at 0.0 - 1.0 ms for the whole run. Two questions if useful: 1. Is the upscaler's render-target allocation counted inside the same texture budget, or outside it? The numbers above suggest one shared pool, so enabling the upscaler effectively shrinks the texture budget available to the scene. 2. `memory_budget=3` (the Balanced 8GB caps) lowered the overshoot but raised churn, because the derived texture budget landed below demand. Is there a value intended to leave headroom for the upscaler on an 8 GB card? Happy to attach the full hookshot_log.txt for any of the three runs, or to run a specific setting and route and post that log instead.
SnusBlaze commented 2026-11-11 21:17:14 +00:00 (Migrated from github.com)

Same problem on a 6 GB laptop card, v2.1.0.

Setup: RTX 4050 Laptop (5152 MB allowed), Core 5 210H, 16 GB RAM (single-channel), Windows 11, 1080p, DLSS, Low (6GB) preset, frame generation off.

What happens:

  • VRAM goes over the allowance during play: 5.2-5.7 of 5.0 GB.
  • Textures go 500+ MB over their budget (about 2.3 GB against 1.8 GB) and are not evicted: the log says "at the driver's limit, room in the blocks: not squeezed", with 0.5-1.1 GB free inside the blocks.
  • 8 pools stay in system memory ("the mirrors have 1296 MB of 1300").
  • Result: 16-22 fps with default settings, many slow frames from memory sync, and 1-second freezes when the VRAM fills up.

What I tried:

  • Minimum (4GB) preset: same budgets, same result.
  • RX_VK_SQUEEZE_ALWAYS=1: the budget dropped, but textures stayed (in use), and fps got worse.
  • RX_VK_COMPACT=1 alone: VRAM stayed under the limit, but the mirrors dropped to 512 MB and fps fell to 19-23.

Best workaround so far (in hookshot_env.txt):

RX_VK_WB_MAX_KB=1024
RX_VK_COMPACT=1
RX_VK_COMPACT_PCT=90
RX_VK_MIRROR_MB=1300

This gives 33-46 fps, memory-sync slow frames went from 45 to 7, and camera turning is much smoother. VRAM is still slightly over (5.1-5.5 GB). More details on the compaction tests in #1821. Log attached.

hookshot_log_async_flicker.txt
hookshot_log_compact_mirror1300.txt

Same problem on a 6 GB laptop card, v2.1.0. **Setup:** RTX 4050 Laptop (5152 MB allowed), Core 5 210H, 16 GB RAM (single-channel), Windows 11, 1080p, DLSS, Low (6GB) preset, frame generation off. **What happens:** - VRAM goes over the allowance during play: 5.2-5.7 of 5.0 GB. - Textures go 500+ MB over their budget (about 2.3 GB against 1.8 GB) and are not evicted: the log says "at the driver's limit, room in the blocks: not squeezed", with 0.5-1.1 GB free inside the blocks. - 8 pools stay in system memory ("the mirrors have 1296 MB of 1300"). - Result: 16-22 fps with default settings, many slow frames from memory sync, and 1-second freezes when the VRAM fills up. **What I tried:** - Minimum (4GB) preset: same budgets, same result. - `RX_VK_SQUEEZE_ALWAYS=1`: the budget dropped, but textures stayed (in use), and fps got worse. - `RX_VK_COMPACT=1` alone: VRAM stayed under the limit, but the mirrors dropped to 512 MB and fps fell to 19-23. **Best workaround so far** (in `hookshot_env.txt`): RX_VK_WB_MAX_KB=1024 RX_VK_COMPACT=1 RX_VK_COMPACT_PCT=90 RX_VK_MIRROR_MB=1300 This gives 33-46 fps, memory-sync slow frames went from 45 to 7, and camera turning is much smoother. VRAM is still slightly over (5.1-5.5 GB). More details on the compaction tests in #1821. Log attached. [hookshot_log_async_flicker.txt](https://github.com/user-attachments/files/34707220/hookshot_log_async_flicker.txt) [hookshot_log_compact_mirror1300.txt](https://github.com/user-attachments/files/34707221/hookshot_log_compact_mirror1300.txt)
SnusBlaze commented 2026-11-11 21:17:48 +00:00 (Migrated from github.com)

One more detail from the same log: the textures used in the last 8 presents total only about 145 MB, while the cache holds about 1.5 GB. The largest ones (47 MB each, 3072x3072 ASTC) were last used 100+ presents ago and still not evicted ("room in the blocks: not squeezed"). Evicting textures unused for a few seconds would leave room for the mirrors, so no pools would have to stay in system memory.

One more detail from the same log: the textures used in the last 8 presents total only about 145 MB, while the cache holds about 1.5 GB. The largest ones (47 MB each, 3072x3072 ASTC) were last used 100+ presents ago and still not evicted ("room in the blocks: not squeezed"). Evicting textures unused for a few seconds would leave room for the mirrors, so no pools would have to stay in system memory.
NotRexed commented 2026-11-11 21:23:40 +00:00 (Migrated from github.com)

Thanks for the report. Reports of the same problem are now collected in #993, which lists this one with your details and links back here, so one fix closes them together and the open list stays readable. Follow #993 for the fix, and add new details there (or here). If this turns out to be a separate problem it will be reopened.

Thanks for the report. Reports of the same problem are now collected in #993, which lists this one with your details and links back here, so one fix closes them together and the open list stays readable. Follow #993 for the fix, and add new details there (or here). If this turns out to be a separate problem it will be reopened.
Commenting is not possible because the repository is archived.
No milestone
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Hookshot#1710
No description provided.