Repository navigation
Open
Description
This issue collects every open report of Linux / Steam Deck GPU hangs, crashes, low fps and build failures, so there is one place to follow it. The individual reports were closed pointing here; their logs, screenshots and discussion stay in each linked issue.
Summary
Linux reports that are still open after v2.0.6:
- RADV GPU hangs (gfx ring timeout and GPU reset);
- low fps on RADV, limited by submits;
- coloured noise on RADV;
- NVIDIA driver crashes;
- AppImage builder link failures.
Two Linux problems are fixed in v2.0.6:
- the RADV crash right after "Preparing shaders" (write 0x40 in libvulkan_radeon.so, CRASH Mesa 26.2.6 Linux with v2.0.5 [regression] #803, PR Use float sampled types for depth comparisons #834);
- builds stopping with BrokenPipeError / signal 9 or stuck at "jump tables".
Affected GPUs and versions
- GPUs: Steam Deck (LCD / OLED), Steam Machine, RX 6600 to RX 9070 XT, Radeon 680M / 780M / 8060S on RADV; RTX 3060 / 3090 / 4090 / 5070 / 5090 on the NVIDIA driver.
- Systems: CachyOS, Bazzite, SteamOS, Fedora, NixOS, Pop!_OS, Arch.
- Versions: v2.0.1-v2.0.5 and main.
Evidence from the logs
RADV GPU hangs
- Crash On RX 6600 #620: gfx ring timeout and MODE1 reset about 3 minutes in. v2.0.5 checkpoints: last finished c36a4f3f667c886a, first unfinished 89ca750f9852b7ca (the foliage colour pass).
- RX 6800 XT (RADV, Linux): GPU hang and full GPU reset a few seconds after loading a save in Kokiri, also with RX_VK_KEEP_RETIRED=1 #604 (RX 6800 XT): comp ring then gfx ring timeout, and the PC reboots.
- GPU hang on Steam Deck running CachyOS (RADV): gfx ring timeout, ring reset fails, MODE2 reset — v2.0.1 / v2.0.3 / v2.0.4 #817 (Steam Deck): hardicd traced the hang to the task shader code 2c56dc1006942f74, a nested 2D culling loop that runs for seconds.
- [CachyOS Linux/AMD] GPU hang (gfx ring timeout → MODE2 reset, device lost) on Radeon 680M iGPU / RADV after the intro movie; window stays black (works on Windows, same hardware) #984 (680M): MODE2 reset after the intro movie; fine on Windows on the same laptop.
- [AMD RX6600] Saturated colors, crashes after the first scene of the intro (Fedora Linux 44 x86_64) #977 (RX 6600, Fedora): device lost after the logo.
RADV low fps
- [AMD RX 9070 / RADV Linux] Low FPS (22-25) in Kokiri Forest + color distortion & background flicker #528: the batched-submit poll flushes 10x more.
RX_VK_BATCH_POLL_US=2000restores the fps (+65% on a 7900 XTX);RX_VK_PARALLEL=4withHOS_FPS_TARGET=60reached 55 fps. - RADV (Radeon 8060S / Linux): each vkQueueSubmit2 costs ~2 ms on the replay thread, which limits heavy scenes to ~42 fps #789 (8060S): each vkQueueSubmit2 costs about 2 ms (userptr imports), a cap of about 42 fps.
- Just unplayable on mid-high end setup (on Linux) #756, Steam Machine #776: similar reports (Steam Machine in Steam Machine #776).
- v2.0.6 makes fewer submits on RADV (PR vk: batched submits: a progress poll flushes only after 2 ms by default #689) and puts the startup compute shaders behind the driver-crash guard (PR Guard cached compute precompilation against driver faults #758).
RADV rendering
- Corrupted rendering (noise / psychedelic colours) on AMD RADV (BC-250, GFX1013) #361: coloured noise after the intro; Resolution 50% worked around it.
- Game freezes on loading screen and crashes OS after restarting due to color corruption bug #873: garbled colours.
NVIDIA on Linux
- Linux/NVIDIA: gameplay freeze and crash in libnvidia-gpucomp.so.580.142 on RTX 3060 #801: segfault in libnvidia-gpucomp.so.580.142 during a pipeline compile; the bundled SDL picked the offscreen driver.
- Immediate crash on Linux (Pop!_OS, NVIDIA GTX 1650) - headless graphics error #797: exits at "no graphics server yet (headless)".
- Frozen Screen when throwing bombs #950: freeze when throwing bombs (
dma-buf not imported (-2)). - Black screen and bad renderings in hyrule castle and death montain after 2.02 update #745: black textures.
Start-up
- SteamOS 9070XT never launches after successful setup #836, Steam Deck (RADV VANGOGH): process exits leaving the starting room through the door, no device lost, log ends in the finalized-texture upload path #862: may be the write-0x40 crash fixed in v2.0.6; please retest.
Builder
- steam deck build error app image #478 (Deck): lift.py stops on "ADR / ADRP+ADD code addresses outside the unwind-covered functions".
- Build error: link FAILED (0s), 0 undefined symbols #733, Linux AppImage v2.0.5: link FAILED, 20 undefined symbols (f_811f3a80 ...), v2.0.4 builds fine #890:
link FAILEDwith undefined f_8xxxxxxx symbols. Deletingsa/gen/.lift_keyis the workaround in Linux AppImage v2.0.5: link FAILED, 20 undefined symbols (f_811f3a80 ...), v2.0.4 builds fine #890; open PR Build: a lift that lost functions is not reused; one build at a time on a work folder (#890) #918 stops reusing an incomplete lift. - Error in linux builder lastest versión #762: builder error, photo only.
- Compilation step error stops build #990 (kept open as a separate bug): the v2.0.6 AppImage build stops at
hos_main.c:14: fatal error: '../gpu/vk/oot_cheat_items.h' file not found. A commenter copiedgpu/vk/oot_cheat_items.hfrom main into~/.local/share/hookshot/builder/versions/v2.0.6/usr/share/hookshot/gpu/vk/and the build finished.
Wayland
- [Wayland] Freezes after NVN window creation on hybrid AMD+NVIDIA laptop; works with SDL_VIDEODRIVER=x11 + forcing NVIDIA ICD #992 (hybrid AMD iGPU + GTX 1650, COSMIC Wayland): freezes after
nvn: window of 3 texturesand never reaches vkCreateInstance. It runs withSDL_VIDEODRIVER=x11plusVK_DRIVER_FILES=/usr/share/vulkan/icd.d/nvidia_icd.json.
Workarounds
- Steam Deck GPU hang (GPU hang on Steam Deck running CachyOS (RADV): gfx ring timeout, ring reset fails, MODE2 reset — v2.0.1 / v2.0.3 / v2.0.4 #817):
RX_VK_NO_MESH=1avoided it on v2.0.4 / v2.0.5.RX_VK_SKIP_CODE=2c56dc1006942f74needs hardicd's patch and is not in a release. - RADV low fps:
RX_VK_BATCH_POLL_US=2000,RX_VK_PARALLEL=4. - RADV coloured noise: Resolution 50%.
- Builder
link FAILED: deletesa/gen/.lift_keyand build again. - Wayland on hybrid laptops:
SDL_VIDEODRIVER=x11([Wayland] Freezes after NVN window creation on hybrid AMD+NVIDIA laptop; works with SDL_VIDEODRIVER=x11 + forcing NVIDIA ICD #992).
Reports merged here (25 issues, about 53 people)
| Issue | Title | People | GPU | Version | Key detail |
|---|---|---|---|---|---|
| #361 | Corrupted rendering (noise / psychedelic colours) on AMD RADV (BC-250… | 9 | BC-250, RX 6600, RX 580, Ally X, RX 6800 XT (RADV) | v2.0.1 | RADV coloured-noise picture after intro: PR #425 (in v2.0.0) fixes the noise per adnanioricce (Ally Z1E Bazzite); Resolution 50% worked around it. sabogalc RX 6800 XT Ca… |
| #620 | Crash On RX 6600 | 6 | RX 6600 x3, RX 6900 XT (RADV) | v2.0.5 | Linux RADV hang ~3 min into intro/Kokiri (gfx ring timeout, MODE1 reset, KWin dies); v2.0.5 checkpoints: last finished c36a4f3f667c886a, first unfinished 89ca750f9852b7c… |
| #817 | GPU hang on Steam Deck running CachyOS (RADV): gfx ring timeout, ring… | 5 | Steam Deck (CachyOS, SteamOS 3.8/3.9.5) | v2.0.4-v2.0.5 | GPU hang (gfx ring timeout, reset fails) in Kokiri/Deku Tree on RDNA2 Deck: hardicd traced it to one task shader, NVN code 2c56dc1006942f74 (~30 programs, nested 2D cull… |
| #528 | [AMD RX 9070 / RADV Linux] Low FPS (22-25) in Kokiri Forest + color d… | 4 | RX 9070, RX 9060 XT, RX 7900 XTX, Radeon 860M (RADV) | v2.0.1 | RADV low fps: faster-fps batched-submit poll flushes 10x more (11.5 -> 2.5 fps on 9060 XT); RX_VK_BATCH_POLL_US=2000 restores (+65% on 7900 XTX); PR #448 udmabuf halves… |
| #50 | Tested on CachyOS (Linux) with RX 6700 XT + Ryzen 5 5600 | 3 | RX 6700 XT, RX 6600 (CachyOS) | early | Linux: 9-10 fps, black after cutscene 30 min |
| #756 | Just unplayable on mid-high end setup (on Linux) | 3 | RX 9070 XT (CachyOS) | v2.0.2 | 5-10 fps at start, CPU 35% GPU 45%, no visible shader preparation (RADV poll issue #528?) |
| #776 | Steam Machine | 3 | Steam Machine (RDNA3 Navi 33) | v2.0.2 | 10-15 fps in Kokiri with CPU/GPU ~30% (SteamOS); another Steam Machine user can't open it |
| #478 | steam deck build error app image | 2 | Steam Deck | device-lost-fix | Steam Deck AppImage build stops in lift.py: "ADR / ADRP+ADD code addresses outside the 284387 unwind-covered functions: 14083" with romfs/exefs and .nup; another Deck us… |
| #873 | Game freezes on loading screen and crashes OS after restarting due to… | 2 | RX 6600 XT (RADV), MSI Claw 8 AI+ (Arc) | v2.0.0 | Garbled colours at the Deku Tree/Navi scene, save load hangs, OS freeze |
| #490 | Cachyos & AMD Testing Info (9070XT, R7 5800X) | 1 | RX 9070 XT (CachyOS) | no-visual-studio | Stutter, flashing, freezes to one frame (log) |
| #604 | RX 6800 XT (RADV, Linux): GPU hang and full GPU reset a few seconds a… | 1 | RX 6800 XT (RADV) | main 97e7c55 | RADV RDNA2: GPU hang (comp ring then gfx ring timeout, MODE1 reset, PC reboot) a few seconds after loading a Kokiri save, also with RX_VK_KEEP_RETIRED=1; no page fault;… |
| #733 | Build error: link FAILED (0s), 0 undefined symbols | 1 | Steam Deck | v2.0.3 | Linux link fails: v2.0.2 missing code_0xx.o objects, v2.0.3 ld.lld undefined symbols f_82647a90... (new code split) |
| #745 | Black screen and bad renderings in hyrule castle and death montain af… | 1 | RTX 4090 (Linux 615.78) | v2.0.2 | Hyrule Castle / Death Mountain black textures and shaders after v2.0.2, fixed by restart for a while (log) |
| #762 | Error in linux builder lastest versión | 1 | SteamOS | v2.0.3 | Linux builder compile error, only a photo of the screen |
| #770 | RX 6700XT Ryzen 5 5600 graphic driver crash and low fps | 1 | RX 6700 XT (RADV CachyOS) | v2.0.3 | Wrong colours, PC crash when the Deku Tree appears, 23 fps (5 logs) |
| #789 | RADV (Radeon 8060S / Linux): each vkQueueSubmit2 costs ~2 ms on the r… | 1 | Radeon 8060S (RADV) | v2.0.2 | Each vkQueueSubmit2 ~2 ms on the replay thread (userptr imports), ~42 fps cap; submit thread patch +4-8 fps but flashes; asks RX_VK_WAIT_GPU=1 default on RADV |
| #797 | Immediate crash on Linux (Pop!_OS, NVIDIA GTX 1650) - headless graphi… | 1 | GTX 1650 (Pop!_OS) | v2.0.4 | Linux AppImage exits at once: log stops at "no graphics server yet (headless)" then "window closed, exiting" (SDL video driver; cf. #801 offscreen driver on NixOS) |
| #801 | Linux/NVIDIA: gameplay freeze and crash in libnvidia-gpucomp.so.580.1… | 1 | RTX 3060 (NixOS, driver 580.142) | a598b9f | Segfault in libnvidia-gpucomp.so.580.142+0xe3facc on an mkw_vk worker (pipeline compile) after 2 h, and again at the next start after 27 s; 18 GB RAM + full swap; bundle… |
| #836 | SteamOS 9070XT never launches after successful setup | 1 | RX 9070 XT (SteamOS) | v2.0.5 | SteamOS: Play does nothing, icon in taskbar, no window (log .1); maybe same as #803 |
| #862 | Steam Deck (RADV VANGOGH): process exits leaving the starting room th… | 1 | Steam Deck OLED (RADV VANGOGH) | main 58af2c0 / 15ec28d | Process exits (exit 0, no device lost) walking out of the starting room on 58af2c0 + ms-eviction patch; vanilla 15ec28d segfaults write 0x40 in libvulkan_radeon.so durin… |
| #890 | Linux AppImage v2.0.5: link FAILED, 20 undefined symbols (f_811f3a80… | 1 | Linux | v2.0.5 | Linux link fails with 20 undefined f_81xxxxxx: lift cache (.lift_key) reused C missing the code_NNN_k parts; delete sa/gen/.lift_key; PR #918 stops reusing an incomplete… |
| #950 | Frozen Screen when throwing bombs | 1 | RTX 5070 (Linux) | v2.0.5 | Picture freezes when throwing bombs; one log crashes reading guest memory in hookshot_vk.so; dma-buf not imported (-2) in all logs |
| #977 | [AMD RX6600] Saturated colors, crashes after the first scene of the i… | 1 | RX 6600 (RADV, Fedora) | v2.0.5 | Oversaturated colours, crash right after the logo that takes down the GNOME session; device lost in both logs |
| #984 | [CachyOS Linux/AMD] GPU hang (gfx ring timeout → MODE2 reset, device… | 1 | Radeon 680M (RADV, CachyOS) | a598b9f | GPU hang after the intro movie (gfx ring timeout, MODE2 reset, device lost), 4 times; fine on Windows on the same laptop (honest-eta-era build) |
| #992 | [Wayland] Freezes after NVN window creation on hybrid AMD+NVIDIA lapt… | 1 | GTX 1650 + Renoir iGPU (hybrid, Pop!_OS COSMIC Wayland) | v2.0.5 | Wayland hybrid laptop: freezes after 'nvn: window of 3 textures', renderer never reaches vkCreateInstance, process unkillable (D state); works with SDL_VIDEODRIVER=x11 +… |
Adding a report
Please update to v2.0.6 first (https://github.com/NotRexed/Hookshot/releases/tag/v2.0.6; Update next to Play in the launcher). Please add: distro, kernel, Mesa or NVIDIA driver version, GPU, version, hookshot_log.txt, and for hangs the dmesg lines around the reset.
All tracking issues
- [Tracking] VRAM and RAM fill up over play time: fps fades, textures degrade or turn rainbow, a restart fixes it (mostly 4-8 GB cards) #993 Garbled / rainbow textures that get worse over play time (VRAM over budget, mostly 4-8 GB cards)
- [Tracking] Floating trees, missing mountains and vanishing near vegetation #994 Floating trees, missing mountains and vanishing near vegetation
- [Tracking] Low FPS with low GPU usage (CPU-bound), FPS drops in Castle Town / Hyrule Field, shader stutter #995 Low FPS with low GPU usage (CPU-bound), FPS drops in Castle Town / Hyrule Field, shader stutter
- [Tracking] AMD on Windows: driver crash, device lost or freeze (RX 5000-9000, Deku Tree / after cutscenes) #996 AMD on Windows: driver crash, device lost or freeze (RX 5000-9000, Deku Tree / after cutscenes)
- [Tracking] AMD handhelds and APUs (ROG Ally / Ally X, Legion Go, Radeon 780M/860M/890M): black screen, device lost, reboot #997 AMD handhelds and APUs (ROG Ally / Ally X, Legion Go, Radeon 780M/860M/890M): black screen, device lost, reboot
- [Tracking] Black screen with audio after the intro / at the Deku Tree cutscene #998 Black screen with audio after the intro / at the Deku Tree cutscene
- [Tracking] Intel Arc and Core Ultra iGPUs: device lost, black screen after the intro, Linux ANV crashes #999 Intel Arc and Core Ultra iGPUs: device lost, black screen after the intro, Linux ANV crashes
- [Tracking] Linux and Steam Deck: GPU hangs, crashes, low FPS and build failures #1000 Linux and Steam Deck: GPU hangs, crashes, low FPS and build failures
- [Tracking] GPUs without mesh shaders (GTX 9xx/10xx, RX 400/500/5000, Iris Xe/UHD): v2.0.6 fallback reports #1001 GPUs without mesh shaders (GTX 9xx/10xx, RX 400/500/5000, Iris Xe/UHD): v2.0.6 fallback reports
- [Tracking] Invisible or missing objects, walls and effects #1002 Invisible or missing objects, walls and effects
- [Tracking] Antivirus false positives on HookshotBuilder.exe (Defender Trojan:Script/Wacatac.H!ml) #1003 Antivirus false positives on HookshotBuilder.exe (Defender Trojan:Script/Wacatac.H!ml)
- [Tracking] Lighting: overexposure, over-bright bloom, crushed or black shadows, black faces #1004 Lighting: overexposure, over-bright bloom, crushed or black shadows, black faces
- [Tracking] Flicker and flashing: brightness pulses, one-frame flashes, doubled image with frame pacing #1005 Flicker and flashing: brightness pulses, one-frame flashes, doubled image with frame pacing
- [Tracking] AMD rendering: white silhouettes, block squares / grid lines, no anti-aliasing (networks in software) #1006 AMD rendering: white silhouettes, block squares / grid lines, no anti-aliasing (networks in software)
- Feature requests (collected) #1007 Feature requests (collected)
Metadata
Metadata
Assignees
Labels
No labels
Activity
134 remaining items
addisonbair commentedon Nov 12, 2026
Steam Deck performance: where the frame goes, what helps today, and what didn't
We measured every change on a Steam Deck LCD in one deterministic scene: headless, standing in Kokiri Forest next to Saria (~2,400 draws), GPU fixed at 1200 MHz, same save, alternating A/B runs.
v2.0.14 is still the fastest Hookshot on the Deck, by 30-40 %. Per-thread perf traces of main show where it goes:
sched_yield) for workers that sit in readback waits. On main those are ~1 a frame of 10-14 ms each, on the newest submission; on v2.0.14 they're ~6 a frame of ~0.6 ms.RX_VK_DIRECT_WB_PAGES=0would show it, but watch for [AMD iGPU / RADV] v2.0.7: objects render glowing white, whole-screen whiteouts while moving, heart drawn over the minimap (Legion Go S, SteamOS) #1126's foliage glow in motion.The Deck's own ceiling: even on v2.0.14 the frame is ~37 ms of replay that runs in order under the order lock (on a P16 stand-in it's held 93-98 % of the time). Little of the frame is idle handoff. These were all measured and didn't help on the Deck:
Faster single-thread CPUs are what move this.
What works on the Deck today (v2.0.14):
RX_VK_MESH_OPT=1 RX_VK_PER_QUEUE_FENCES=0 RX_VK_WAIT_GPU=0 RX_VK_BATCH_MAX=4 RADV_PERFTEST=cswave32inhookshot_env.txt.That's ~24 fps base in villages. Hyrule Field is CPU-bound (~10 fps): there, a lower GPU clock (800-1000 MHz) leaves more of the 15 W for the CPU.
On v2.1.0 / main:
RX_VK_BATCH_IDLEat its default; set alone it lengthens readback waits. perf(vk): on the Steam Deck's APU, no idle send by default, and held submits go out while a readback waits #2422 pairs it with a fix.The full numbers, the benchmark setup, and a v2.0.14-based branch with the merged Deck fix (#1965) are at https://github.com/addisonbair/Hookshot/blob/deck/docs/steam-deck.md. We're stepping back from Deck tuning for now; #2422 stays open.
🤖 Generated with Claude Code
naxil commentedon Nov 12, 2026
amvlk here (amd 5600G + amd 6600 8gb), solve all the problem, but it rebuild the shaders (instead radv, load the shaders immediatly)
kuraeow commentedon Nov 12, 2026
hookshot_gpu.txt
hookshot_log.txt
I'm experiencing GPU hangs on my Steam Deck OLED with Hookshot v2.1.0 (source
e561602e), running SteamOS.Even before the intro cutscene, the title screen has noticeable performance issues. FPS drops significantly during the close-up shot of the grass, and the frame rate is generally quite uneven. The frametime graph shows regular, periodic spikes, almost as if some part of the original game's 60 Hz timing or synchronization is still interfering with frame pacing. That's just a guess based on the graph, though.
The intro cutscene itself runs at around 60 FPS, but the frame pacing isn't consistently smooth. Right at the transition into gameplay, FPS drops to ~1, then slowly recovers to ~8 FPS while the screen remains black. On my latest attempt, I briefly saw the first second of gameplay before the GPU hung and the game eventually exited.
VRAM allocation shown by the Steam Deck overlay reached approximately 5.5–5.6 GB.
I tried the following settings in
hookshot_env.txt:The shaders were rebuilt (over 67,000 compilation operations), but the issue persists.
The kernel log confirms an AMDGPU hang:
On one attempt, the entire Steam Deck became unresponsive and required a forced reboot. On the latest attempt, SteamOS remained responsive and the game exited after the GPU reset.
I've attached
hookshot_log.txtandhookshot_gpu.txt.Let me know if any additional diagnostics would help!
camilobt commentedon Nov 12, 2026
Steam Deck LCD, v2.1.0: GPU only ~56% busy because of readback waits (#1375);
RX_VK_NO_READBACK_WAIT=1gives +16%. Also: whyRX_VK_ASYNC=1freezes at boot, with a patchHardware / build
0x6801063, GPU 1600 MHz, 15 W cape561602e), built on the Deck from my own.nup(v131072)Method
HOS_HEADLESS=1),HOS_HANDHELD=1,HOS_OUTPUT_RES=1280x800,RX_VK_MESH_OPT=1,RX_VK_PRECOMPILE=0vi: ... fps over the last 5.0 slines (90 s), after ~170 s of warm-up. Run-to-run spread of the baseline: 21.62-21.88 fps (5 runs).1. Configuration and hangs (loading the save into Kokiri)
gfx_0.0.0 timeout, GPU reset while loadingRX_VK_MESH_NOCULL=2c56dc1006942f74(the 2.1.0 workaround)gfx_0.0.0 timeout, GPU reset while loadingRX_VK_TASK_MESH_FALLBACK=1RX_VK_MESH_OPT=1RX_VK_MESH_NOCULL+RX_VK_MESH_OPT=1So on this Deck, NOCULL alone does not avoid the hang in 2.1.0; MESH_OPT does.
2. CPU and GPU take turns
Render resolution (menu row,
resolution=inhookshot_options.ini) against frame time:Frame time is about GPU time + ~21 ms in every case: the GPU and the CPU work one after the other.
gpu_busy_percent(amdgpu sysfs, 300 samples at 10 Hz) agrees: 55.7% busy at Auto, about half the samples near 100% and the rest near 0.An all-thread sample (
HOS_SAMPLE_ALL,scripts/crit.py) shows the CPU is not saturated either: on average fewer than 2 game threads run at once, sead::MainThread is blocked ~86% of the time (job waits in f_8007fe60 / the 20 µsSleepThreadpoll at lr0x8009a478, ~58k calls/s, and event waits), and the Presentation Thread waits inqueue_get~39% of the time.3.
RX_VK_NO_READBACK_WAIT=1: +16%RX_VK_NO_READBACK_WAIT=1No GPU hang.
RX_VK_FLASH=1withRX_VK_SHOT_EVERY=1over ~3 minutes of frames: no flash in either configuration. Screenshots at the same presents look the same: grass, fog and lighting. I only tested this one scene, so the CPU reads that the readback waits protect (#1375) may still matter elsewhere. Maybe the waits could be limited to the reads that need them, instead of waiting for every submission that wrote the page.4. Things that did not change fps here (each ±0.1-0.2 of the baseline)
HOS_RESERVE_CORE=0,HOS_VCORES=0,HOS_CORES=8,HOS_POLL_SLEEP_NS=5000,HOS_PRESENT_POLL=1,HOS_PRESENT_NOWAIT=1,RX_VK_BATCH_IDLE=0,HOS_SPIN_US=0HOS_PIN=Presentation=c0, the Presentation Thread on the reserved core, which on Linux sits idle without async becausereplay_pin_mask()is Windows-only: replay submit went from 30.7 to 26.7 ms, but fps stayed the same (21.7). The replay is not the frame's limit here.hookshot_vk.sowith-O3(21.9) or-mtls-dialect=gnu2(21.8). ThinLTO (-flto=thin) gave 22.2 alone, and nothing on top of NO_READBACK_WAIT (25.37).HOS_GRAPHICS_SCALE=0.5andHOS_RES_SCALE=0.5did not change the 3D scale (GPU time unchanged).5.
RX_VK_ASYNC=1freezes at boot on Linux/RADV: cause and patchWith
RX_VK_ASYNC=1the game stops after ~19 submits: no present, every thread idle. All-thread sample: sead::MainThread is inn_nvnSyncWait→mkwvk::wait()→vkWaitSemaphoreswith no timeout. The value it waits for belongs to work the replay thread has stopped at an event wait (submission 11..14 stopped at command buffer 0's wait for event ...), for the event the game signals after this wait. Or it is recorded but held in the batch (RX_VK_BATCH, on with RADV), which nothing flushes while the game waits. The 3 ms hold/drain inwait()is skipped by!async_on().RX_VK_ASYNC=1 RX_VK_BATCH=0: boots and plays, but at 11 fps, because unbatched submits cost ~15 ms a frame here.gpu/vk/vk_replay.cpp): inwait()with async on, it bumpsdrain_waitersand notifiesq_cvso that the replay thread runs its stopped work (drain 2, aswait_queue_emptydoes), and it waits in 2 ms steps, flushing the batch between them. With it, ASYNC + batching boots and plays with no freeze.I can run more A/B tests on this Deck if useful (same scene, same script).
The patch (gpu/vk/vk_replay.cpp, v2.1.0)
ieocin commentedon Nov 12, 2026
Blackscreen into crash, GPU reset (KDE plasmashell, steam, etc. crash & visual bugs)
GPU: RX 6600
OS: Linux (Bazzite)
hookshot version: 2.1.0
where it happens: after the intro cutscene title card cuts into black
hookshot_log.txt
camilobt commentedon Nov 12, 2026
Follow-up on the Deck readback waits: which readback costs the time
Same Steam Deck LCD and v2.1.0 setup as my comment above. I logged every readback wait (
RX_VK_LOG_READBACK_WAITS=1,RX_VK_LOG_READBACK=4000). Then I built a diagnostichookshot_vk.sothat reads the range before and after each wait ininvalidate()and counts how often the bytes changed. Scene: Kokiri Forest, standing.Wait time by range (300 logged waits):
0x113b623000/0x113b628000(+0x3980, alternating pair)0x115bcde000/0x115bcf9580+0x1b580,0x117cf04000/0x117cf9f040+0x9b040, ...)value == fence, the latest one), and its data changes. The first words are0.1, 25000, 1.7778, ~1.0, 0, 0, 24999.9: near, far and 16:9 aspect, so it looks like a camera-related GPU result (visibility/culling?).RX_VK_NO_READBACK_WAIT=1comes almost entirely from letting the game read that pair about 2 frames late.Backport of #2125 + #2222 + #2422 onto v2.1.0 (readback waits on, held submits sent during readback waits): 21.0 fps, GPU 53.9% busy, the same as plain 2.1.0.
RX_VK_NO_READBACK_WAIT=1on top of the backport: 25.4 fps. On this Deck the cost is the wait itself, not when the held work goes out.Camera test (
RX_VK_NO_READBACK_WAIT=1): Saria's dialogue, where the scripted camera cuts between shots.HOS_REALTIME_STEP=0,HOS_INPUT_FRAME_CLOCK=1, a shot every 20 presents. Without waits the scene ran at 26.4 fps, against 22.8 / 20.9 with them. Comparing shots of the same moment, I saw no missing or late geometry: grass, trees, fairies and houses are all there. But two runs with waits already diverged (dialogue progress differs), so this is not a frame-exact comparison. I can't rule out a one- or two-frame pop-in at cuts.If that pair is something the game can read one frame late, special-casing it would give the Deck about +16% while keeping the wait for the exposure meter and everything else. I can test a build that skips the wait for one range if you tell me what it is.
mooki000 commentedon Nov 12, 2026
Tracker upkeep note (merged pull requests and code checked against main
51da0464; no new test run was made for it).Several old summary entries can be marked completed on main
51da0464: #1012 packages the missing AppImage header, #1839 fixes SDL2's COSMIC/libdecor startup deadlock, #1936 supplies the supported container build on non-Ubuntu hosts, #2111 explains denied udmabuf access, #2340 stops refused NVIDIA dma-buf import attempts, and #1965 enables the task/mesh optimizer on RADV. #2362 additionally makes Linux AMD Automatic choose full Compute. These are bounded fixes, not proof that every Deck/RADV hang, memory-pressure exit or NVIDIA crash is gone. In particular #2411's memfd-discard fault remains separate, and #2431 deliberately waits behind it. Please update those stale subcases without closing this tracker; no new game run was made for this note.hclaria commentedon Nov 12, 2026
Steam Deck: three system settings that removed most of the long frame-rate drops for me (swap order, a memory protection, huge pages)
Edit, same day: use
MemoryLow=6G, not8G. With 8G, loading a save took 80 s on this Deck; with 6G, same game and same renderer, 12 s (12 to 15 s before the protection was set). The game grows to about 10 GB while a save loads and the GPU driver asks for memory at the same time; at 8G the kernel had almost nothing it could take quickly: a 64 MB allocation took 3.4 s, and 180,000 to 240,000 pages went to swap per 30 s against 650,000 to 980,000 without the protection. With 6G the protection still holds in play: the game keeps 5.7 to 8.2 GB resident, and swap-outs fall to 6,000 to 7,000 pages per 30 s once the save is loaded. The commands below now say 6G; the numbers in section 2 were measured with 8G.Sharing measurements from one Steam Deck, because the default SteamOS memory setup works against this game and the fix is outside Hookshot. Related to the memory reports in #993.
Setup. Steam Deck OLED (Van Gogh
0x1435, 16 GB), SteamOS 3.9.5, kernel 7.2.7-valve2, Mesa 26.2.0-devel (RADV). Game built from main atc544828f. Play sessions used a renderer built fromc544828fwith #2789, #2644, #2774, #2731, #2767 and #2649 merged on top; the headless A/B below used the unchangedc544828frenderer. Not default switches:HOS_HANDHELD=1,RX_VK_LOW_SPEC=1,RX_VK_VRAM_MB=2000,RX_VK_TEX_MAX_MB=128,RX_VK_TEX_MAX_DIM=1024,RX_VK_TEX_SKIP_MB=4,RX_VK_FRAMEGEN_MULT=2,RX_VK_FSR_FG=0. The swap file had already been enlarged from SteamOS's 1 GB to 16 GB.The game's footprint here is about 15.6 GB (its cgroup: ~4 GB resident plus ~11.6 GB swapped at one point), so several GB always live in swap on a 16 GB Deck. What matters is how.
1. zram before the disk swap file costs RAM instead of saving it. SteamOS puts a 7.2 GB zram device at priority 100 and
/home/swapfileat -1. The game's cold pages compress badly. After 20 hours of uptime (/sys/block/zram0/mm_stat,/proc/vmstat): zram's peak memory use was 4.48 GB for at most 7.2 GB stored, 6.7 million pages had been stored uncompressed (huge_pages_since), 192 GB had been swapped out and 46 GB back in.Swap file first (
swapon -p 200 /home/swapfile), same scene, headless, standing still in Hyrule Field, 110 s measured:The frame rate of a still scene does not change. In play the long collapses went away.
2. The kernel then still evicted the game with gigabytes free. In play, with the swap file first: game resident 2.7 GB, 11.1 GB in swap, 4.0 GB of RAM free.
/proc/buddyinfoshowed 3.4 GB free and no free block of order 7 or more. Over 4 minutes kswapd ran 1,861 times (pageoutrun) and reclaimed 4.14 million pages (pgsteal_kswapd): 2,225 pages a run, which iscompact_gapfor an order-10 request (2,048). So something asks for 4 MB blocks about 8 times a second, memory is too fragmented to give them, and each try evicts ~8 MB. I did not trace the caller; the GPU driver's page pool is my guess, and the pinned dma-buf imports may be what keeps memory fragmented. The cost was swap-in storms: 339,000 pages read back in 30 s and 5.5 to 6.2 fps for about 35 s at the Kakariko windmill, in a scene of 1,100 to 1,450 draws with nothing compiling.systemctl set-property --runtime user.slice MemoryLow=8Gstopped it (8G is what I measured here; 6G is the value to use, see the edit at the top): pages swapped out went from 100,000 to 580,000 per 30 s to 9,000 to 17,000, then 0 for the next minutes; memory pressure (/proc/pressure/memory, full avg10) from 5.5 % to 0.0 to 0.5 %.3. Transparent huge pages off (
alwaystomadvise,khugepaged/defrag0). The amount evicted did not change, but windows of 120 presents under 12 fps went from 7 in 9 minutes to 2 in 6.5 minutes. Weaker evidence: one session each, not exactly the same route.All three together, 4 minutes through Castle Town market, 30 windows of 120 presents at ~2,150 draws: mean 16.8 fps, one window under 12 fps (8.5, on arrival in an area), 96,000 pages swapped out in total, against 4.1 million in 4 minutes before.
Commands (root; the last three do not survive a reboot as written):
The swap priority can be kept across reboots with a drop-in for
home-swapfile.swapholding[Swap]andPriority=200, and the protection by leaving--runtimeout.To check a Deck:
swapon --show,cat /sys/block/zram0/mm_stat(third field: bytes of RAM zram uses now, fifth: its peak),cat /proc/pressure/memory.Limits. One Deck, short sessions, a renderer with open PRs in play. The settings are system-wide. Swap on the SSD means more writes to it. The 6 GB figure fits 16 GB of RAM and this GPU memory use; 8 GB was too tight (the edit at the top), and I did not try other values.
If it is useful I can send a troubleshooting row for the README, and a Linux line for the boot memory notice when a zram device outranks a disk swap. Huge pages could also be turned off for the game's process alone (
prctl(PR_SET_THP_DISABLE)), which I have not tried yet.eleyoy commentedon Nov 12, 2026
A report for the RADV GPU hang section: VK_ERROR_DEVICE_LOST on a Van Gogh APU (ROG Xbox Ally, Ryzen Z2 A), with the kernel side of it.
Same signature as #2245, on a different Van Gogh device. Three things here may be new: the kernel's own verdict on the hang, a measurement that rules out the
lockup_timeouttheory, and the reason the #1300 Steam Deck workaround does not reach this title even on the same GPU.I no longer have
hookshot_log.txt— the install was removed before I thought to keep it — but the kernel log of the crashed boot survived and is attached. The game lines below are the ones I recorded at the time.System
Symptom
Exactly as in #2245: the game starts, the file-select works, the opening cutscene plays, and the handover to gameplay loses the device. Reproduced three times out of three.
The last frame before the loss was a heavy upload frame:
What the kernel says
This is the part I have not seen posted in the Linux reports.
journalctl -kfor the crashed boot:Two details worth noting:
emitted seq=504079,signaled seq=504077. That is consistent with a shader that does not terminate, not with an out-of-bounds access.The
lockup_timeouttheory does not holdSome reports suggest the kernel may be giving up too early on a long submission. On this system that is not what happened:
/proc/cmdlinecarries onlyamdgpu.ppfeaturemask=0xfff7ffff).So the hung job did not merely overrun a tight deadline — it never completed at all. Raising
lockup_timeoutwould delay the reset, not prevent it.RX_VK_MESH_NOCULL=1does not reach this title's task shader#1300 added
RX_VK_MESH_NOCULLfor a Steam Deck task-shader hang. The Steam Deck and this device are both Van Gogh, so this looked like the same bug. It is not reachable from here:The whole run compiles exactly one task code, and the pattern the workaround looks for is not present in it. With the variable set, the build still produced the unmodified shader and the configuration is byte-for-byte the one that hangs.
If the culling pattern is title-specific, OoT's task shader appears to use a different shape than the one #1300 targets, and the workaround silently does nothing rather than reporting that it cannot help. The log line is clear enough once you look for it, but nothing surfaces it to the user.
mesh_shaders=2(Compute) does avoid the hangConfirmed over a long session: file select, cutscene, handover, and extended gameplay with zero device losses. Two costs worth recording:
20463pipelines. Compute:67099predicted. On this hardware the first build of the compute path is a one-to-two hour job, and it is easy to mistake for a hang — the ETA climbs for a long while before it falls.Performance notes on the Z2 A, in case they are useful
Steady ~19-20 fps in normal outdoor areas, with the GPU idle:
GPU-bound wait 0.3 mswith the CPU pinned at its 3799 MHz ceiling: the limit is draw submission on four Zen 2 cores, not the GPU. Lowering resolution or quality preset changes nothing measurable, and the power limit is not the constraint either.One option made a large difference and is off by default:
sampler_cache=0sampler_cache=1descriptorstexture lookupsSame scene class, from
slow submitlines. If there is no correctness reason to keep it off, it may be worth defaulting on — or at least worth mentioning in the handheld guidance.Suggestions
RX_VK_MESH_NOCULLis requested but the pattern is not found, consider surfacing that to the user rather than only to the log — it currently looks like the workaround is active when it is not.RX_VK_UNEVEN_BC=0) are Windows-shaped. For Linux/RADV,mesh_shaders=2is the one thing that worked here, and the kernel ring-timeout signature above is a quick way for a reporter to confirm they have this bug rather than a different one.Happy to run further tests on this hardware, including with
RX_VK_CHECKPOINTS=1or a debug build. The install has been removed since, but I can rebuild it if a freshhookshot_log.txtor adevcoredumpwould help.Appendix: the kernel log around the hang
journalctl -kfor the crashed boot, from the first amdgpu message to the end of the recovery. Pasted rather than attached because it is short.hclaria commentedon Nov 12, 2026
Steam Deck OLED: @camilobt's readback finding tested in play. It holds, and the game is clearly better with it
@camilobt I tested your lead on a second Deck, in play with the camera moving. It is solid: this is the biggest frame-rate improvement I have had on the Deck so far.
Setup. Steam Deck OLED (Van Gogh
0x1435, 16 GB), SteamOS 3.9.5, kernel 7.2.7-valve2, Mesa 26.2.0-devel (RADV). Game built from main atc544828f. Renderer:c544828fwith #2789, #2644, #2774, #2731, #2767 and #2649 merged, with and without the test patch below. Switches and memory settings as in my comment above.The same pair is here. Two ranges of
0x3980bytes,0x5000apart, read in turn (0x113b1c3000/0x113b1c8000in one area). Without the patch, 444 of 3,000 readbacks waited for their write-back, 4.42 ms each.What I ran. A small test patch around
invalidate()ingpu/vk/vk_replay.cpp:RX_VK_READBACK_LATE=newestskips the wait when the range's write-back value is the newest value handed out (v >= fence()on entry), which is your "read right after the submission that writes it". UnlikeRX_VK_NO_READBACK_WAIT=1it keepswb_pages_note,memory_note_readbackand the catch-up, and a range whose writer is an older submission still waits.One difference from your v2.1.0 numbers: on this build the large ranges (
+0x9b040,+0x8b040,+0x1b580) also have the newest submission as their writer (75 of 75 calls each), so the rule lets them through as well. Between 440 and 1,100 of 3,000 readbacks, depending on the area, are then read without their wait, and what is left waits 0.02 to 0.2 ms.In play, not headless. One session of 12 minutes with the patch (several areas, camera moving), against the session before it on the same renderer without the patch. Windows of 120 presents, grouped by draws a frame:
RX_VK_READBACK_LATE=newest(windows)device lost.Limits. One Deck, one session each, two different routes, few windows in some rows. I do not know what the pair holds either. The texture half of
invalidate()(the 1x1 luminance textures of #2462) is not touched.The finding is yours, so the PR is yours to open if you want one. Take the patch below as a starting point or leave it. I am glad to run any build of yours on this OLED and report the numbers.
The test patch (gpu/vk/vk_replay.cpp, on main c544828 with the six PRs above)
zackfairccff-bot commentedon Nov 12, 2026
Steam Deck LCD — ~35 configuration tests, v2.1.0 results, memory exhaustion and comparison with v2.0.14
I'm sharing my results after approximately 35 configuration attempts on a Steam Deck LCD, hoping to help other users avoid repeating experiments that haven't produced sustainable gameplay on my device.
Hardware and software
General configuration tested
One of my main configurations was:
HOS_HANDHELD=1
RX_VK_MESH_OPT=1
RX_VK_PER_QUEUE_FENCES=0
RX_VK_WAIT_GPU=0
RX_VK_BATCH_MAX=4
RX_VK_CHECKPOINTS=1
I also experimented with "RADV_PERFTEST=cswave32", "RX_VK_NO_READBACK_WAIT=1", texture/VRAM limits, LOW_SPEC, mesh fallback and related Vulkan settings across different runs.
These were exploratory tests, not controlled single-variable A/B benchmarks. I cannot attribute every FPS change to a specific flag.
An important detail: one log explicitly reports that "RADV_PERFTEST" was ignored when placed inside "hookshot_env.txt". This variable must be supplied through the process environment to be effective.
Results — v2.1.0
Test| Observations
33| Gameplay fell below 20 FPS and eventually recorded approximately 0.3 FPS
34| Approximately 25 FPS in a lighter scene (~800 draws/frame), followed by major degradation and eventually near-zero FPS
35| Short periods above 20 FPS in lighter scenes; gameplay later around 5–12 FPS
Test 34 was particularly revealing.
The external memory monitor showed:
The game became effectively unplayable. The log ended after window closure, with exit code 0; this should not be described as a confirmed Vulkan device-loss crash.
In test 35, available RAM dropped from 6,283 MB to 1,409 MB. An external safety script terminated the process at its threshold. The script's swap-reading field was broken, so this test does not establish swap exhaustion.
The game also suffered from inconsistent frame pacing and graphics problems, including an incorrectly rendered Link in the equipment menu under some experimental configurations.
Comparison: v2.0.14 versus v2.1.0
I also installed and tested v2.0.14.
On my specific Steam Deck LCD, v2.1.0 gave me a better overall experience than v2.0.14.
Version 2.0.14 displayed Link correctly in the equipment menu, but several other graphics issues returned, and the overall gameplay experience was worse for me.
This is my direct experience, not a controlled same-scene FPS comparison. I'm aware that other Steam Deck LCD users have measured better results on v2.0.14, so I do not claim that v2.1.0 is universally faster.
Regarding camilobt's readback findings
The recent tests showing approximately +16% with "RX_VK_NO_READBACK_WAIT=1" are particularly interesting because I have also experimented with this setting.
However, my runs did not isolate it in a reliable A/B comparison. Moreover, the severe system-memory pressure remained a separate obstacle.
I would be cautious about presenting this flag as a universal fix, given the evidence that some of the skipped readbacks contain changing data.
What I think other Steam Deck users should know
I'm attaching the original logs from tests 33–35, including memory monitoring for tests 34 and 35.
I hope these results help narrow down the remaining problems and avoid redundant testing.
My current conclusion: Hookshot v2.1.0 can enter gameplay on my Steam Deck LCD and occasionally achieve around 25 FPS in less demanding scenes, but I have not yet reproduced stable, visually correct gameplay at - consistently acceptable FPS.!
dm451 commentedon Nov 12, 2026
Linux data point on a 16 GB AMD handheld: crashes and stutter in Hyrule Field, plus a frame-rate finding.
Setup: ROG Ally (Z1 Extreme, Radeon 780M), 16 GB with a 4 GB UMA frame buffer (11.6 GB usable), Mesa RADV, kernel 7.2, Hookshot v2.1.0 built from source in a container. My build carries a few local renderer changes; see the caveat at the end.
Crashes (out of memory)
Stutter (what is left)
a frame's uploads took N ms; one 5 MB texture took 19.5 s.RX_VK_IMPORT_HIGH/RX_VK_IMPORT_LOW: there were no idle imports to give back;HOS_MEMORY_MBbelow 9809: every value from 6656 to 9216 fails at boot ("memory pool without storage", or an indirect call into nothing).Frame rate: the readback wait in
invalidate()RX_VK_NO_READBACK_WAIT=1it ran at 42–45 fps. Every-frame captures in Hyrule Field (500 frames) and Kokiri Forest (600) showed no white flashes or other glitches.mainhas since reworked the readback settle and addedRX_VK_READBACK_WAIT_MS. I'll retest on the next release and report back.jspenaq commentedon Nov 12, 2026
Steam Deck LCD / SteamOS 3.9.5 — Persistent 60 → 6 FPS degradation during Great Deku Tree intro (Compute fallback)
I'd like to contribute some instrumented Steam Deck LCD results to complement the recent investigations into RADV hangs, memory pressure, and sustained performance degradation.
Hardware / environment
RX_VK_PRECOMPILE=0RX_VK_MESH_NOCULL=2c56dc1006942f74RX_VK_FORCE_MESH_FALLBACK=1Compute was explicitly confirmed in the startup log:
Executable SHA-256:
6269ad78e3e97cdda953d3612b2c99b5c71d328812c97f234ae3561d7d7ceb51Vulkan backend SHA-256:
b63023499958a40436bbc1276e17ef3ab2155434bc9aec9afc79bac28da534b01. Observed behavior
During a manually controlled, windowed session, the Zelda title/logo sequence rendered smoothly at approximately 60 FPS.
The severe slowdown began around the transition into the Great Deku Tree opening scene. This was observed directly on the Steam Deck display.
Unlike occasional shader-compilation stutters, the performance degradation was persistent: once it dropped to approximately 6 FPS, it did not recover during the remaining five-plus minutes of observation.
2. Frametime evidence
The session produced 21,023 frame-log records with consecutive frame indices and monotonic timestamps.
The major transition is visible around frame 19032:
This was followed by additional long intervals, including approximately 907 ms and 1,056 ms, before settling into sustained frame times around 150–180 ms.
The frame-log clock started approximately 8.47 seconds after process launch.
These measurements are CPU-side present intervals, not GPU execution or physical scanout timings.
3. Memory pressure and termination
The QA supervisor monitored process and system resources throughout the session.
After 652.8 seconds, it stopped Hookshot because system
MemAvailabledropped below the predefined 1 GiB safety threshold.The persistent slowdown and low available memory are correlated observations; I have not established whether memory pressure is the cause, a consequence, or a separate symptom.
4. Separate GPU reset observation
In an earlier windowed attract/demo test using the same executable/backend, RADV reported:
That run also exhibited severe frametime degradation and increasing memory usage.
However, the effective mesh execution path was not independently confirmed in that earlier run, and the two sessions followed different scene sequences and cache conditions.
These are not controlled Native-vs-Compute A/B results.
5. What might be worth investigating
Given the recent findings in this thread, I am particularly interested in distinguishing between:
The Great Deku Tree transition is a promising reproduction point, but the visual observation was not independently timestamped by the supervisor, so the correlation with frame 19032 is approximate.
Question for maintainers/contributors: Are there specific program IDs, Vulkan timing options, memory counters, or recent
mainchanges you would recommend checking first to distinguish these mechanisms on RADV Van Gogh?I can provide sanitized frame logs, memory/system telemetry, and kernel excerpts. I can also test a pinned revision in a separate installation, keeping the existing reproducible baseline intact.
Evidence: frame-pacing chart and archived CSV/run metadata attached.
frames.csv
Thanks for the ongoing Linux and Steam Deck work!
zackfairccff-bot commentedon Nov 13, 2026
Steam Deck LCD / RADV VANGOGH — Hookshot v2.2.0 RC: Testing Session (Tests 1–6)
Hi @NotRexed and everyone,
Following up on my previous Steam Deck LCD reports, here are the results from my latest testing session using the v2.2.0 release candidate.
Good news: I can launch the game, explore Kokiri Forest and control Link. My latest run, Test 6, produced the best results of this session, including several gameplay intervals around 25–30 FPS.
Unfortunately, severe stuttering remains, particularly in demanding scenes, indoor areas and transitions. The game is not consistently playable yet.
System
Test results — This session only
Test| Configuration / experiment| Result
1| "NO_READBACK_WAIT=1" plus GPU synchronization adjustments| Severe gameplay slowdowns, sometimes approaching 0.1 FPS.
2| Reduced graphics scale, parallel processing and batch polling| Unsuccessful. No comparable log captured.
3| Mesh optimization, NOCULL and texture/VRAM limits| Kokiri rendered, but gameplay remained slow and unstable.
4| Added "FRAMEGEN=0" and resolution override, using FSR 3.1| Best subjective result among the initial tests. Outdoor areas improved, but interiors remained very slow.
5| Disabled FSR and switched the upscaler to Off| Significantly worse, including drops to 0.1 FPS.
6| Returned to Test 4 configuration and recorded a longer session| Best documented result: several gameplay intervals around 25–30 FPS, but major slowdowns still occur.
These were exploratory tests, not identical-scene A/B benchmarks.
Best configuration — Tests 4 and 6
cd "/run/media/deck/f9b867d3-571f-493b-a22e-91206d74cdbc/GAMES/hookshot atualizado" &&
HOS_HANDHELD=1
HOS_OUTPUT_RES=1280x800
RX_VK_FRAMEGEN=0
RX_VK_MESH_OPT=1
RX_VK_MESH_NOCULL=2c56dc1006942f74
RX_VK_VRAM_MB=2000
RX_VK_TEX_MAX_MB=128
RX_VK_TEX_MAX_DIM=1024
./Hookshot-v2.2.0-rc.1-5-g4dd972a8-x86_64.appimage
FSR 3.1 upscaling was enabled. The logs do not independently establish that "HOS_OUTPUT_RES" changed the game's internal picture resolution.
Test 6 — Performance measurements
Log: "hookshot_log(20261113-004346).txt"
This run provides the strongest evidence of improvement so far.
The draw-count filters are approximate workload indicators, not controlled scene comparisons.
Representative log excerpts:
vk: start-up: the shaders took 77.8 s
vk: 14520 presents, 27.5 fps; a frame: 654 draws
vk: 14880 presents, 30.4 fps; a frame: 601 draws
vk: 15000 presents, 29.6 fps; a frame: 601 draws
vk: 2520 presents, 4.5 fps; a frame: 1303 draws
vk: 9960 presents, 9.1 fps; a frame: 2610 draws
display: window closed, exiting
The session ended after the window was closed normally. No "VK_ERROR_DEVICE_LOST" was recorded in this log.
However, multi-second stalls, expensive texture uploads, texture retirement and virtual-core scheduling delays remain visible.
Questions for developers
I can share the complete logs and additional footage from Kokiri Forest.
Thanks to @NotRexed, @KewinBR and everyone investigating Steam Deck compatibility.
This is meaningful progress, but sustained gameplay performance is still the main issue.